рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдирдорд╕реНрддреЗ, рд╣рдмрд░! рдЖрдЬ рд╣рдо рдПрдХ рдРрд╕реА рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рд╕рдВрджреЗрд╢ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреА рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЖрд░рдбреАрдПрд╕ рдХреНрд▓рд╛рдЙрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦреЗрдЧреАред

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

рдЬрд╛рджреВ рдФрд░ рдЬрд╛рджреБрдИ рдордВрддреНрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реЗрдВ - рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдкрдврд╝реЗрдВ! рдЬрд╛рдирд╛!

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
(рдЫрд╡рд┐ рд╕реНрд░реЛрдд)

рдкрд░рд┐рдЪрдп

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

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

рд╡рд┐рдХрд╕рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдкреНрд░рдпреБрдХреНрдд рдШрдЯрдХ:

  • рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдХрд╛рд╢рди-рд╕рджрд╕реНрдпрддрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдСрдлрд╝рд▓рд╛рдЗрди рдФрд░ рдСрдирд▓рд╛рдЗрди рд╕рдВрджреЗрд╢ рдЙрдкрднреЛрдЧ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрддред рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рдлреНрдХрд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рдлреНрдХрд╛ рдкреНрд░рдгрд╛рд▓реА рдЬрд╝реВрдХреАрдкрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗрд╡рд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИ;
  • рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ - рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╛рд░реНрдХ рдШрдЯрдХред рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдорд╛рдЗрдХреНрд░реЛ-рдмреИрдЪ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдХреЗ рдирд┐рд░рдВрддрд░ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЫреЛрдЯреЗ рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИред рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдирдпреЗ рдкреИрдХреЗрдЬ рдмрдирд╛рдпреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдХреЛрдИ рднреА рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдкреИрдХреЗрдЯ рдХреА рд╡реГрджреНрдзрд┐ рд░реБрдХ тАЛтАЛрдЬрд╛рддреА рд╣реИред рдЕрдВрддрд░рд╛рд▓ рдХрд╛ рдЖрдХрд╛рд░ рдмреИрдЪ рдЕрдВрддрд░рд╛рд▓ рдирд╛рдордХ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдПрд╕рдХреНрдпреВрдПрд▓ - рд╕реНрдкрд╛рд░реНрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд░рд┐рд▓реЗрд╢рдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдорддрд▓рдм рд╡рд╣ рдбреЗрдЯрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдХреАрдорд╛ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛рдиреА рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рд╕реЗрдЯред рд╕реНрдкрд╛рд░реНрдХ рдПрд╕рдХреНрдпреВрдПрд▓ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЗрдирдкреБрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░, рд╕реНрдХреАрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХреЗрд╡рд▓ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдПрдкреАрдЖрдИ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ;
  • рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЖрд░рдбреАрдПрд╕ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддреА рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕, рд╡реЗрдм рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рд╕реЗрдЯрдЕрдк, рд╕рдВрдЪрд╛рд▓рди рдФрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреА рд╣реИ, рдФрд░ рд╕реАрдзреЗ рдЕрдореЗрдЬрд╝реЕрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢рд╛рд╕рд┐рдд рд╣реЛрддреА рд╣реИред

рдХрд╛рдлреНрдХрд╛ рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛

рд╕реАрдзреЗ рдХрд╛рдлреНрдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐... JVM рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

sudo apt-get update 
sudo apt-get install default-jre
java -version

рдЖрдЗрдП рдХрд╛рдлреНрдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ:

sudo useradd kafka -m
sudo passwd kafka
sudo adduser kafka sudo

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:

wget -P /YOUR_PATH "http://apache-mirror.rbc.ru/pub/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz"

рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ:

tar -xvzf /YOUR_PATH/kafka_2.12-2.2.0.tgz
ln -s /YOUR_PATH/kafka_2.12-2.2.0 kafka

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

vim ~/kafka/config/server.properties

рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

delete.topic.enable = true

рдХрд╛рдлреНрдХрд╛ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЬрд╝реВрдХреАрдкрд░ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛; рд╣рдо рдХрд╛рдлреНрдХрд╛ рд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рд╣рд╛рдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

Cd ~/kafka
bin/zookeeper-server-start.sh config/zookeeper.properties

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

