Apache Kafka рдХреЛ рд▓рд╛рдЧрд┐ Debezium - CDC рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджреИ

Apache Kafka рдХреЛ рд▓рд╛рдЧрд┐ Debezium - CDC рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджреИ

рдореЗрд░реЛ рдХрд╛рдордорд╛, рдо рдкреНрд░рд╛рдпрдГ рдирдпрд╛рдБ рдкреНрд░рд╛рд╡рд┐рдзрд┐рдХ рд╕рдорд╛рдзрд╛рди/рд╕рдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджрдирд╣рд░реВ рднреЗрдЯреНрдЫреБ, рдЬрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд░реВрд╕реА рднрд╛рд╖рд╛рдХреЛ рдЗрдиреНрдЯрд░рдиреЗрдЯрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдХрдо рдЫред рдпрд╕ рд▓реЗрдЦрдХреЛ рд╕рд╛рде рдо рдореЗрд░реЛ рднрд░реНрдЦрд░рдХреЛ рдЕрднреНрдпрд╛рд╕рдХреЛ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд╕рд╛рде рдПрдЙрдЯрд╛ рдпрд╕реНрддреЛ рдЦрд╛рд▓реА рдард╛рдЙрдБ рднрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреБ, рдЬрдм рдорд▓рд╛рдИ рджреБрдИ рд▓реЛрдХрдкреНрд░рд┐рдп DBMSs (PostgreSQL рд░ MongoDB) рдмрд╛рдЯ Debezium рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ CDC рдШрдЯрдирд╛рд╣рд░реВ рдкрдард╛рдЙрдиреЗ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдерд┐рдпреЛред рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рдпреЛ рд╕рдореАрдХреНрд╖рд╛ рд▓реЗрдЦ, рдЬреБрди рдХрд╛рдордХреЛ рдкрд░рд┐рдгрд╛рдордХреЛ рд░реВрдкрдорд╛ рджреЗрдЦрд╛ рдкрд░реНрджрдЫ, рдЕрд░реВрд▓рд╛рдИ рдЙрдкрдпреЛрдЧреА рд╣реБрдиреЗрдЫред

Debezium рд░ CDC рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХреЗ рд╣реЛ?

рдбреЗрдмреЗрдЬрд┐рдпрдо - CDC рд╕рдлреНрдЯрд╡реЗрдпрд░ рдХреЛрдЯрд┐ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рдбрд╛рдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреНрдпрд╛рдкреНрдЪрд░ рдЧрд░реНрдиреБрд╣реЛрд╕реН), рд╡рд╛ рдЕрдЭ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛, рдпреЛ Apache Kafka Connect рдлреНрд░реЗрдорд╡рд░реНрдХрд╕рдБрдЧ рдорд┐рд▓реНрджреЛ рд╡рд┐рднрд┐рдиреНрди DBMSs рдХреЛ рд▓рд╛рдЧрд┐ рдЬрдбрд╛рдирдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд╕реЗрдЯ рд╣реЛред

рдпреЛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛, Apache License v2.0 рдЕрдиреНрддрд░реНрдЧрдд рдЗрдЬрд╛рдЬрддрдкрддреНрд░ рдкреНрд░рд╛рдкреНрдд рд░ Red Hat рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдпреЛрдЬрд┐рддред рд╡рд┐рдХрд╛рд╕ 2016 рджреЗрдЦрд┐ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ рд░ рд╣рд╛рд▓ рдпрд╕рд▓реЗ рдирд┐рдореНрди DBMSs рдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ: MySQL, PostgreSQL, MongoDB, SQL Serverред рддреНрдпрд╣рд╛рдБ рдХреНрдпрд╛рд╕рд╛рдиреНрдбреНрд░рд╛ рд░ рдУрд░реЗрдХрд▓рдХрд╛ рд▓рд╛рдЧрд┐ рдХрдиреЗрдХреНрдЯрд░рд╣рд░реВ рдкрдирд┐ рдЫрдиреН, рддрд░ рдпрд╕ рд╕рдордпрдорд╛ рддрд┐рдиреАрд╣рд░реВ "рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкрд╣реБрдБрдЪ" рд╕реНрдерд┐рддрд┐рдорд╛ рдЫрдиреН, рд░ рдирдпрд╛рдБ рд░рд┐рд▓реАрдЬрд╣рд░реВрд▓реЗ рдкрдЫрд╛рдбрд┐ рдЕрдиреБрдХреВрд▓рддрд╛рдХреЛ рдЧреНрдпрд╛рд░реЗрдиреНрдЯреА рдЧрд░реНрджреИрдиред

рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ CDC рд▓рд╛рдИ рдкрд░рдореНрдкрд░рд╛рдЧрдд рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдЫреМрдВ (рдЬрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ DBMS рдмрд╛рдЯ рд╕реАрдзреИ рдбреЗрдЯрд╛ рдкрдвреНрдЫ), рдпрд╕рдХреЛ рдореБрдЦреНрдп рдлрд╛рдЗрджрд╛рд╣рд░реВрдорд╛ рдХрдо рд╡рд┐рд▓рдореНрдмрддрд╛, рдЙрдЪреНрдЪ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд░ рдЙрдкрд▓рдмреНрдзрддрд╛рдХреЛ рд╕рд╛рде рдкрдЩреНрдХреНрддрд┐ рд╕реНрддрд░рдорд╛ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрдЯреНрд░рд┐рдорд┐рдЩрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╛рд╡реЗрд╢ рдЫред рдЕрдиреНрддрд┐рдо рджреБрдИ рдЕрдВрдХрд╣рд░реВ CDC рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рднрдгреНрдбрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдиреНрдЫред

рдЕрд░реНрдХреЛ рдлрд╛рдЗрджрд╛ рдпреЛ рддрдереНрдп рд╣реЛ рдХрд┐ рдШрдЯрдирд╛рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдПрдХрд▓ рдореЛрдбреЗрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рдЕрдиреНрддрд┐рдо рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рд╡рд┐рднрд┐рдиреНрди DBMS рд╣рд░реВ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрдиреЗ рд╕реВрдХреНрд╖реНрдорддрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЪрд┐рдиреНрддрд╛ рд▓рд┐рдиреБ рдкрд░реНрджреИрдиред

рдЕрдиреНрддрдорд╛, рд╕рдиреНрджреЗрд╢ рдмреНрд░реЛрдХрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбреЗрдЯрд╛рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрдиреЗ рд╕реНрдХреЗрд▓-рдЖрдЙрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрдХреЛрдк рдЦреЛрд▓реНрдЫред рдПрдХреИ рд╕рдордпрдорд╛, рдбрд╛рдЯрд╛ рд╕реНрд░реЛрддрдорд╛ рдкреНрд░рднрд╛рд╡ рдХрдо рдЧрд░рд┐рдПрдХреЛ рдЫ, рдХрд┐рдирдХрд┐ рдбрд╛рдЯрд╛ рд╕реАрдзрд╛ DBMS рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рддрд░ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рдмрд╛рдЯред

Debezium рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдмрд╛рд░реЗ рдорд╛

Debezium рдХреЛ рдкреНрд░рдпреЛрдЧ рдпреЛ рд╕рд░рд▓ рдпреЛрдЬрдирд╛ рдорд╛ рддрд▓ рдЖрдЙрдБрдЫ:

DBMS (рдбреЗрдЯрд╛ рд╕реНрд░реЛрддрдХреЛ рд░реВрдкрдорд╛) тЖТ рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рдирдорд╛ рдХрдиреЗрдХреНрдЯрд░ тЖТ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ тЖТ рдЙрдкрднреЛрдХреНрддрд╛

