Apache Kafka рд╕рд╛рдареА Debezium - CDC рд╕рд╛рджрд░ рдХрд░рдд рдЖрд╣реЗ

Apache Kafka рд╕рд╛рдареА Debezium - CDC рд╕рд╛рджрд░ рдХрд░рдд рдЖрд╣реЗ

рдорд╛рдЭреНрдпрд╛ рдХрд╛рдорд╛рдд, рдорд▓рд╛ рдЕрдиреЗрдХрджрд╛ рдирд╡реАрди рддрд╛рдВрддреНрд░рд┐рдХ рдЙрдкрд╛рдп/рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЙрддреНрдкрд╛рджрдиреЗ рдЖрдврд│рддрд╛рдд, рдЬреНрдпрд╛рдЪреА рдорд╛рд╣рд┐рддреА рд░рд╢рд┐рдпрди-рднрд╛рд╖реЗрдЪреНрдпрд╛ рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░ рдлрд╛рд░рдЪ рдХрдореА рдЖрд╣реЗ. рдпрд╛ рд▓реЗрдЦрд╛рджреНрд╡рд╛рд░реЗ, рдореА рдорд╛рдЭреНрдпрд╛ рдЕрд▓реАрдХрдбреАрд▓ рд╕рд░рд╛рд╡рд╛рддреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╣ рдЕрд╢реА рдПрдХ рдкреЛрдХрд│реА рднрд░реВрди рдХрд╛рдврдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реЗрди, рдЬреЗрд╡реНрд╣рд╛ рдорд▓рд╛ рджреЛрди рд▓реЛрдХрдкреНрд░рд┐рдп DBMSs (PostgreSQL рдЖрдгрд┐ MongoDB) рдордзреВрди Debezium рд╡рд╛рдкрд░реВрди рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ CDC рдЗрд╡реНрд╣реЗрдВрдЯ рдкрд╛рдард╡рдгреЗ рд╕реЗрдЯ рдХрд░рд╛рдпрдЪреЗ рд╣реЛрддреЗ. рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╣рд╛ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рд▓реЗрдЦ, рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрд╛рдорд╛рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рджрд┐рд╕рд▓рд╛, рдЗрддрд░рд╛рдВрд╕рд╛рдареА рдЙрдкрдпреБрдХреНрдд рдард░реЗрд▓.

рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ рдбреЗрдмреЗрдЭрд┐рдпрдо рдЖрдгрд┐ рд╕реАрдбреАрд╕реА рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?

рдбреЗрдмреЗрдЭрд┐рдпрдо - рд╕реАрдбреАрд╕реА рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рд╢реНрд░реЗрдгреАрдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзреА (рдбреЗрдЯрд╛ рдмрджрд▓ рдХреЕрдкреНрдЪрд░ рдХрд░рд╛), рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ, рд╣рд╛ Apache Kafka Connect рдлреНрд░реЗрдорд╡рд░реНрдХрд╢реА рд╕реБрд╕рдВрдЧрдд рд╡рд┐рд╡рд┐рдз DBMS рд╕рд╛рдареА рдХрдиреЗрдХреНрдЯрд░рдЪрд╛ рд╕рдВрдЪ рдЖрд╣реЗ.

рдпрд╛ рдореБрдХреНрдд рд╕реНрд░реЛрдд рдкреНрд░рдХрд▓реНрдк, Apache License v2.0 рдЕрдВрддрд░реНрдЧрдд рдкрд░рд╡рд╛рдирд╛рдХреГрдд рдЖрдгрд┐ Red Hat рджреНрд╡рд╛рд░реЗ рдкреНрд░рд╛рдпреЛрдЬрд┐рдд. 2016 рдкрд╛рд╕реВрди рд╡рд┐рдХрд╛рд╕ рдЪрд╛рд▓реВ рдЖрд╣реЗ рдЖрдгрд┐ рд╕рдзреНрдпрд╛ рддреЗ рдЦрд╛рд▓реАрд▓ DBMS рд╕рд╛рдареА рдЕрдзрд┐рдХреГрдд рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рддреЗ: MySQL, PostgreSQL, MongoDB, SQL Server. Cassandra рдЖрдгрд┐ Oracle рд╕рд╛рдареА рдХрдиреЗрдХреНрдЯрд░ рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдпрд╛рдХреНрд╖рдгреА рддреЗ "рд▓рд╡рдХрд░ рдкреНрд░рд╡реЗрд╢" рд╕реНрдерд┐рддреАрдд рдЖрд╣реЗрдд рдЖрдгрд┐ рдирд╡реАрди рд░рд┐рд▓реАрдЭ рдорд╛рдЧрд╛рд╕ рдЕрдиреБрдХреВрд▓рддреЗрдЪреА рд╣рдореА рджреЗрдд тАЛтАЛтАЛтАЛрдирд╛рд╣реАрдд.

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