bin/kafka-server-start.sh config/server.properties

рдЖрдЗрдП рд▓реЗрди-рджреЗрди рдирд╛рдордХ рдПрдХ рдирдпрд╛ рд╡рд┐рд╖рдп рдмрдирд╛рдПрдВ:

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic transaction

рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╡рд╛рд▓рд╛ рдПрдХ рд╡рд┐рд╖рдп рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

bin/kafka-topics.sh --describe --zookeeper localhost:2181

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

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

рдирд┐рд░реНрдорд╛рддрд╛ рд▓реЗрдЦрди

рдирд┐рд░реНрдорд╛рддрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ - рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 100 рд╕рдВрджреЗрд╢ред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рд╕реЗ рд╣рдорд╛рд░рд╛ рддрд╛рддреНрдкрд░реНрдп рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рддреАрди рдХреНрд╖реЗрддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рд╢рд╛рдЦрд╛ - рдХреНрд░реЗрдбрд┐рдЯ рд╕рдВрд╕реНрдерд╛рди рдХреЗ рд╡рд┐рдХреНрд░рдп рд╕реНрдерд▓ рдХрд╛ рдирд╛рдо;
  • рдореБрджреНрд░рд╛ - рдХрд╛рд░реЛрдмрд╛рд░реА рдореБрджреНрд░рд╛;
  • рдореВрд▓реНрдп - рд╕реЛрджрд╛ рд░рд╛рд╢рд┐ред рдпрджрд┐ рдпрд╣ рдмреИрдВрдХ рджреНрд╡рд╛рд░рд╛ рдореБрджреНрд░рд╛ рдХреА рдЦрд░реАрдж рд╣реИ рддреЛ рд░рд╛рд╢рд┐ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреА, рдФрд░ рдпрджрд┐ рдпрд╣ рдмрд┐рдХреНрд░реА рд╣реИ рддреЛ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреАред

рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

from numpy.random import choice, randint

def get_random_value():
    new_dict = {}

    branch_list = ['Kazan', 'SPB', 'Novosibirsk', 'Surgut']
    currency_list = ['RUB', 'USD', 'EUR', 'GBP']

    new_dict['branch'] = choice(branch_list)
    new_dict['currency'] = choice(currency_list)
    new_dict['amount'] = randint(-100, 100)

    return new_dict

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕реЗрдВрдб рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдЙрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ:

from kafka import KafkaProducer    

producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
                             value_serializer=lambda x:dumps(x).encode('utf-8'),
                             compression_type='gzip')
my_topic = 'transaction'
data = get_random_value()

try:
    future = producer.send(topic = my_topic, value = data)
    record_metadata = future.get(timeout=10)
    
    print('--> The message has been sent to a topic: 
            {}, partition: {}, offset: {}' 
            .format(record_metadata.topic,
                record_metadata.partition,
                record_metadata.offset ))   
                             
except Exception as e:
    print('--> It seems an Error occurred: {}'.format(e))

finally:
    producer.flush()

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ:

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ - рдирд┐рд░реНрдорд╛рддрд╛ рдЙрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╕рдВрджреЗрд╢ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рднреЗрдЬрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЕрдЧрд▓рд╛ рдХрджрдо рд╕реНрдкрд╛рд░реНрдХ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕ рд╕рдВрджреЗрд╢ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реИред

рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдФрд░ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдХреНрд▓рд╕реНрдЯрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИред

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

рдпрд╣ рдврд╛рдБрдЪрд╛ рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

sudo apt-get install scala

рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╕реНрдкрд╛рд░реНрдХ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:

wget "http://mirror.linux-ia64.org/apache/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz"

рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдВ:

sudo tar xvf spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz -C /usr/local/spark

рдмреИрд╢ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдкрд╛рд░реНрдХ рдХрд╛ рдкрде рдЬреЛрдбрд╝реЗрдВ:

vim ~/.bashrc

рд╕рдВрдкрд╛рджрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:

SPARK_HOME=/usr/local/spark
export PATH=$SPARK_HOME/bin:$PATH

Bashrc рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ:

source ~/.bashrc

AWS PostgreSQL рддреИрдирд╛рдд рдХрд░рдирд╛

рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╕реНрдЯреНрд░реАрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрд▓реЛрдб рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо AWS RDS рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