рджреГрд╖реНрдЯрд╛рдиреНрддрдХреЛ рд░реВрдкрдорд╛, рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрдмрд╛рдЯ рдПрдЙрдЯрд╛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рджрд┐рдиреЗрдЫреБ:

Apache Kafka рдХреЛ рд▓рд╛рдЧрд┐ Debezium - CDC рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджреИ

рдЬреЗ рд╣реЛрд╕реН, рдорд▓рд╛рдИ рдпреЛ рдпреЛрдЬрдирд╛ рд╕рд╛рдБрдЪреНрдЪреИ рдорди рдкрд░реНрджреИрди, рдХрд┐рдирдХрд┐ рдпреЛ рд╕рд┐рдЩреНрдХ рдХрдиреЗрдХреНрдЯрд░рдХреЛ рдорд╛рддреНрд░ рдкреНрд░рдпреЛрдЧ рд╕рдореНрднрд╡ рдЫ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫред

рд╡рд╛рд╕реНрддрд╡рдорд╛, рд╕реНрдерд┐рддрд┐ рдлрд░рдХ рдЫ: рддрдкрд╛рдИрдВрдХреЛ рдбрд╛рдЯрд╛ рд▓реЗрдХ рднрд░реНрджреИ (рдорд╛рдерд┐рдХреЛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рдорд╛ рдЕрдиреНрддрд┐рдо рд▓рд┐рдЩреНрдХ) Debezium рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдПрдХ рдорд╛рддреНрд░ рддрд░рд┐рдХрд╛ рд╣реЛрдЗрдиред Apache Kafka рд▓рд╛рдИ рдкрдард╛рдЗрдПрдХрд╛ рдШрдЯрдирд╛рд╣рд░реВ рддрдкрд╛рдЗрдБрдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐:

  • рдХреНрдпрд╛рд╕рдмрд╛рдЯ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбрд╛рдЯрд╛ рд╣рдЯрд╛рдЙрдиреЗ;
  • рд╕реВрдЪрдирд╛рд╣рд░реВ рдкрдард╛рдЙрдБрджреИ;
  • рдЦреЛрдЬ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЕрдкрдбреЗрдЯрд╣рд░реВ;
  • рдХреЗрд╣рд┐ рдкреНрд░рдХрд╛рд░рдХреЛ рдЕрдбрд┐рдЯ рд▓рдЧрд╣рд░реВ;
  • ...

рдпрджрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ рдЬрд╛рднрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдЫ рд░ рддреНрдпрд╣рд╛рдБ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдХреБрдиреИ рдЖрд╡рд╢реНрдпрдХрддрд╛/рд╕рдореНрднрд╛рд╡рдирд╛ рдЫреИрди рднрдиреЗ, рддреНрдпрд╣рд╛рдБ рдорд╛рд░реНрдлрдд рдХрд╛рдо рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдкрдирд┐ рдЫред рдПрдореНрдмреЗрдбреЗрдб рдХрдиреЗрдХреНрдЯрд░ред рд╕реНрдкрд╖реНрдЯ рдкреНрд▓рд╕ рдпреЛ рдЫ рдХрд┐ рддрдкрд╛рдИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреВрд░реНрд╡рд╛рдзрд╛рд░ (рдПрдХ рдХрдиреЗрдХреНрдЯрд░ рд░ рдХрд╛рдлреНрдХрд╛ рдХреЛ рд░реВрдк рдорд╛) рд▓рд╛рдИ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЬреЗ рд╣реЛрд╕реН, рдпреЛ рд╕рдорд╛рдзрд╛рди рд╕рдВрд╕реНрдХрд░рдг рез.рез рджреЗрдЦрд┐ рдмрд╣рд┐рд╖реНрдХреГрдд рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдЕрдм рдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди (рдпрд╕рд▓рд╛рдИ рднрд╡рд┐рд╖реНрдпрдХрд╛ рд░рд┐рд▓реАрдЬрд╣рд░реВрдорд╛ рд╣рдЯрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ)ред

рдпрд╕ рд▓реЗрдЦрд▓реЗ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░рд┐рдПрдХреЛ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫ, рдЬрд╕рд▓реЗ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд░ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред

рдХрдиреЗрдХреНрдЯрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди

рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдорд╛рди - рдбрд╛рдЯрд╛ - рдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрди рд╣рд╛рдореАрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫ:

  1. рдбрд╛рдЯрд╛ рд╕реНрд░реЛрдд, рдЬреБрди рд╕рдВрд╕реНрдХрд░рдг 5.7, PostgreSQL 9.6+, MongoDB 3.2+ рдмрд╛рдЯ MySQL рд╣реБрди рд╕рдХреНрдЫ (рдкреВрд░реНрдг рд╕реВрдЪреА);
  2. рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░
  3. рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди рдЙрджрд╛рд╣рд░рдг (рд╕рдВрд╕реНрдХрд░рдг 1.x, 2.x);
  4. рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ Debezium рдХрдиреЗрдХреНрдЯрд░ред

рдкрд╣рд┐рд▓реЛ рджреБрдИ рдмрд┐рдиреНрджреБрд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЕрд░реНрдерд╛рддреНред DBMS рд░ Apache Kafka рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓реЗрдЦрдХреЛ рджрд╛рдпрд░рд╛рднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ рдЫред рдЬреЗ рд╣реЛрд╕реН, рдЬреЛ рд╕реНрдпрд╛рдиреНрдбрдмрдХреНрд╕рдорд╛ рд╕рдмреИ рдХреБрд░рд╛ рдбрд┐рдкреНрд▓реЛрдп рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫрдиреН, рддреНрдпрд╣рд╛рдБ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рднрдгреНрдбрд╛рд░рдорд╛ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рд╕рд╣рд┐рдд рддрдпрд╛рд░-рдмрдирд╛рдЗрдПрдХреЛ рдЫред docker-compose.yaml.

рд╣рд╛рдореА рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рдЕрдиреНрддрд┐рдо рджреБрдИ рдмрд┐рдиреНрджреБрд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрдиреЗрдЫреМрдВред

0. рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди

рдпрд╣рд╛рдБ рд░ рдкрдЫрд┐ рд▓реЗрдЦрдорд╛, рд╕рдмреИ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдбреЗрдмреЗрдЬрд┐рдпрдо рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рддрд░рд┐рдд рдбрдХрд░ рдЫрд╡рд┐рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рд╡рд┐рдЪрд╛рд░ рдЧрд░рд┐рдиреНрдЫред рдпрд╕рд▓реЗ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдкреНрд▓рдЧрдЗрди рдлрд╛рдЗрд▓рд╣рд░реВ (рдХрдиреЗрдХреНрдЯрд░рд╣рд░реВ) рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдХрдиреНрдлреНрд▓реБрдПрдиреНрдЯрдмрд╛рдЯ рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рд╛рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдорд╛ рдЖрд╡рд╢реНрдпрдХ рдХрдиреЗрдХреНрдЯрд░рд╣рд░реВрдХреЛ рдкреНрд▓рдЧрдЗрдирд╣рд░реВ рдердкреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред plugin.path рд╡рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдорд╛рд░реНрдлрдд рд╕реЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН CLASSPATHред рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд░ рдХрдиреЗрдХреНрдЯрд░рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ рдорд╛рд░реНрдлрдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдиреНрдЫ рдЬреБрди рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реНрдЯрд╛рд░реНрдЯ рдЖрджреЗрд╢рдорд╛ рддрд░реНрдХрдХреЛ рд░реВрдкрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫред рд╡рд┐рд╡рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН рдХрд╛рдЧрдЬрд╛рдд.

рдХрдиреЗрдХреНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдгрдорд╛ Debeizum рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ рд╕рдореНрдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреБрдИ рдЪрд░рдгрд╣рд░реВрдорд╛ рдЧрд░рд┐рдиреНрдЫред рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реМрдВ:

1. рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

Apache Kafka рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдо рдЧрд░реНрди, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди рдлреНрд░реЗрдорд╡рд░реНрдХрдорд╛ рд╕реЗрдЯ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН, рдЬрд╕реНрддреИ:

  • рдХреНрд▓рд╕реНрдЯрд░ рдЬрдбрд╛рди рд╕реЗрдЯрд┐рдЩрд╣рд░реВ,
  • рд╡рд┐рд╖рдпрд╣рд░реВрдХреЛ рдирд╛рдо рдЬрд╕рдорд╛ рдЬрдбрд╛рдирдХрд░реНрддрд╛рдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕реАрдзреИ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдиреЗрдЫ,
  • рд╕рдореВрд╣рдХреЛ рдирд╛рдо рдЬрд╕рдорд╛ рдХрдиреЗрдХреНрдЯрд░ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ (рдпрджрд┐ рд╡рд┐рддрд░рд┐рдд рдореЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдЫ)ред

рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбрдХрд░ рдЫрд╡рд┐рд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ - рдпреЛ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рддреНрдпрд╕реИрд▓реЗ рдЫрд╡рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реМрдВ:

docker pull debezium/connect

рдХрдиреЗрдХреНрдЯрд░ рдЪрд▓рд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░рд╣рд░реВрдХреЛ рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдЫ:

  • BOOTSTRAP_SERVERS=kafka-1:9092,kafka-2:9092,kafka-3:9092 - рдХреНрд▓рд╕реНрдЯрд░ рд╕рджрд╕реНрдпрд╣рд░реВрдХреЛ рдкреВрд░реНрдг рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕реВрдЪреА;
  • OFFSET_STORAGE_TOPIC=connector-offsets - рд╕реНрдерд╛рдирд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдиреЗ рд╡рд┐рд╖рдп рдЬрд╣рд╛рдБ рдХрдиреЗрдХреНрдЯрд░ рд╣рд╛рд▓ рдЕрд╡рд╕реНрдерд┐рдд рдЫ;
  • CONNECT_STATUS_STORAGE_TOPIC=connector-status - рдХрдиреЗрдХреНрдЯрд░ рд░ рдпрд╕рдХреЛ рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕реНрдерд┐рддрд┐ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╖рдп;
  • CONFIG_STORAGE_TOPIC=connector-config - рдХрдиреЗрдХреНрдЯрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдбрд╛рдЯрд╛ рд░ рдпрд╕рдХреЛ рдХрд╛рд░реНрдпрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╖рдп;
  • GROUP_ID=1 - рдХрд╛рдорджрд╛рд░рд╣рд░реВрдХреЛ рд╕рдореВрд╣рдХреЛ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рдЬрд╕рдорд╛ рдХрдиреЗрдХреНрдЯрд░ рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ; рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛ рдЖрд╡рд╢реНрдпрдХ рдЫ (рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ) рд╢рд╛рд╕рдиред

рд╣рд╛рдореА рдпреА рдЪрд░рд╣рд░реВрд╕рдБрдЧ рдХрдиреНрдЯреЗрдирд░ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВ:

docker run 
  -e BOOTSTRAP_SERVERS='kafka-1:9092,kafka-2:9092,kafka-3:9092' 
  -e GROUP_ID=1 
  -e CONFIG_STORAGE_TOPIC=my_connect_configs 
  -e OFFSET_STORAGE_TOPIC=my_connect_offsets 
  -e STATUS_STORAGE_TOPIC=my_connect_statuses  debezium/connect:1.2

Avro рдХреЛ рдмрд╛рд░реЗрдорд╛ рдиреЛрдЯ

рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, Debezium рд▓реЗ JSON рдврд╛рдБрдЪрд╛рдорд╛ рдбрд╛рдЯрд╛ рд▓реЗрдЦреНрдЫ, рдЬреБрди рд╕реНрдпрд╛рдиреНрдбрдмрдХреНрд╕ рд░ рдереЛрд░реИ рдорд╛рддреНрд░рд╛рдорд╛ рдбрд╛рдЯрд╛рдХрд╛ рд▓рд╛рдЧрд┐ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЫ, рддрд░ рдзреЗрд░реИ рд▓реЛрдб рдЧрд░рд┐рдПрдХрд╛ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рд╕рдорд╕реНрдпрд╛ рд╣реБрди рд╕рдХреНрдЫред JSON рдХрдиреНрднрд░реНрдЯрд░рдХреЛ рд╡рд┐рдХрд▓реНрдк рднрдиреЗрдХреЛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрдиреБ рд╣реЛ Avro рдмрд╛рдЗрдирд░реА рдврд╛рдБрдЪрд╛рдорд╛, рдЬрд╕рд▓реЗ Apache Kafka рдорд╛ I/O рд╕рдмрд╕рд┐рд╕реНрдЯрдордорд╛ рд▓реЛрдб рдШрдЯрд╛рдЙрдБрдЫред

Avro рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЫреБрдЯреНрдЯреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ schema-Registry (рд╕реНрдХреАрдорд╛рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐)ред рдХрдиреНрднрд░реНрдЯрд░рдХрд╛ рд▓рд╛рдЧрд┐ рдЪрд░рд╣рд░реВ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреЗрдЫрдиреН:

name: CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL
value: http://kafka-registry-01:8081/
name: CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL
value: http://kafka-registry-01:8081/
name: VALUE_CONVERTER   
value: io.confluent.connect.avro.AvroConverter

Avro рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд░ рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдпрд╕ рд▓реЗрдЦрдХреЛ рджрд╛рдпрд░рд╛рднрдиреНрджрд╛ рдмрд╛рд╣рд┐рд░ рдЫрдиреН - рдердк рд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА JSON рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред

2. рдХрдиреЗрдХреНрдЯрд░ рдЖрдлреИ рд╕реЗрдЯрдЕрдк рдЧрд░реНрджреИ

рдЕрдм рддрдкрд╛рдИрдВ рд╕рд┐рдзреИ рдЬрдбрд╛рдирдХрд░реНрддрд╛рдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдЬрд╛рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рд▓реЗ рд╕реНрд░реЛрддрдмрд╛рдЯ рдбреЗрдЯрд╛ рдкрдвреНрдиреЗрдЫред

рджреБрдИ DBMS рдХрд╛ рд▓рд╛рдЧрд┐ рдХрдиреЗрдХреНрдЯрд░рд╣рд░реВрдХреЛ рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВ: PostgreSQL рд░ MongoDB, рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдорд╕рдБрдЧ рдЕрдиреБрднрд╡ рдЫ рд░ рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рддреНрдпрд╣рд╛рдБ рднрд┐рдиреНрдирддрд╛рд╣рд░реВ рдЫрдиреН (рд╕рд╛рдиреЛ рднрдП рдкрдирд┐, рддрд░ рдХреЗрд╣реА рдЕрд╡рд╕реНрдерд╛рдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг!)ред

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди JSON рдиреЛрдЯреЗрд╢рдирдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ POST рдЕрдиреБрд░реЛрдз рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рдирдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдЫред

реи.резред PostgreSQL

PostgreSQL рдХреЛ рд▓рд╛рдЧрд┐ рдЙрджрд╛рд╣рд░рдг рдХрдиреЗрдХреНрдЯрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди:

{
  "name": "pg-connector",
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "plugin.name": "pgoutput",
    "database.hostname": "127.0.0.1",
    "database.port": "5432",
    "database.user": "debezium",
    "database.password": "definitelynotpassword",
    "database.dbname" : "dbname",
    "database.server.name": "pg-dev",
    "table.include.list": "public.(.*)",
    "heartbeat.interval.ms": "5000",
    "slot.name": "dbname_debezium",
    "publication.name": "dbname_publication",
    "transforms": "AddPrefix",
    "transforms.AddPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
    "transforms.AddPrefix.regex": "pg-dev.public.(.*)",
    "transforms.AddPrefix.replacement": "data.cdc.dbname"
  }
}

рдпреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрдЫрд┐ рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рди рдХреЛ рд╕рд┐рджреНрдзрд╛рдиреНрдд рдПрдХрджрдо рд╕рд░рд▓ рдЫ:

  • рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рд▓рдиреНрдЪ рдЧрд░реНрджрд╛, рдпреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдЬрдбрд╛рди рд╣реБрдиреНрдЫ рд░ рдореЛрдбрдорд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫред рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕реНрдиреНрдпрд╛рдкрд╕рдЯ, рдХрд╛рдлреНрдХрд╛рд▓рд╛рдИ рд╕рд╢рд░реНрдд рдкреНрд░рд╛рдкреНрдд рдбрд╛рдЯрд╛рдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕реЗрдЯ рдкрдард╛рдЙрдБрджреИ SELECT * FROM table_name.
  • рдкреНрд░рд╛рд░рдореНрднрд┐рдХрддрд╛ рдкреВрд░рд╛ рднрдПрдкрдЫрд┐, рдХрдиреЗрдХреНрдЯрд░рд▓реЗ PostgreSQL WAL рдлрд╛рдЗрд▓рд╣рд░реВрдмрд╛рдЯ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкрдвреНрдиреЗ рдореЛрдбрдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрдЫред

рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛:

  • name - рдХрдиреЗрдХреНрдЯрд░рдХреЛ рдирд╛рдо рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рддрд▓ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рдЫ; рднрд╡рд┐рд╖реНрдпрдорд╛, рдпреЛ рдирд╛рдо рдЬрдбрд╛рдирдХрд░реНрддрд╛рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ (рдЕрд░реНрдерд╛рддреН рд╕реНрдерд┐рддрд┐ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН / рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН / рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЕрдкрдбреЗрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН) рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди REST API рдорд╛рд░реНрдлрдд;
  • connector.class тАФ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдХрдиреЗрдХреНрдЯрд░рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ DBMS рдХрдиреЗрдХреНрдЯрд░ рд╡рд░реНрдЧ;
  • plugin.name WAL рдлрд╛рдЗрд▓рд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рдбрд┐рдХреЛрдбрд┐рдЩрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд▓рдЧрдЗрдирдХреЛ рдирд╛рдо рд╣реЛред рдЫрдиреМрдЯ рдЧрд░реНрди рдЙрдкрд▓рдмреНрдз рдЫ wal2json, decoderbuffs ╨╕ pgoutputред рдкрд╣рд┐рд▓реЛ рджреБрдИ DBMS рдорд╛ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рд╕реНрдерд╛рдкрдирд╛ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫ, рд░ pgoutput PostgreSQL рд╕рдВрд╕реНрдХрд░рдг 10 рд░ рдЙрдЪреНрдЪ рдХреЛ рд▓рд╛рдЧреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрд░рдлреЗрд░ рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЫреИрди;
  • database.* тАФ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрди рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ, рдЬрд╣рд╛рдБ database.server.name - рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд╡рд┐рд╖рдпрдХреЛ рдирд╛рдо рдмрдирд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ PostgreSQL рдЙрджрд╛рд╣рд░рдгрдХреЛ рдирд╛рдо;
  • table.include.list - рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдЬрд╕рдорд╛ рд╣рд╛рдореА рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ; рдврд╛рдБрдЪрд╛рдорд╛ рджрд┐рдЗрдПрдХреЛ рдЫ schema.table_name; рд╕рдБрдЧреИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдБрджреИрди table.exclude.list;
  • heartbeat.interval.ms - рдЕрдиреНрддрд░рд╛рд▓ (рдорд┐рд▓рд┐рд╕реЗрдХреЗрдиреНрдбрдорд╛) рдЬрд╕рдХреЛ рд╕рд╛рде рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рд╖рдпрдорд╛ рд╣реГрджрдпрдШрд╛рдд рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдкрдард╛рдЙрдБрдЫ;
  • heartbeat.action.query - рдПрдХ рдЕрдиреБрд░реЛрдз рдЬреБрди рдкреНрд░рддреНрдпреЗрдХ рд╣реГрджрдпрдШрд╛рдд рд╕рдиреНрджреЗрд╢ рдкрдард╛рдЙрдБрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреЗрдЫ (рд╡рд┐рдХрд▓реНрдк рд╕рдВрд╕реНрдХрд░рдг рез.рез рджреЗрдЦрд┐ рджреЗрдЦрд╛ рдкрд░реЗрдХреЛ рдЫ);
  • slot.name - рдЬрдбрд╛рдирдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреЗ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓рдЯрдХреЛ рдирд╛рдо;
  • publication.name - рдирд╛рдо рдкреНрд░рдХрд╛рд╢рдирд╣рд░реВ PostgreSQL рдорд╛, рдЬреБрди рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдпрджрд┐ рдпреЛ рдЕрд╡рд╕реНрдерд┐рдд рдЫреИрди рднрдиреЗ, Debezium рдпрд╕рд▓рд╛рдИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫред рдпрджрд┐ рдЬрдбрд╛рди рдЧрд░рд┐рдПрдХреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╕рдБрдЧ рдпрд╕ рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рдЫреИрди рднрдиреЗ, рдХрдиреЗрдХреНрдЯрд░ рддреНрд░реБрдЯрд┐рдХреЛ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫ;
  • transforms рд▓рдХреНрд╖рд┐рдд рд╡рд┐рд╖рдпрдХреЛ рдирд╛рдо рдХрд╕рд░реА рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрджрдЫ:
    • transforms.AddPrefix.type рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫ рдХрд┐ рд╣рд╛рдореА рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ;
    • transforms.AddPrefix.regex - рдорд╛рд╕реНрдХ рдЬрд╕рджреНрд╡рд╛рд░рд╛ рд▓рдХреНрд╖рд┐рдд рд╡рд┐рд╖рдпрдХреЛ рдирд╛рдо рдкреБрди: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ;
    • transforms.AddPrefix.replacement - рд╕реАрдзрд╛ рд╣рд╛рдореАрд▓реЗ рдХреЗ рдкреБрди: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдЫреМрдВред

рд╣реГрджрдпрдШрд╛рдд рд░ рд░реВрдкрд╛рдиреНрддрд░рдг рдмрд╛рд░реЗ рдердк

рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдмрджреНрдз рд▓реЗрдирджреЗрдирдХреЛ рд▓рд╛рдЧрд┐ рдХрд╛рдлреНрдХрд╛рд▓рд╛рдИ рдбреЗрдЯрд╛ рдкрдард╛рдЙрдБрдЫ, рд░ рд╕реЗрд╡рд╛рдХреЛ рд╡рд┐рд╖рдпрдорд╛ рдЖрдлреНрдиреЛ LSN (рд▓рдЧ рдЕрдиреБрдХреНрд░рдо рдирдореНрдмрд░) рд▓реЗрдЦреНрдЫред offsetред рддрд░ рдХреЗ рд╣реБрдиреНрдЫ рдпрджрд┐ рдХрдиреЗрдХреНрдЯрд░ рд╕рдореНрдкреВрд░реНрдг рдбрд╛рдЯрд╛рдмреЗрд╕ рдкрдвреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рддрд░ рдпрд╕рдХреЛ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рдорд╛рддреНрд░ рднрд╛рдЧ (рдЬрд╕рдорд╛ рдбрд╛рдЯрд╛ рдЕрдкрдбреЗрдЯрд╣рд░реВ рдкреНрд░рд╛рдпрдГ рд╣реБрдБрджреИрди)?

  • рдХрдиреЗрдХреНрдЯрд░рд▓реЗ WAL рдлрд╛рдЗрд▓рд╣рд░реВ рдкрдвреНрдиреЗрдЫ рд░ рдпрд╕рд▓реЗ рдЕрдиреБрдЧрдорди рдЧрд░рд┐рд░рд╣реЗрдХреЛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдорд╛ рдХреБрдиреИ рдкрдирд┐ рд▓реЗрдирджреЗрди рдХрдорд┐рдЯ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреЗ рдЫреИрдиред
  • рддрд╕рд░реНрде, рдпрд╕рд▓реЗ рд╡рд┐рд╖рдп рд╡рд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓рдЯрдорд╛ рдЖрдлреНрдиреЛ рд╣рд╛рд▓рдХреЛ рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджреИрдиред
  • рдпрд╕рд▓реЗ, рдмрд╛рд░реАрдорд╛, WAL рдлрд╛рдЗрд▓рд╣рд░реВ рдбрд┐рд╕реНрдХрдорд╛ "рдЕрдбреНрдХрд┐рдиреЗ" рд╣реБрди рд╕рдХреНрдЫ рд░ рд╕рдореНрднрд╡рддрдГ рдбрд┐рд╕реНрдХ рд╕реНрдкреЗрд╕ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗрдЫред

рд░ рдпрд╣рд╛рдБ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЙрджреНрдзрд╛рд░рдорд╛ рдЖрдЙрдБрдЫрдиреНред heartbeat.interval.ms ╨╕ heartbeat.action.queryред рдЬреЛрдбреАрдорд╛ рдпреА рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрдЯрдХ рдореБрдЯреБрдХреЛ рдзрдбреНрдХрди рд╕рдиреНрджреЗрд╢ рдкрдард╛рдЙрдБрджрд╛ рдЫреБрдЯреНрдЯреИ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдбрд╛рдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЕрдиреБрд░реЛрдз рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕рдореНрднрд╡ рдмрдирд╛рдЙрдБрдЫред рдпрд╕рд░реА, LSN рдЬрд╕рдорд╛ рдХрдиреЗрдХреНрдЯрд░ рд╣рд╛рд▓ рдЕрд╡рд╕реНрдерд┐рдд рдЫ (рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓рдЯрдорд╛) рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рд╣реБрдиреНрдЫред рдпрд╕рд▓реЗ DBMS рд▓рд╛рдИ WAL рдлрд╛рдЗрд▓рд╣рд░реВ рд╣рдЯрд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рдЬреБрди рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдердк рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН рдХрд╛рдЧрдЬрд╛рдд.

рдЕрд░реНрдХреЛ рд╡рд┐рдХрд▓реНрдк рдЬреБрди рдирдЬрд┐рдХрдХреЛ рдзреНрдпрд╛рдирдХреЛ рдпреЛрдЧреНрдп рдЫ transformsред рдпрджреНрдпрдкрд┐ рдпреЛ рд╕реБрд╡рд┐рдзрд╛ рд░ рд╕реМрдиреНрджрд░реНрдп рдХреЛ рдмрд╛рд░реЗ рдорд╛ рдЕрдзрд┐рдХ рдЫ ...

рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, Debezium рд▓реЗ рдирд┐рдореНрди рдирд╛рдордХрд░рдг рдиреАрддрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реА рд╡рд┐рд╖рдпрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ: serverName.schemaName.tableNameред рдпреЛ рд╕рдзреИрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реБрди рд╕рдХреНрдЫред рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ transforms рд░реЗрдЧреБрд▓рд░ рдПрдХреНрд╕реНрдкреНрд░реЗрд╢рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рддрдкрд╛рдЗрдБ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬрд╕рдХреЛ рдШрдЯрдирд╛рд╣рд░реВрд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖ рдирд╛рдордХреЛ рд╕рд╛рде рд╢реАрд░реНрд╖рдХрдорд╛ рд░реВрдЯ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рд╣рд╛рдореНрд░реЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рдзрдиреНрдпрд╡рд╛рдж transforms рдирд┐рдореНрди рд╣реБрдиреНрдЫ: рдЕрдиреБрдЧрдорди рдЧрд░рд┐рдПрдХреЛ рдбрд╛рдЯрд╛рдмреЗрд╕рдмрд╛рдЯ рд╕рдмреИ CDC рдШрдЯрдирд╛рд╣рд░реВ рдирд╛рдордХреЛ рд╕рд╛рде рд╢реАрд░реНрд╖рдХрдорд╛ рдЬрд╛рдиреЗрдЫрдиреН data.cdc.dbnameред рдЕрдиреНрдпрдерд╛ (рдпреА рд╕реЗрдЯрд┐рдЩрд╣рд░реВ рдмрд┐рдирд╛), Debezium рд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╖рдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫ: pg-dev.public.<table_name>.

рдХрдиреЗрдХреНрдЯрд░ рд╕реАрдорд╛рд╣рд░реВ

PostgreSQL рдХреЛ рд▓рд╛рдЧрд┐ рдХрдиреЗрдХреНрдЯрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╡рд┐рд╡рд░рдг рд╕рдорд╛рдкреНрдд рдЧрд░реНрди, рдпреЛ рдирд┐рдореНрди рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ / рдпрд╕рдХреЛ рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рд╕реАрдорд┐рддрддрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ:

  1. PostgreSQL рдХреЛ рд▓рд╛рдЧрд┐ рдХрдиреЗрдХреНрдЯрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрд╛рд░реНрдХрд┐рдХ рдбрд┐рдХреЛрдбрд┐рдЩ рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред рддреНрдпрд╕реИрд▓реЗ рдЙрдирд▓реЗ рдбрд╛рдЯрд╛рдмреЗрд╕рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрджреИрди (DDL) - рддрджрдиреБрд╕рд╛рд░, рдпреЛ рдбрд╛рдЯрд╛ рд╡рд┐рд╖рдпрд╣рд░реВрдорд╛ рд╣реБрдиреЗрдЫреИрдиред
  2. рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓рдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рднрдПрдХрд╛рд▓реЗ, рдХрдиреЗрдХреНрдЯрд░ рдЬрдбрд╛рди рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫ рдорд╛рддреНрд░ рдорд╛рд╕реНрдЯрд░ DBMS рдЙрджрд╛рд╣рд░рдгрдорд╛ред
  3. рдпрджрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╕ рдЕрдиреНрддрд░реНрдЧрдд рдХрдиреЗрдХреНрдЯрд░ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдЬрдбрд╛рди рд╣реБрдиреНрдЫ, рдкрдвреНрдиреЗ рдорд╛рддреНрд░ рдЕрдзрд┐рдХрд╛рд░ рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдкрд╣рд┐рд▓реЛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдЕрдШрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд░ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд▓рд╛рдЧреВ рдЧрд░реНрджреИ

рддреНрдпрд╕реЛрднрдП рдХрдиреЗрдХреНрдЯрд░рдорд╛ рд╣рд╛рдореНрд░реЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд▓реЛрдб рдЧрд░реМрдВ:

curl -i -X POST -H "Accept:application/json" 
  -H  "Content-Type:application/json"  http://localhost:8083/connectors/ 
  -d @pg-con.json

рд╣рд╛рдореА рдЬрд╛рдБрдЪ рдЧрд░реНрдЫреМрдВ рдХрд┐ рдбрд╛рдЙрдирд▓реЛрдб рд╕рдлрд▓ рднрдпреЛ рд░ рдХрдиреЗрдХреНрдЯрд░ рд╕реБрд░реБ рднрдпреЛ:

$ curl -i http://localhost:8083/connectors/pg-connector/status 
HTTP/1.1 200 OK
Date: Thu, 17 Sep 2020 20:19:40 GMT
Content-Type: application/json
Content-Length: 175
Server: Jetty(9.4.20.v20190813)

{"name":"pg-connector","connector":{"state":"RUNNING","worker_id":"172.24.0.5:8083"},"tasks":[{"id":0,"state":"RUNNING","worker_id":"172.24.0.5:8083"}],"type":"source"}

рдЙрддреНрдХреГрд╖реНрдЯ: рдпреЛ рд╕реЗрдЯ рдЕрдк рд░ рдЬрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рдЫред рдЕрдм рд╣рд╛рдореА рдЙрдкрднреЛрдХреНрддрд╛ рднрдПрдХреЛ рдмрд╣рд╛рдирд╛ рдЧрд░реМрдВ рд░ рдХрд╛рдлреНрдХрд╛рд╕рдБрдЧ рдЬрдбрд╛рди рдЧрд░реМрдВ, рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдердкреНрдЫреМрдВ рд░ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдЫреМрдВ:

$ kafka/bin/kafka-console-consumer.sh 
  --bootstrap-server kafka:9092 
  --from-beginning 
  --property print.key=true 
  --topic data.cdc.dbname

postgres=# insert into customers (id, first_name, last_name, email) values (1005, 'foo', 'bar', '[email protected]');
INSERT 0 1
postgres=# update customers set first_name = 'egg' where id = 1005;
UPDATE 1

рд╣рд╛рдореНрд░реЛ рд╢реАрд░реНрд╖рдХрдорд╛, рдпреЛ рдирд┐рдореНрди рд░реВрдкрдорд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреЗрдЫ:

рд╣рд╛рдореНрд░реЛ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдЧ рдзреЗрд░реИ рд▓рд╛рдореЛ JSON

{
"schema":{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
}
],
"optional":false,
"name":"data.cdc.dbname.Key"
},
"payload":{
"id":1005
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"before"
},
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"after"
},
{
"type":"struct",
"fields":[
{
"type":"string",
"optional":false,
"field":"version"
},
{
"type":"string",
"optional":false,
"field":"connector"
},
{
"type":"string",
"optional":false,
"field":"name"
},
{
"type":"int64",
"optional":false,
"field":"ts_ms"
},
{
"type":"string",
"optional":true,
"name":"io.debezium.data.Enum",
"version":1,
"parameters":{
"allowed":"true,last,false"
},
"default":"false",
"field":"snapshot"
},
{
"type":"string",
"optional":false,
"field":"db"
},
{
"type":"string",
"optional":false,
"field":"schema"
},
{
"type":"string",
"optional":false,
"field":"table"
},
{
"type":"int64",
"optional":true,
"field":"txId"
},
{
"type":"int64",
"optional":true,
"field":"lsn"
},
{
"type":"int64",
"optional":true,
"field":"xmin"
}
],
"optional":false,
"name":"io.debezium.connector.postgresql.Source",
"field":"source"
},
{
"type":"string",
"optional":false,
"field":"op"
},
{
"type":"int64",
"optional":true,
"field":"ts_ms"
},
{
"type":"struct",
"fields":[
{
"type":"string",
"optional":false,
"field":"id"
},
{
"type":"int64",
"optional":false,
"field":"total_order"
},
{
"type":"int64",
"optional":false,
"field":"data_collection_order"
}
],
"optional":true,
"field":"transaction"
}
],
"optional":false,
"name":"data.cdc.dbname.Envelope"
},
"payload":{
"before":null,
"after":{
"id":1005,
"first_name":"foo",
"last_name":"bar",
"email":"[email protected]"
},
"source":{
"version":"1.2.3.Final",
"connector":"postgresql",
"name":"dbserver1",
"ts_ms":1600374991648,
"snapshot":"false",
"db":"postgres",
"schema":"public",
"table":"customers",
"txId":602,
"lsn":34088472,
"xmin":null
},
"op":"c",
"ts_ms":1600374991762,
"transaction":null
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
}
],
"optional":false,
"name":"data.cdc.dbname.Key"
},
"payload":{
"id":1005
}
}{
"schema":{
"type":"struct",
"fields":[
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"before"
},
{
"type":"struct",
"fields":[
{
"type":"int32",
"optional":false,
"field":"id"
},
{
"type":"string",
"optional":false,
"field":"first_name"
},
{
"type":"string",
"optional":false,
"field":"last_name"
},
{
"type":"string",
"optional":false,
"field":"email"
}
],
"optional":true,
"name":"data.cdc.dbname.Value",
"field":"after"
},
{
"type":"struct",
"fields":[
{
"type":"string",
"optional":false,
"field":"version"
},
{
"type":"string",
"optional":false,
"field":"connector"
},
{
"type":"string",
"optional":false,
"field":"name"
},
{
"type":"int64",
"optional":false,
"field":"ts_ms"
},
{
"type":"string",
"optional":true,
"name":"io.debezium.data.Enum",
"version":1,
"parameters":{
"allowed":"true,last,false"
},
"default":"false",
"field":"snapshot"
},
{
"type":"string",
"optional":false,
"field":"db"
},
{
"type":"string",
"optional":false,
"field":"schema"
},
{
"type":"string",
"optional":false,
"field":"table"
},
{
"type":"int64",
"optional":true,
"field":"txId"
},
{
"type":"int64",
"optional":true,
"field":"lsn"
},
{
"type":"int64",
"optional":true,
"field":"xmin"
}
],
"optional":false,
"name":"io.debezium.connector.postgresql.Source",
"field":"source"
},
{
"type":"string",
"optional":false,
"field":"op"
},
{
"type":"int64",
"optional":true,
"field":"ts_ms"
},
{
"type":"struct",
"fields":[
{
"type":"string",
"optional":false,
"field":"id"
},
{
"type":"int64",
"optional":false,
"field":"total_order"
},
{
"type":"int64",
"optional":false,
"field":"data_collection_order"
}
],
"optional":true,
"field":"transaction"
}
],
"optional":false,
"name":"data.cdc.dbname.Envelope"
},
"payload":{
"before":{
"id":1005,
"first_name":"foo",
"last_name":"bar",
"email":"[email protected]"
},
"after":{
"id":1005,
"first_name":"egg",
"last_name":"bar",
"email":"[email protected]"
},
"source":{
"version":"1.2.3.Final",
"connector":"postgresql",
"name":"dbserver1",
"ts_ms":1600375609365,
"snapshot":"false",
"db":"postgres",
"schema":"public",
"table":"customers",
"txId":603,
"lsn":34089688,
"xmin":null
},
"op":"u",
"ts_ms":1600375609778,
"transaction":null
}
}

рджреБрдмреИ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд░реЗрдХрд░реНрдбрд╣рд░реВрдорд╛ рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рд░реЗрдХрд░реНрдбрдХреЛ рдХреБрдЮреНрдЬреА (PK) рд░ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд╕рд╛рд░ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫ: рд░реЗрдХрд░реНрдб рдкрд╣рд┐рд▓реЗ рдХреЗ рдерд┐рдпреЛ рд░ рдкрдЫрд┐ рдХреЗ рднрдпреЛред

  • рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛ INSERT: рдореВрд▓реНрдп рдкрд╣рд┐рд▓реЗ (before) рдмрд░рд╛рдмрд░ null, рд░ рдкрдЫрд┐ - рд╕рдореНрдорд┐рд▓рд┐рдд рдЧрд░рд┐рдПрдХреЛ рд░реЗрдЦрд╛ред
  • рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛ UPDATE: at payload.before рдкрдЩреНрдХреНрддрд┐рдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреНрдЫ, рд░ рдорд╛ payload.after - рдкрд░рд┐рд╡рд░реНрддрдирдХреЛ рд╕рд╛рд░ рд╕рдВрдЧ рдирдпрд╛рдБред