рдЖрдгрдЦреА рдПрдХ рдлрд╛рдпрджрд╛ рд╣рд╛ рдЖрд╣реЗ рдХреА рдПрдХрдЪ рдореЙрдбреЗрд▓ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕ рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ, рддреНрдпрд╛рдореБрд│реЗ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд▓рд╛ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдбреАрдмреАрдПрдордПрд╕ рдСрдкрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдмрд╛рд░рдХрд╛рд╡реЗрдмрджреНрджрд▓ рдХрд╛рд│рдЬреА рдХрд░рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА.

рд╢реЗрд╡рдЯреА, рдореЗрд╕реЗрдЬ рдмреНрд░реЛрдХрд░ рд╡рд╛рдкрд░реВрди рдбреЗрдЯрд╛рдордзреАрд▓ рдмрджрд▓рд╛рдВрдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдирд╛ рдХреНрд╖реИрддрд┐рдЬрд░рд┐рддреНрдпрд╛ рд╕реНрдХреЗрд▓ рдЖрдЙрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдиреБрдорддреА рдорд┐рд│рддреЗ. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдбреЗрдЯрд╛ рд╕реНрддреНрд░реЛрддрд╛рд╡рд░реАрд▓ рдкреНрд░рднрд╛рд╡ рдХрдореА рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдХрд╛рд░рдг рдбреЗрдЯрд╛ рдереЗрдЯ DBMS рдХрдбреВрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рдХрдбреВрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЛ.

рдбреЗрдмреЗрдЭрд┐рдпрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдмрджреНрджрд▓

рдбреЗрдмреЗрдЭрд┐рдпрдо рд╡рд╛рдкрд░рдгреЗ рдпрд╛ рд╕реЛрдкреНрдпрд╛ рдпреЛрдЬрдиреЗрдд рдпреЗрддреЗ:

DBMS (рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдореНрд╣рдгреВрди) тЖТ рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ тЖТ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ тЖТ рдЧреНрд░рд╛рд╣рдХ рдордзреАрд▓ рдХрдиреЗрдХреНрдЯрд░

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди, рдпреЗрдереЗ рдкреНрд░рдХрд▓реНрдк рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рдПрдХ рдЖрдХреГрддреА рдЖрд╣реЗ:

Apache Kafka рд╕рд╛рдареА Debezium - CDC рд╕рд╛рджрд░ рдХрд░рдд рдЖрд╣реЗ

рддрдерд╛рдкрд┐, рдорд▓рд╛ рд╣реА рдпреЛрдЬрдирд╛ рдЦрд░реЛрдЦрд░ рдЖрд╡рдбрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рдЕрд╕реЗ рджрд┐рд╕рддреЗ рдХреА рдХреЗрд╡рд│ рд╕рд┐рдВрдХ рдХрдиреЗрдХреНрдЯрд░рдЪрд╛ рд╡рд╛рдкрд░ рд╢рдХреНрдп рдЖрд╣реЗ.

рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд, рдкрд░рд┐рд╕реНрдерд┐рддреА рд╡реЗрдЧрд│реА рдЖрд╣реЗ: рддреБрдордЪрд╛ рдбреЗрдЯрд╛ рддрд▓рд╛рд╡ рднрд░рдгреЗ (рд╡рд░реАрд▓ рдЪрд┐рддреНрд░рд╛рддреАрд▓ рд╢реЗрд╡рдЯрдЪреА рд▓рд┐рдВрдХ) рдбреЗрдмреЗрдЭрд┐рдпрдо рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рд╣рд╛ рдПрдХрдореЗрд╡ рдорд╛рд░реНрдЧ рдирд╛рд╣реА. Apache Kafka рд▓рд╛ рдкрд╛рдард╡рд▓реЗрд▓реЗ рдЗрд╡реНрд╣реЗрдВрдЯ рддреБрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рджреНрд╡рд╛рд░реЗ рд╡рд┐рд╡рд┐рдз рдкрд░рд┐рд╕реНрдерд┐рддреА рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

  • рдХреЕрд╢реЗрдордзреВрди рдЕрд╕рдВрдмрджреНрдз рдбреЗрдЯрд╛ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреЗ;
  • рд╕реВрдЪрдирд╛ рдкрд╛рдард╡рдгреЗ;
  • рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЕрджреНрдпрддрдиреЗ рд╢реЛрдзрд╛;
  • рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ рдСрдбрд┐рдЯ рд▓реЙрдЧ;
  • ...

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

рд╣рд╛ рд▓реЗрдЦ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдиреА рд╢рд┐рдлрд╛рд░рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдЪреА рдЪрд░реНрдЪрд╛ рдХрд░реЗрд▓, рдЬреЗ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдЖрдгрд┐ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

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

рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрд╡рд╛рдЪреНрдпрд╛ рдореВрд▓реНрдпрд╛рддреАрд▓ рдмрджрд▓рд╛рдВрдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрдгреЗ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА - рдбреЗрдЯрд╛ - рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

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

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

рдЖрдореНрд╣реА рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рджреЛрди рдореБрджреНрджреНрдпрд╛рдВрд╡рд░ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд░рд╛рд╣реВ.

0. рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ

рдпреЗрдереЗ рдЖрдгрд┐ рдирдВрддрд░ рд▓реЗрдЦрд╛рдд, рд╕рд░реНрд╡ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЙрджрд╛рд╣рд░рдгреЗ рдбреЗрдмреЗрдЭрд┐рдпрдо рдбреЗрд╡реНрд╣рд▓рдкрд░реНрд╕рджреНрд╡рд╛рд░реЗ рд╡рд┐рддрд░рд┐рдд рдбреЙрдХрд░ рдкреНрд░рддрд┐рдореЗрдЪреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реА рдЬрд╛рддрд╛рдд. рдпрд╛рдордзреНрдпреЗ рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рдкреНрд▓рдЧрдЗрди рдлрд╛рдЗрд▓реНрд╕ (рдХрдиреЗрдХреНрдЯрд░) рдЖрд╣реЗрдд рдЖрдгрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ.

рдЬрд░ рддреБрдореНтАНрд╣рд╛рд▓рд╛ Confluent рд╡рд░реВрди Kafka Connect рд╡рд╛рдкрд░рдгреНтАНрдпрд╛рдЪрд╛ рдЗрд░рд╛рджрд╛ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНтАНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНтАНрдпрдХ рдХрдиреЗрдХреНтАНрдЯрд░реНрд╕рдЪреЗ рдкреНрд▓рдЧрдЗрди рд╕реНтАНрд╡рдд: рдореНтАНрд╣рдгреВрди рдирд┐рд░реНрджреЗрд╢реАрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЬреЛрдбрд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓. plugin.path рдХрд┐рдВрд╡рд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рджреНрд╡рд╛рд░реЗ рд╕реЗрдЯ рдХрд░рд╛ CLASSPATH. рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рд╡рд░реНрдХрд░ рдЖрдгрд┐ рдХрдиреЗрдХреНрдЯрд░реНрд╕рд╕рд╛рдареА рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕рджреНрд╡рд╛рд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдЬреНрдпрд╛ рд╡рд░реНрдХрд░ рд▓реЙрдиреНрдЪ рдХрдорд╛рдВрдбрд▓рд╛ рд╡рд┐рддрд░реНрдХ рдореНрд╣рдгреВрди рдкрд╛рд╕ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╛рдВрд╕рд╛рдареА, рдкрд╣рд╛ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг.