AWS рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдБ -> AWS RDS -> рдбреЗрдЯрд╛рдмреЗрд╕ -> рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБ:
рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

PostgreSQL рдЪреБрдиреЗрдВ рдФрд░ рдЕрдЧрд▓рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗрд╡рд▓ рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ; рд╣рдо "рдиреНрдпреВрдирддрдо" (рдлреНрд░реА рдЯрд┐рдпрд░) рдПрдХ рдореБрдлреНрдд рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдлреНрд░реА рдЯрд┐рдпрд░ рдмреНрд▓реЙрдХ рдореЗрдВ рдПрдХ рдЯрд┐рдХ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ t2.micro рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдордЬреЛрд░, рдпрд╣ рдореБрдлрд╝реНрдд рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИ:
рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдЗрд╕рдХреЗ рдмрд╛рдж рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рдЖрддреА рд╣реИрдВ: рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдирд╛рдо, рдорд╛рд╕реНрдЯрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдЙрд╕рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдбред рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдирд╛рдо рджреЗрдВ: myHabrTest, рдорд╛рд╕реНрдЯрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: habr, рдкрд╛рд╕рд╡рд░реНрдб: habr12345 рдФрд░ Next рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдкрд░ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреА рдмрд╛рд╣рд░ рд╕реЗ рдкрд╣реБрдВрдЪ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрд╣реБрдВрдЪ) рдФрд░ рдкреЛрд░реНрдЯ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

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

рд╣рдо рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ - PostgreSQL, рдПрдХ рд╡рд┐рд╡рд░рдг, рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕ рд╕рдореВрд╣ рдХреЛ рдХрд┐рд╕ VPC рд╕реЗ рд╕рдВрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмрдирд╛рдПрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдирд╡ рдирд┐рд░реНрдорд┐рдд рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ 5432 рдХреЗ рд▓рд┐рдП рдЗрдирдмрд╛рдЙрдВрдб рдирд┐рдпрдо рднрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдкреЛрд░реНрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдк рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╕реЗ PostgreSQL рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред

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

рд╣рдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреЗрдЬ рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдордиреЗ "рдЙрдиреНрдирдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ" рдЦреЛрд▓рд╛ рд╣реИ рдФрд░ рд╡реАрдкреАрд╕реА рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрдпрди рдХрд░реЗрдВ -> рдореМрдЬреВрджрд╛ рд╡реАрдкреАрд╕реА рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдЪреБрдиреЗрдВ -> рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓:
рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдЗрд╕рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ -> рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдо -> рдирд╛рдо рд╕реЗрдЯ рдХрд░реЗрдВ - habrDB.

рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмреИрдХрдЕрдк (рдмреИрдХрдЕрдк рдЕрд╡рдзрд╛рд░рдг рдЕрд╡рдзрд┐ - 0 рджрд┐рди), рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рд╢реЗрд╖ рдкреИрд░рд╛рдореАрдЯрд░ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБ:
рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдзрд╛рдЧрд╛ рд╕рдВрдЪрд╛рд▓рдХ

рдЕрдВрддрд┐рдо рдЪрд░рдг рд╕реНрдкрд╛рд░реНрдХ рдЬреЙрдм рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реЛрдЧрд╛, рдЬреЛ рд╣рд░ рджреЛ рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд╛рдлреНрдХрд╛ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдирдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдЧрд╛ред

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

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

streamingContext.checkpoint(checkpointDirectory)

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

from pyspark.streaming import StreamingContext

context = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext)

рд╣рдо KafkaUtils рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА createDirectStream рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рд▓реЗрди-рджреЗрди" рд╡рд┐рд╖рдп рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ DirectStream рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ:

from pyspark.streaming.kafka import KafkaUtils
    
sc = SparkContext(conf=conf)
ssc = StreamingContext(sc, 2)

broker_list = 'localhost:9092'
topic = 'transaction'

directKafkaStream = KafkaUtils.createDirectStream(ssc,
                                [topic],
                                {"metadata.broker.list": broker_list})

JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛:

rowRdd = rdd.map(lambda w: Row(branch=w['branch'],
                                       currency=w['currency'],
                                       amount=w['amount']))
                                       