2.2 MongoDB

рдпреЛ рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рдорд╛рдирдХ MongoDB рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕рдВрдпрдиреНрддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, DBMS рдкреНрд░рд╛рдердорд┐рдХ рдиреЛрдбрдХреЛ oplog рдмрд╛рдЯ рдЬрд╛рдирдХрд╛рд░реА рдкрдвреНрдЫред

PgSQL рдХреЛ рд▓рд╛рдЧрд┐ рдкрд╣рд┐рд▓реЗ рдиреИ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдХрдиреЗрдХреНрдЯрд░ рдЬрд╕реНрддреИ, рдпрд╣рд╛рдБ рдкрдирд┐, рдкрд╣рд┐рд▓реЛ рд╕реБрд░реБрдорд╛, рдкреНрд░рд╛рдердорд┐рдХ рдбреЗрдЯрд╛ рд╕реНрдиреНрдпрд╛рдкрд╕рдЯ рд▓рд┐рдЗрдиреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдХрдиреЗрдХреНрдЯрд░ oplog рдкрдвреНрдиреЗ рдореЛрдбрдорд╛ рд╕реНрд╡рд┐рдЪ рд╣реБрдиреНрдЫред

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЙрджрд╛рд╣рд░рдг:

{
"name": "mp-k8s-mongo-connector",
"config": {
"connector.class": "io.debezium.connector.mongodb.MongoDbConnector",
"tasks.max": "1",
"mongodb.hosts": "MainRepSet/mongo:27017",
"mongodb.name": "mongo",
"mongodb.user": "debezium",
"mongodb.password": "dbname",
"database.whitelist": "db_1,db_2",
"transforms": "AddPrefix",
"transforms.AddPrefix.type": "org.apache.kafka.connect.transforms.RegexRouter",
"transforms.AddPrefix.regex": "mongo.([a-zA-Z_0-9]*).([a-zA-Z_0-9]*)",
"transforms.AddPrefix.replacement": "data.cdc.mongo_$1"
}
}

рддрдкрд╛рдИрдВрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреЗ рд░реВрдкрдорд╛, рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрдХреЛ рддреБрд▓рдирд╛рдорд╛ рдХреБрдиреИ рдирдпрд╛рдБ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫреИрдирдиреН, рддрд░ рдбрд╛рдЯрд╛рдмреЗрд╕ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЙрдкрд╕рд░реНрдЧрд╣рд░реВ рдЬрдбрд╛рди рдЧрд░реНрди рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдорд╛рддреНрд░ рдШрдЯрд╛рдЗрдПрдХреЛ рдЫред

рд╕реЗрдЯрд┐рдЩреНрд╣рд░реВ transforms рдпрд╕ рдкрдЯрдХ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдирд┐рдореНрди рдЧрд░реНрдЫрдиреН: рдпреЛрдЬрдирд╛рдмрд╛рдЯ рд▓рдХреНрд╖рд┐рдд рд╡рд┐рд╖рдпрдХреЛ рдирд╛рдо рдмрджрд▓реНрдиреБрд╣реЛрд╕реН <server_name>.<db_name>.<collection_name> ╨▓ data.cdc.mongo_<db_name>.

рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛

рд╣рд╛рдореНрд░реЛ рд╕рдордпрдорд╛ рдЧрд▓реНрддреА рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рд░ рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛рдХреЛ рдореБрджреНрджрд╛ рдкрд╣рд┐рд▓реЗ рднрдиреНрджрд╛ рдмрдвреА рддреАрд╡реНрд░ рдЫ - рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдЬрдм рд╣рд╛рдореА рдбрд╛рдЯрд╛ рд░ рд▓реЗрдирджреЗрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдЫреМрдВ, рд░ рдбрд╛рдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЯреНрд░реНрдпрд╛рдХрд┐рдЩ рдпрд╕ рдорд╛рдорд┐рд▓рд╛рдорд╛ рд╕рд╛рдЗрдбрд▓рд╛рдЗрдирдорд╛ рдЫреИрдиред рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рд░реВрдкрдорд╛ рдХреЗ рдЧрд▓рдд рд╣реБрди рд╕рдХреНрдЫ рд░ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓рд╛ рдорд╛ Debezium рдХреЗ рд╣реБрдиреЗрдЫ рд╣реЗрд░реМрдВред