рдХрдиреЗрдХреНрдЯрд░ рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ рдбреЗрдмреАрдЭрдо рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛрди рдЯрдкреНрдкреНрдпрд╛рдВрдд рдХреЗрд▓реА рдЬрд╛рддреЗ. рдЪрд▓рд╛ рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдХрдбреЗ рдкрд╛рд╣реВрдпрд╛:

1. рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗрдЯ рдХрд░рдгреЗ

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХрдордзреНрдпреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдЬрд╕реЗ рдХреА:

  • рдХреНрд▓рд╕реНрдЯрд░рд▓рд╛ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕,
  • рд╡рд┐рд╖рдпрд╛рдВрдЪреА рдирд╛рд╡реЗ рдЬреНрдпрд╛рдд рдХрдиреЗрдХреНрдЯрд░рдЪреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реНрд╡рддрдГрдЪ рдереЗрдЯ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓,
  • рдЧрдЯрд╛рдЪреЗ рдирд╛рд╡ рдЬреНрдпрд╛рдордзреНрдпреЗ рдХрдиреЗрдХреНрдЯрд░ рдЪрд╛рд▓реВ рдЖрд╣реЗ (рдЬрд░ рд╡рд┐рддрд░рд┐рдд рдореЛрдб рд╡рд╛рдкрд░рд▓рд╛ рдЕрд╕реЗрд▓).

рдкреНрд░рдХрд▓реНрдкрд╛рдЪреА рдЕрдзрд┐рдХреГрдд рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рд╡рд╛рдкрд░реВрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ - рд╣реЗ рдЖрдореНрд╣реА рд╡рд╛рдкрд░рдгрд╛рд░ рдЖрд╣реЛрдд. рддрд░, рдкреНрд░рддрд┐рдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рд╛:

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 рдмрджреНрджрд▓ рдЯреАрдк

рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдбреЗрдмреЗрдЭрд┐рдпрдо JSON рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рдбреЗрдЯрд╛ рд▓рд┐рд╣рд┐рддреЛ, рдЬреЛ рд╕рдБрдбрдмреЙрдХреНрд╕реЗрд╕ рдЖрдгрд┐ рдереЛрдбреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдбреЗрдЯрд╛рд╕рд╛рдареА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЙрдЪреНрдЪ рд▓реЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдК рд╢рдХрддреЗ. JSON рдХрдиреНрд╡реНрд╣рд░реНрдЯрд░рдЪрд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгрдЬреЗ рдореЗрд╕реЗрдЬ рд╡рд╛рдкрд░реВрди рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ AVRO рдмрд╛рдпрдирд░реА рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ, рдЬреЗ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛рдордзреАрд▓ I/O рдЙрдкрдкреНрд░рдгрд╛рд▓реАрд╡рд░реАрд▓ рднрд╛рд░ рдХрдореА рдХрд░рддреЗ.

Avro рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рд╡реЗрдЧрд│реЗ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╕реНрдХреАрдорд╛-рд░рдЬрд┐рд╕реНрдЯреНрд░реА (рдЖрдХреГрддреА рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА). рдХрдиреНрд╡реНрд╣рд░реНрдЯрд░рд╕рд╛рдареА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдпрд╛рд╕рд╛рд░рдЦреЗ рджрд┐рд╕рддреАрд▓:

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 рд╡рд┐рдирдВрддреА рд╡рд╛рдкрд░реВрди Kafka Connect рд╡рд░ рдЕрдкрд▓реЛрдб рдХреЗрд▓реЗ рдЖрд╣реЗ.

реи.рез. 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 тАФ рдбреАрдмреАрдПрдордПрд╕ рдХрдиреЗрдХреНрдЯрд░ рдХреНрд▓рд╛рд╕ рдЬреЛ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХрдиреЗрдХреНрдЯрд░рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдИрд▓;
  • 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 тАФ рдПрдХ рд╡рд┐рдирдВрддреА рдЬреА рдкреНрд░рддреНрдпреЗрдХ рд╣реГрджрдпрд╛рдЪрд╛ рдареЛрдХрд╛ рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рддрд╛рдирд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реА рдЬрд╛рдИрд▓ (рдкрд░реНрдпрд╛рдп рдЖрд╡реГрддреНрддреА 1.1 рдордзреНрдпреЗ рджрд┐рд╕рд▓рд╛);
  • 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
}
}

рджреЛрдиреНрд╣реА рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рд░реЗрдХреЙрд░реНрдбрдордзреНрдпреЗ рдмрджрд▓рд▓реЗрд▓реНрдпрд╛ рд░реЗрдХреЙрд░реНрдбрдЪреА рдХреА (рдкреАрдХреЗ) рдЖрдгрд┐ рдмрджрд▓рд╛рдВрдЪреЗ рд╕рд╛рд░ рдЕрд╕рддреЗ: рд░реЗрдХреЙрд░реНрдб рдЖрдзреА рдХрд╛рдп рд╣реЛрддреЗ рдЖрдгрд┐ рдирдВрддрд░ рдХрд╛рдп рдЭрд╛рд▓реЗ.

  • рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд INSERT: рдЖрдзреА рдореВрд▓реНрдп (before) рдмрд░реЛрдмрд░реА null, рдЖрдгрд┐ рдирдВрддрд░ - рдШрд╛рддрд▓реЗрд▓реА рдУрд│.
  • рдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд UPDATE: рдпреЗрдереЗ payload.before рдУрд│реАрдЪреА рдорд╛рдЧреАрд▓ рд╕реНрдерд┐рддреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ рдЖрдгрд┐ рдордзреНрдпреЗ payload.after тАФ рдмрджрд▓рд╛рдВрдЪреНрдпрд╛ рд╕рд╛рд░рд╛рд╕рд╣ рдирд╡реАрди.

2.2 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>.

рдЪреБрдХреАрдЪреА рд╕рд╣рдирд╢реАрд▓рддрд╛

рдЖрдордЪреНрдпрд╛ рдХрд╛рд│рд╛рддреАрд▓ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдЖрдгрд┐ рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╣реА рд╕рдорд╕реНрдпрд╛ рдиреЗрд╣рдореАрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рддреАрд╡реНрд░ рдЖрд╣реЗ - рд╡рд┐рд╢реЗрд╖рдд: рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдбреЗрдЯрд╛ рдЖрдгрд┐ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдмрджреНрджрд▓ рдмреЛрд▓рддреЛ рдЖрдгрд┐ рдбреЗрдЯрд╛ рдмрджрд▓ рдЯреНрд░реЕрдХрд┐рдВрдЧ рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рдмрд╛рдЬреВрд▓рд╛ рдирд╛рд╣реА. рддрддреНрддреНрд╡рддрдГ рдХрд╛рдп рдЪреВрдХ рд╣реЛрдК рд╢рдХрддреЗ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдмрддреАрдд рдбреЗрдмреЗрдЭрд┐рдпрдордЪреЗ рдХрд╛рдп рд╣реЛрдИрд▓ рддреЗ рдкрд╛рд╣реВрдпрд╛.

рддреАрди рдирд┐рд╡рдб рд░рджреНрдж рдХрд░рдгреНрдпрд╛рдЪреЗ рдкрд░реНрдпрд╛рдп рдЖрд╣реЗрдд:

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

      рддрдерд╛рдкрд┐, рдЕрдкрд╡рд╛рдж рдЖрд╣реЗрдд. рдЬрд░ рдХрдиреЗрдХреНрдЯрд░ рдмрд░рд╛рдЪ рдХрд╛рд│ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдЕрд╡рд╕реНрдереЗрдд рдЕрд╕реЗрд▓ (рдХрд┐рдВрд╡рд╛ рдореЛрдВрдЧреЛрдбреАрдмреА рдЙрджрд╛рд╣рд░рдгрд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрд▓рд╛ рдирд╛рд╣реА), рдЖрдгрд┐ рдпрд╛ рд╡реЗрд│реА oplog рдлрд┐рд░рд╡рд▓рд╛ рдЧреЗрд▓рд╛ рдЕрд╕реЗрд▓, рддрд░ рдХрдиреЗрдХреНрд╢рди рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХреЗрд▓реНрдпрд╛рд╡рд░, рдХрдиреЗрдХреНрдЯрд░ рд╢рд╛рдВрддрдкрдгреЗ рдкрд╣рд┐рд▓реНрдпрд╛ рдЙрдкрд▓рдмреНрдз рд╕реНрдерд┐рддреАрддреВрди рдбреЗрдЯрд╛ рд╡рд╛рдЪрдгреЗ рд╕реБрд░реВ рдареЗрд╡реЗрд▓. , рдореНрд╣рдгреВрдирдЪ рдХрд╛рдлреНрдХрд╛рдордзреАрд▓ рдХрд╛рд╣реА рдбреЗрдЯрд╛ рдирд╛рд╣реА рдорд╛рд░реЗрд▓.

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

рдбреЗрдмреЗрдЭрд┐рдпрдо рд╣рд╛ рд╕реАрдбреАрд╕реА рд╕рд┐рд╕реНрдЯреАрдордЪрд╛ рдорд╛рдЭрд╛ рдкрд╣рд┐рд▓рд╛ рдЕрдиреБрднрд╡ рдЖрд╣реЗ рдЖрдгрд┐ рдПрдХреВрдгрдЪ рдЦреВрдк рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЖрд╣реЗ. рдкреНрд░рдореБрдЦ рдбреАрдмреАрдПрдордПрд╕, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реБрд▓рднрддрд╛, рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд╕рдорд░реНрдерди рдЖрдгрд┐ рд╕рдХреНрд░рд┐рдп рд╕рдореБрджрд╛рдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рдорд░реНрдердирд╛рд╕рд╣ рдкреНрд░рдХрд▓реНрдк рдЬрд┐рдВрдХрд▓рд╛. рд╕рд░рд╛рд╡ рдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реЗрд▓реНрдпрд╛рдВрд╕рд╛рдареА, рдореА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ рдХреА рдЖрдкрдг рдорд╛рд░реНрдЧрджрд░реНрд╢рдХ рд╡рд╛рдЪрд╛ рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ ╨╕ рдбреЗрдмреЗрдЭрд┐рдпрдо.

Kafka Connect рд╕рд╛рдареА JDBC рдХрдиреЗрдХреНрдЯрд░рдЪреНрдпрд╛ рддреБрд▓рдиреЗрдд, Debezium рдЪрд╛ рдореБрдЦреНрдп рдлрд╛рдпрджрд╛ рд╣рд╛ рдЖрд╣реЗ рдХреА DBMS рд▓реЙрдЧрдордзреВрди рдмрджрд▓ рд╡рд╛рдЪрд▓реЗ рдЬрд╛рддрд╛рдд, рдЬреЗ рдХрдореАрддрдХрдореА рд▓реЗрдЯрдиреНрд╕реАрд╕рд╣ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддрд╛рдд. JDBC рдХрдиреЗрдХреНрдЯрд░ (рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рдХрдбреВрди) рдПрдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░рд╛рдиреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЯреЗрдмрд▓рдЪреА рдЪреМрдХрд╢реА рдХрд░рддреЛ рдЖрдгрд┐ (рддреНрдпрд╛рдЪ рдХрд╛рд░рдгрд╛рд╕рд╛рдареА) рдЬреЗрд╡реНрд╣рд╛ рдбреЗрдЯрд╛ рд╣рдЯрд╡рд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рд╕рдВрджреЗрд╢ рддрдпрд╛рд░ рдХрд░рдд рдирд╛рд╣реА (рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рдЪреА рддреБрдореНрд╣реА рдЪреМрдХрд╢реА рдХрд╢реА рдХрд░реВ рд╢рдХрддрд╛?).

рддрддреНрд╕рдо рд╕рдорд╕реНрдпрд╛рдВрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдЦрд╛рд▓реАрд▓ рдЙрдкрд╛рдпрд╛рдВрдХрдбреЗ рд▓рдХреНрд╖ рджреЗрдК рд╢рдХрддрд╛ (рдбреЗрдмреЗрдЭрд┐рдпрдо рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд):

PS

рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