testDataFrame = spark.createDataFrame(rowRdd)
testDataFrame.createOrReplaceTempView("treasury_stream")

рд╕реНрдкрд╛рд░реНрдХ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рд╕рд░рд▓ рд╕рдореВрд╣реАрдХрд░рдг рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

select 
    from_unixtime(unix_timestamp()) as curr_time,
    t.branch                        as branch_name,
    t.currency                      as currency_code,
    sum(amount)                     as batch_value
from treasury_stream t
group by
    t.branch,
    t.currency

рдХреНрд╡реЗрд░реА рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рд╕реНрдкрд╛рд░реНрдХ SQL рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдирд╛:

sql_query = get_sql_query()
testResultDataFrame = spark.sql(sql_query)
testResultDataFrame.show(n=5)

рдФрд░ рдлрд┐рд░ рд╣рдо рдкрд░рд┐рдгрд╛рдореА рдПрдХрддреНрд░рд┐рдд рдбреЗрдЯрд╛ рдХреЛ AWS RDS рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рдПрдХрддреНрд░реАрдХрд░рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд▓реЗрдЦрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

testResultDataFrame.write 
    .format("jdbc") 
    .mode("append") 
    .option("driver", 'org.postgresql.Driver') 
    .option("url","jdbc:postgresql://myhabrtest.ciny8bykwxeg.us-east-1.rds.amazonaws.com:5432/habrDB") 
    .option("dbtable", "transaction_flow") 
    .option("user", "habr") 
    .option("password", "habr12345") 
    .save()

AWS RDS рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рд╣рдордиреЗ "рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдПрд╕рдХреНрдпреВрдПрд▓ рдкрд░рд┐рдирд┐рдпреЛрдЬрди" рдЪрд░рдг рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдмрдирд╛рдпрд╛ред рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдпреВрдЖрд░рдПрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рд╕реНрдкрд╛рд░реНрдХ рдФрд░ рдХрд╛рдлреНрдХрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдорд╛рд░реНрдХ-рд╕рдмрдорд┐рдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдп рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рд╕реНрдкрд╛рд░реНрдХ-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ-рдХрд╛рдлреНрдХрд╛-0-8_2.11. рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рдо PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ; рд╣рдо рдЙрдиреНрд╣реЗрдВ --packages рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

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

рддреЛ, рдЕрдм рд╕рд┐рд╕реНрдЯрдо рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рдВрдЪрдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ:

spark-submit 
--packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.2,
org.postgresql:postgresql:9.4.1207 
spark_job.py localhost:9092 transaction

рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛! рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирдП рдПрдХрддреНрд░реАрдХрд░рдг рдкрд░рд┐рдгрд╛рдо рд╣рд░ 2 рд╕реЗрдХрдВрдб рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рд╣рдордиреЗ StreamingContext рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ рдерд╛ рддреЛ рд╣рдордиреЗ рдмреИрдЪрд┐рдВрдЧ рдЕрдВрддрд░рд╛рд▓ рдХреЛ 2 рд╕реЗрдХрдВрдб рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛:

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдПрдХ рд╕рд░рд▓ рдХреНрд╡реЗрд░реА рдмрдирд╛рддреЗ рд╣реИрдВ рд▓реЗрдирджреЗрди_рдкреНрд░рд╡рд╛рд╣:

рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

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

рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ Apache Kafka рдФрд░ PostgreSQL рдХреЗ рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрдирд╛ рдХреА рд╕реНрдЯреНрд░реАрдо рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛ рдЧрдпрд╛ред рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреА рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп рдХреЛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡ рджреЗрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдЖрдк рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ GitHub.

рдореБрдЭреЗ рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИ, рдореИрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рд╕рднреА рдкрд░рд╡рд╛рд╣ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкрд╛рдардХреЛрдВ рд╕реЗ рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХреА рднреА рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдВред

рдореИрдВ рдЖрдкрдХреЛ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

рднрдЬред рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕реНрдерд╛рдиреАрдп PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди AWS рдХреЗ рдкреНрд░рддрд┐ рдореЗрд░реЗ рдкреНрдпрд╛рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрд┐рдиреЗрд╕рд┐рд╕ рдФрд░ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдИрдПрдордЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рдорд╛рдЪрд╛рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ!

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

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