рддреНрдпрд╣рд╛рдБ рддреАрди рдЕрдкреНрдЯ-рдЖрдЙрдЯ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫрдиреН:

  1. рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди рд╡рд┐рдлрд▓рддрд╛ред рдпрджрд┐ Connect рд▓рд╛рдИ рд╡рд┐рддрд░рд┐рдд рдореЛрдбрдорд╛ рдХрд╛рдо рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗ, рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдПрдЙрдЯреИ group.id рд╕реЗрдЯ рдЧрд░реНрди рдзреЗрд░реИ рдХрд╛рдорджрд╛рд░рд╣рд░реВ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫред рддреНрдпрд╕рдкрдЫрд┐, рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдЕрд╕рдлрд▓ рднрдпреЛ рднрдиреЗ, рдХрдиреЗрдХреНрдЯрд░ рдЕрд░реНрдХреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдорд╛ рдкреБрди: рд╕реБрд░реБ рд╣реБрдиреЗрдЫ рд░ Kafka рдорд╛ рд╢реАрд░реНрд╖рдХрдорд╛ рдЕрдиреНрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рд╕реНрдерд┐рддрд┐рдмрд╛рдЯ рдкрдвреНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдиреЗрдЫред
  2. рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╕рдБрдЧ рдЬрдбрд╛рдирдХреЛ рд╣рд╛рдирд┐ред рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рдХрд╛рдлреНрдХрд╛рд▓рд╛рдИ рдкрдард╛рдЙрди рдЕрд╕рдлрд▓ рднрдПрдХреЛ рд╕реНрдерд┐рддрд┐рдорд╛ рдкрдвреНрди рдмрдиреНрдж рдЧрд░реНрдиреЗрдЫ, рд░ рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓ рдирднрдПрд╕рдореНрдо рдпрд╕рд▓рд╛рдИ рдкреБрди: рдкрдард╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫред
  3. рдбрд╛рдЯрд╛ рд╕реНрд░реЛрдд рдЕрдиреБрдкрд▓рдмреНрдзред рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЕрдиреБрд╕рд╛рд░ рд╕реНрд░реЛрддрдорд╛ рдкреБрди: рдЬрдбрд╛рди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫред рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 16 рдкреНрд░рдпрд╛рд╕рд╣рд░реВ рдЫрдиреН рдШрд╛рддреАрдп рдмреНрдпрд╛рдХрдЕрдлред 16 рдФрдВ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕ рдкрдЫрд┐, рдХрд╛рд░реНрдп рд░реВрдкрдорд╛ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЗрдиреЗрдЫ рдЕрд╕рдлрд▓ рднрдпреЛ рд░ рдпрд╕рд▓рд╛рдИ Kafka Connect REST рдЗрдиреНрдЯрд░рдлреЗрд╕ рдорд╛рд░реНрдлрдд рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред
    • рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛ PostgreSQL рдбрд╛рдЯрд╛ рд╣рд░рд╛рдЙрдиреЗ рдЫреИрди, рдХрд┐рдирднрдиреЗ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓рдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирд╛рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ WAL рдлрд╛рдЗрд▓рд╣рд░реВ рдореЗрдЯрд╛рдЙрдирдмрд╛рдЯ рд░реЛрдХреНрдиреЗрдЫ рдЬреБрди рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рдкрдвреЗрдХрд╛ рдЫреИрдирдиреНред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рддреНрдпрд╣рд╛рдБ рд╕рд┐рдХреНрдХрд╛рдХреЛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдкрдирд┐ рдЫ: рдпрджрд┐ рдХрдиреЗрдХреНрдЯрд░ рд░ DBMS рдмреАрдЪрдХреЛ рдиреЗрдЯрд╡рд░реНрдХ рдЬрдбрд╛рди рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдЕрд╡рд░реБрджреНрдз рднрдпреЛ рднрдиреЗ, рдбрд┐рд╕реНрдХ рд╕реНрдкреЗрд╕ рд╕рдорд╛рдкреНрдд рд╣реБрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдЫ, рд░ рдпрд╕рд▓реЗ рдЕрд╕рдлрд▓рддрд╛ рдирд┐рдореНрддреНрдпрд╛рдЙрди рд╕рдХреНрдЫред рд╕рдореНрдкреВрд░реНрдг DBMSред
    • рдХреЛ рдорд╛рдорд▓рд╛ рдорд╛ MySQL binlog рдлрд╛рдЗрд▓рд╣рд░реВ рдЬрдбрд╛рди рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рд╣реБрдиреБ рдЕрдШрд┐ DBMS рдЖрдлреИрд▓реЗ рдШреБрдорд╛рдЙрди рд╕рдХрд┐рдиреНрдЫред рдпрд╕рд▓реЗ рдХрдиреЗрдХреНрдЯрд░рд▓рд╛рдИ рдЕрд╕рдлрд▓ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд▓реИрдЬрд╛рдиреНрдЫ, рд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рдЮреНрдЪрд╛рд▓рди рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди binlogs рдмрд╛рдЯ рдкрдвреНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрди рдпрд╕рд▓рд╛рдИ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕реНрдиреНрдпрд╛рдкрд╕рдЯ рдореЛрдбрдорд╛ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред
    • рдмрд╛рд░реЗрдорд╛ MongoDBред рдХрд╛рдЧрдЬрд╛рддрд▓реЗ рднрдиреНрдЫ: рд▓рдЧ/рдУрдкреНрд▓рдЧ рдлрд╛рдЗрд▓рд╣рд░реВ рдореЗрдЯрд┐рдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдХрдиреЗрдХреНрдЯрд░рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рд░ рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рдЫреЛрдбреЗрдХреЛ рд╕реНрдерд┐рддрд┐рдмрд╛рдЯ рдкрдвреНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрди рд╕рдХреНрджреИрди рднрдиреЗ рд╕рдмреИ DBMS рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рди рд╣реБрдиреНрдЫред рдпреЛ рддрдереНрдпрдорд╛ рдЫ рдХрд┐ рдХрдиреЗрдХреНрдЯрд░ рд░рд╛рдЬреНрдпрдорд╛ рдЬрд╛рдиреЗрдЫ рдЕрд╕рдлрд▓ рднрдпреЛ рд░ рдореЛрдбрдорд╛ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕реНрдиреНрдпрд╛рдкрд╕рдЯ.

      рдпрджреНрдпрдкрд┐, рддреНрдпрд╣рд╛рдБ рдЕрдкрд╡рд╛рджрд╣рд░реВ рдЫрдиреНред рдпрджрд┐ рдХрдиреЗрдХреНрдЯрд░ рд▓рд╛рдореЛ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рдЪреНрдЫреЗрджрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ (рд╡рд╛ MongoDB рдЙрджрд╛рд╣рд░рдгрдорд╛ рдкреБрдЧреНрди рд╕рдХреЗрди), рд░ oplog рдпрд╕ рд╕рдордпрдорд╛ рд░реЛрдЯреЗрд╢рди рдорд╛рд░реНрдлрдд рдЧрдпреЛ, рддреНрдпрд╕рдкрдЫрд┐ рдЬрдм рдЬрдбрд╛рди рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рд╣реБрдиреНрдЫ, рдХрдиреЗрдХреНрдЯрд░рд▓реЗ рд╢рд╛рдиреНрдд рд░реВрдкрдорд╛ рдкрд╣рд┐рд▓реЛ рдЙрдкрд▓рдмреНрдз рд╕реНрдерд┐рддрд┐рдмрд╛рдЯ рдбреЗрдЯрд╛ рдкрдвреНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдЫ, рдЬрд╕рдХрд╛ рдХрд╛рд░рдг рдХрд╛рдлреНрдХрд╛рдХрд╛ рдХреЗрд╣реА рддрдереНрдпрд╛рдЩреНрдХрд╣рд░реВ рдЫреИрди рдкреНрд░рд╣рд╛рд░ рдЧрд░реНрдиреЗрдЫред

рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛

Debezium CDC рдкреНрд░рдгрд╛рд▓реА рд░ рд╕рдордЧреНрд░ рдзреЗрд░реИ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЧ рдореЗрд░реЛ рдкрд╣рд┐рд▓реЛ рдЕрдиреБрднрд╡ рд╣реЛред рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓реЗ рдкреНрд░рдореБрдЦ DBMSs, рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╕рд╣рдЬрддрд╛, рдХреНрд▓рд╕реНрдЯрд░рд┐рдЩ рд╕рдорд░реНрдерди, рд░ рд╕рдХреНрд░рд┐рдп рд╕рдореБрджрд╛рдпрдХрд╛ рд▓рд╛рдЧрд┐ рдпрд╕рдХреЛ рд╕рдорд░реНрдердирдХреЛ рд╕рд╛рде рдЬрд┐рддреНрдпреЛред рдЕрднреНрдпрд╛рд╕рдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреЗрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐, рдо рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБ рдХрд┐ рддрдкрд╛рдЗрдБ рдЧрд╛рдЗрдбрд╣рд░реВ рдкрдвреНрдиреБрд╣реЛрд╕реН рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рди ╨╕ рдбреЗрдмреЗрдЬрд┐рдпрдо.

рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рдирдХреЛ рд▓рд╛рдЧрд┐ JDBC рдХрдиреЗрдХреНрдЯрд░рдХреЛ рддреБрд▓рдирд╛рдорд╛, Debezium рдХреЛ рдореБрдЦреНрдп рдлрд╛рдЗрджрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ DBMS рд▓рдЧрд╣рд░реВрдмрд╛рдЯ рдкрдврд┐рдиреНрдЫ, рдЬрд╕рд▓реЗ рдбрд╛рдЯрд╛рд▓рд╛рдИ рдиреНрдпреВрдирддрдо рдврд┐рд▓рд╛рдЗрдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред JDBC рдХрдиреЗрдХреНрдЯрд░ (рдХрд╛рдлреНрдХрд╛ рдЬрдбрд╛рдирджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ) рд▓реЗ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рддрд╛рд▓рд┐рдХрд╛рд▓рд╛рдИ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреНрддрд░рд╛рд▓рдорд╛ рд╕реЛрдзреНрдЫ рд░ (рддреНрдпрд╣реА рдХрд╛рд░рдгрд▓реЗ) рдбрд╛рдЯрд╛ рдореЗрдЯрд╛рдЙрдБрджрд╛ рд╕рдиреНрджреЗрд╢рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджреИрди (рддрдкрд╛рдИрд▓реЗ рддреНрдпрд╣рд╛рдБ рдирднрдПрдХреЛ рдбрд╛рдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдХрд╕рд░реА рдХреНрд╡реЗрд░реА рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ?)ред

рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди, рддрдкрд╛рдЗрдБ рдирд┐рдореНрди рд╕рдорд╛рдзрд╛рдирд╣рд░реВрдорд╛ рдзреНрдпрд╛рди рджрд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (Debezium рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд):

PS

рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди