рдкреЗрд╢ рд╣реИ рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо - рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдХреЗ рд▓рд┐рдП рд╕реАрдбреАрд╕реА

рдкреЗрд╢ рд╣реИ рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо - рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдХреЗ рд▓рд┐рдП рд╕реАрдбреАрд╕реА

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

рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо рдФрд░ рд╕реАрдбреАрд╕реА рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдХреНрдпрд╛ рд╣реИ?

рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо - рд╕реАрдбреАрд╕реА рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╢реНрд░реЗрдгреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ (рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ), рдпрд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╡рд┐рднрд┐рдиреНрди рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред

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

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

рдПрдХ рдЕрдиреНрдп рд▓рд╛рдн рдпрд╣ рддрдереНрдп рд╣реИ рдХрд┐ рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдВрддрд┐рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИред

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

рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рд╕рд░рд▓ рдпреЛрдЬрдирд╛ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ:

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░, рдпрд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдПрдХ рдЪрд┐рддреНрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдкреЗрд╢ рд╣реИ рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо - рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдХреЗ рд▓рд┐рдП рд╕реАрдбреАрд╕реА

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдпреЛрдЬрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╕рд┐рдВрдХ рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реА рд╕рдВрднрд╡ рд╣реИред

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

  • рдХреИрд╢ рд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рд╣рдЯрд╛рдирд╛;
  • рд╕реВрдЪрдирд╛рдПрдВ рднреЗрдЬрдирд╛;
  • рдЦреЛрдЬ рд╕реВрдЪрдХрд╛рдВрдХ рдЕрджреНрдпрддрди;
  • рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдбрд┐рдЯ рд▓реЙрдЧ;
  • ...

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

рдпрд╣ рдЖрд▓реЗрдЦ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдЧрд╛, рдЬреЛ рджреЛрд╖ рд╕рд╣рдирд╢реАрд▓рддрд╛ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

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

рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореВрд▓реНрдп - рдбреЗрдЯрд╛ - рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:

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

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

рд╣рдо рдЕрдВрддрд┐рдо рджреЛ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗред

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

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

рдпрджрд┐ рдЖрдк рдХреЙрдиреНрдлреНрд▓реБрдПрдВрдЯ рд╕реЗ рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрдиреЗрдХреНрдЯрд░реНрд╕ рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ 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

рдПрд╡рд░реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреЛрдЯ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдФрд░ рдЫреЛрдЯреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдЕрддреНрдпрдзрд┐рдХ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рд╕рдХрддрд╛ рд╣реИред JSON рдХрдирд╡рд░реНрдЯрд░ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рд╣реИ рдПрд╡рд░реЛ рдПрдХ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдЬреЛ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдореЗрдВ I/O рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдкрд░ рд▓реЛрдб рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рдПрд╡рд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реЗ рддреИрдирд╛рддреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╕реНрдХреАрдорд╛-рд░рдЬрд┐рд╕реНрдЯреНрд░реА (рдЖрд░реЗрдЦ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)ред рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рд╡реЗрд░рд┐рдПрдмрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдВрдЧреЗ:

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

рдПрд╡рд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЗрд╕ рдЖрд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ - рдЖрдЧреЗ, рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

2. рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

рдЕрдм рдЖрдк рд╕реАрдзреЗ рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд░реЛрдд рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдЧрд╛ред

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

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ JSON рдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ POST рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

2.1. рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓

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 тАФ рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рд░реЗрд╕реНрдЯ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рд╕реНрдерд┐рддрд┐ рджреЗрдЦреЗрдВ/рд░реАрд╕реНрдЯрд╛рд░реНрдЯ/рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ);
  • connector.class - рдбреАрдмреАрдПрдордПрд╕ рдХрдиреЗрдХреНрдЯрд░ рд╡рд░реНрдЧ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдХрдиреЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛;
  • plugin.name - рд╡рд╛рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреА рддрд╛рд░реНрдХрд┐рдХ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХрд╛ рдирд╛рдоред рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ 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 рдореЗрдВ, рдЬреЛ рдХрдиреЗрдХреНрдЯрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЬрд┐рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рддрд╣рдд рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдХрдиреЗрдХреНрдЯрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛;
  • transforms рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рдХреНрд╖рд┐рдд рд╡рд┐рд╖рдп рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдП:
    • transforms.AddPrefix.type рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ;
    • transforms.AddPrefix.regex - рдПрдХ рдореБрдЦреМрдЯрд╛ рдЬреЛ рд▓рдХреНрд╖реНрдп рд╡рд┐рд╖рдп рдХреЗ рдирд╛рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ;
    • transforms.AddPrefix.replacement - рд╕реАрдзреЗ рддреМрд░ рдкрд░ рд╣рдо рдХреНрдпрд╛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрдиреЗрдХреНрдЯрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдмрджреНрдз рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреНрдХрд╛ рдХреЛ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдПрд▓рдПрд╕рдПрди (рд▓реЙрдЧ рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛) рд╕реЗрд╡рд╛ рд╡рд┐рд╖рдп рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ offset. рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рдкреВрд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрд╕рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдЕрдХреНрд╕рд░ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ)?

  • рдХрдиреЗрдХреНрдЯрд░ рд╡рд╛рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝реЗрдЧрд╛ рдФрд░ рдЬрд┐рди рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╡рд╣ рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЙрдирдореЗрдВ рдХрд┐рд╕реА рднреА рд▓реЗрди-рджреЗрди рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдПрдЧрд╛ред
  • рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╡рд┐рд╖рдп рдпрд╛ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдореЗрдВ рдЕрдкрдиреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
  • рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд╛рд▓ рдлрд╝рд╛рдЗрд▓реЗрдВ рдбрд┐рд╕реНрдХ рдкрд░ рд░рдЦреА рдЬрд╛рдПрдВрдЧреА рдФрд░ рд╕рдВрднрд╡рддрдГ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред

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

рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдЬреЛ рдХрд░реАрдм рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рд╡рд╣ рд╣реИ transforms. рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рд╕реБрдВрджрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ...

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╛рдордХрд░рдг рдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╖рдп рдмрдирд╛рддрд╛ рд╣реИ: serverName.schemaName.tableName. рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛. рд╡рд┐рдХрд▓реНрдк transforms рдЖрдк рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╡рд┐рд╖рдп рдкрд░ рд░реВрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

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

рдХрдиреЗрдХреНрдЯрд░ рд╕реАрдорд╛рдПрдБ

PostgreSQL рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ/рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ:

  1. PostgreSQL рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯрд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рддрд╛рд░реНрдХрд┐рдХ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдбреАрдбреАрдПрд▓) - рддрджрдиреБрд╕рд╛рд░, рдпрд╣ рдбреЗрдЯрд╛ рд╡рд┐рд╖рдпреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
  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 рдиреЛрдб рдХреЗ рдУрдкрд▓реЙрдЧ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкрдврд╝рддрд╛ рд╣реИред

PgSQL рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рд╕рдорд╛рди, рдпрд╣рд╛рдВ рднреА, рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдкреНрд░рд╛рдердорд┐рдХ рдбреЗрдЯрд╛ рд╕реНрдиреИрдкрд╢реЙрдЯ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХрдиреЗрдХреНрдЯрд░ рдУрдкреНрд▓реЙрдЧ рд░реАрдбрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

{
"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. рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ рд╡рд┐рдлрд▓рддрд╛. рдпрджрд┐ рдХрдиреЗрдХреНрдЯ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдЧреНрд░реБрдк.рдЖрдИрдбреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдлрд┐рд░, рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрдиреЗрдХреНрдЯрд░ рдХреЛ рджреВрд╕рд░реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкрд░ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрд╛рдлреНрдХрд╛ рдореЗрдВ рд╡рд┐рд╖рдп рдореЗрдВ рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдмрджреНрдз рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред
  2. рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдХрд╛ рдиреБрдХрд╕рд╛рди. рдХрдиреЗрдХреНрдЯрд░ рдмрд╕ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрдврд╝рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ рдЬреЛ рдХрд╛рдлреНрдХрд╛ рдХреЛ рднреЗрдЬрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛, рдФрд░ рдкреНрд░рдпрд╛рд╕ рд╕рдлрд▓ рд╣реЛрдиреЗ рддрдХ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред
  3. рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдЕрдиреБрдкрд▓рдмреНрдзрддрд╛. рдХрдиреЗрдХреНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╕реНрд░реЛрдд рд╕реЗ рдкреБрдирдГ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ 16 рдкреНрд░рдпрд╛рд╕реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ рдШрд╛рддреАрдп рдмреИрдХрдСрдлрд╝. 16рд╡реЗрдВ рдЕрд╕рдлрд▓ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдп рдХреЛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдХрд╛рдлреНрдХрд╛ рдХрдиреЗрдХреНрдЯ REST рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
    • рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдбреЗрдЯрд╛ рдирд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реНрд▓реЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдкрдХреЛ рдЙрди рд╡рд╛рд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ рдЬреЛ рдХрдиреЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдкрдврд╝реА рдЬрд╛рддреА рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд┐рдХреНрдХреЗ рдХрд╛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рднреА рд╣реИ: рдпрджрд┐ рдХрдиреЗрдХреНрдЯрд░ рдФрд░ рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рдмреАрдЪ рдиреЗрдЯрд╡рд░реНрдХ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдмрд╛рдзрд┐рдд рд░рд╣рддреА рд╣реИ, рддреЛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдЦрддреНрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рд╕реЗ рд╡рд┐рдлрд▓рддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рд╕рдВрдкреВрд░реНрдг рдбреАрдмреАрдПрдордПрд╕.
    • рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ MySQL рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдмрд╣рд╛рд▓ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрд┐рдирд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбреАрдмреАрдПрдордПрд╕ рджреНрд╡рд╛рд░рд╛ рд╣реА рдШреБрдорд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдХрдиреЗрдХреНрдЯрд░ рд╡рд┐рдлрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдСрдкрд░реЗрд╢рди рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд┐рдирд▓реЙрдЧ рд╕реЗ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдиреИрдкрд╢реЙрдЯ рдореЛрдб рдореЗрдВ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
    • рдкрд░ MongoDB. рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ: рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрдиреЗрдХреНрдЯрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЬрдм рд▓реЙрдЧ/рдУрдкреНрд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣рдЯрд╛ рджреА рдЧрдИ рд╣реИрдВ рдФрд░ рдХрдиреЗрдХреНрдЯрд░ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдкрдврд╝рдирд╛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦ рд╕рдХрддрд╛ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рд╕рднреА рдбреАрдмреАрдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдиреЗрдХреНрдЯрд░ рд░рд╛рдЬреНрдп рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдореЛрдб рдореЗрдВ рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдиреИрдкрд╢реЙрдЯ.

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

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

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

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

рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВ (рдбреЗрдмреЗрдЬрд╝рд┐рдпрдо рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд):

рдкреБрдирд╢реНрдЪ

рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рднреА рдкрдврд╝реЗрдВ:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