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

рд╣реЕрд▓реЛ, рд╣реЕрдмреНрд░! рдЖрдЬ рдЖрдореНрд╣реА рдПрдХ рдкреНрд░рдгрд╛рд▓реА рддрдпрд╛рд░ рдХрд░реВ рдЬреА рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд╛рдкрд░реВрди Apache Kafka рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣рд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрд▓ рдЖрдгрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░рд┐рдгрд╛рдо AWS RDS рдХреНрд▓рд╛рдЙрдб рдбреЗрдЯрд╛рдмреЗрд╕рд╡рд░ рд▓рд┐рд╣реВ.

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

рдЬрд╛рджреВ рдЖрдгрд┐ рдЬрд╛рджреВрдЪреНрдпрд╛ рдордВрддреНрд░рд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рди рдХрд░рддрд╛ рдпрд╛ рдХреЗрд╕рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд╢реА рдХрд░рд╛рд╡реА - рдХрдЯ рдЕрдВрддрд░реНрдЧрдд рд╡рд╛рдЪрд╛! рдЬрд╛!

рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧрд╕рд╣ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдЖрдгрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
(рдкреНрд░рддрд┐рдорд╛ рд╕реНрддреНрд░реЛрдд)

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

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

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

рд╡рд┐рдХрд╕рд┐рдд рдкреНрд░рдгрд╛рд▓реАрдЪреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░

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

рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдШрдЯрдХ:

  • рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдХрд╛рд╢рди-рд╕рджрд╕реНрдпрддрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рдгрд╛рд▓реА рдЖрд╣реЗ. рдСрдлрд▓рд╛рдЗрди рдЖрдгрд┐ рдСрдирд▓рд╛рдЗрди рд╕рдВрджреЗрд╢ рд╡рд╛рдкрд░рд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп. рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рдгреНрдпрд╛рдкрд╛рд╕реВрди рд░реЛрдЦрдгреНрдпрд╛рд╕рд╛рдареА, рдХрд╛рдлреНрдХрд╛ рд╕рдВрджреЗрд╢ рдбрд┐рд╕реНрдХрд╡рд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдкреНрд░рддрд┐рд░реВрдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдЭреВрдХреАрдкрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭреЗрд╢рди рд╕реЗрд╡реЗрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдХрд╛рдлреНрдХрд╛ рдкреНрд░рдгрд╛рд▓реА рддрдпрд╛рд░ рдХреЗрд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ;
  • рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдкреНрд░рд╡рд╛рд╣ - рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдкрд╛рд░реНрдХ рдШрдЯрдХ. рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдорд╛рдпрдХреНрд░реЛ-рдмреЕрдЪ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╡рд╛рдкрд░реВрди рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЖрд╣реЗ, рдЬреЗрдереЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдЪрд╛ рдЕрд░реНрде рд▓рд╣рд╛рди рдбреЗрдЯрд╛ рдкреЕрдХреЗрдЯреНрд╕рдЪрд╛ рд╕рддрдд рдХреНрд░рдо рдореНрд╣рдгреВрди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд┐рд╡рд┐рдз рд╕реНрддреНрд░реЛрддрд╛рдВрдХрдбреВрди рдбреЗрдЯрд╛ рдШреЗрддреЗ рдЖрдгрд┐ рд▓рд╣рд╛рди рдкреЕрдХреЗрдЬреЗрд╕рдордзреНрдпреЗ рдПрдХрддреНрд░ рдХрд░рддреЗ. рдирд╡реАрди рдкреЕрдХреЗрдЬреЗрд╕ рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рдиреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реЗрдЪреНрдпрд╛ рдордзреНрдпрд╛рдВрддрд░рд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛, рдПрдХ рдирд╡реАрди рдкреЕрдХреЗрдЯ рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рддреНрдпрд╛ рдордзреНрдпрд╛рдВрддрд░рд╛рджрд░рдореНрдпрд╛рди рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓рд╛ рдХреЛрдгрддрд╛рд╣реА рдбреЗрдЯрд╛ рдкреЕрдХреЗрдЯрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдордзреНрдпрд╛рдВрддрд░рд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА, рдкреЕрдХреЗрдЯрдЪреА рд╡рд╛рдв рдерд╛рдВрдмрддреЗ. рдордзреНрдпрд╛рдВрддрд░рд╛рдЪрд╛ рдЖрдХрд╛рд░ рдмреЕрдЪ рдЗрдВрдЯрд░рд╡реНрд╣рд▓ рдирд╛рд╡рд╛рдЪреНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░рджреНрд╡рд╛рд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ;
  • рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдПрд╕рдХреНрдпреВрдПрд▓ - рд╕реНрдкрд╛рд░реНрдХ рдлрдВрдХреНрд╢рдирд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрд╕рд╣ рд░рд┐рд▓реЗрд╢рдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрдХрддреНрд░ рдХрд░рддреЗ. рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрдб рдбреЗрдЯрд╛ рдореНрд╣рдгрдЬреЗ рд╕реНрдХреАрдорд╛ рдЕрд╕рд▓реЗрд▓рд╛ рдбреЗрдЯрд╛, рдореНрд╣рдгрдЬреЗрдЪ рд╕рд░реНрд╡ рд░реЗрдХреЙрд░реНрдбрд╕рд╛рдареА рдлреАрд▓реНрдбрдЪрд╛ рдПрдХрдЪ рд╕рдВрдЪ. рд╕реНрдкрд╛рд░реНрдХ рдПрд╕рдХреНрдпреВрдПрд▓ рд╡рд┐рд╡рд┐рдз рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рд╕реНрддреНрд░реЛрддрд╛рдВрдХрдбреВрди рдЗрдирдкреБрдЯрд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ рдЖрдгрд┐, рд╕реНрдХреАрдорд╛ рдорд╛рд╣рд┐рддреАрдЪреНрдпрд╛ рдЙрдкрд▓рдмреНрдзрддреЗрдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж, рддреЗ рдХреЗрд╡рд│ рд░реЗрдХреЙрд░реНрдбрдЪреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдлреАрд▓реНрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдиреЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░реВ рд╢рдХрддреЗ рдЖрдгрд┐ рдбреЗрдЯрд╛рдлреНрд░реЗрдо API рджреЗрдЦреАрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреЗ;
  • AWS RDS рддреБрд▓рдиреЗрдиреЗ рд╕реНрд╡рд╕реНрдд рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕, рд╡реЗрдм рд╕реЗрд╡рд╛ рдЖрд╣реЗ рдЬреА рд╕реЗрдЯрдЕрдк, рдСрдкрд░реЗрд╢рди рдЖрдгрд┐ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕реБрд▓рдн рдХрд░рддреЗ рдЖрдгрд┐ рдереЗрдЯ Amazon рджреНрд╡рд╛рд░реЗ рдкреНрд░рд╢рд╛рд╕рд┐рдд рдХреЗрд▓реА рдЬрд╛рддреЗ.

рдХрд╛рдлреНрдХрд╛ рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрдгрд┐ рдЪрд╛рд▓рд╡рдгреЗ

рдХрд╛рдлреНрдХрд╛ рдереЗрдЯ рд╡рд╛рдкрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣рд╛рд▓рд╛ рдЬрд╛рд╡рд╛ рдЕрд╕рд▓реНрдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдХрд╛рд░рдг... 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

рдХрд╛рдлреНрдХрд╛ рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣рд╛рд▓рд╛ ZooKeeper рд╕рд░реНрд╡реНрд╣рд░ рд╕реБрд░реВ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ; рдЖрдореНрд╣реА рдХрд╛рдлреНрдХрд╛ рд╡рд┐рддрд░рдгрд╛рд╕рд╣ рдпреЗрдгрд╛рд░реА рд╕рд╣рд╛рдпреНрдпрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рдкрд░реВ:

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

ZooKeeper рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рд╕реБрд░реВ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рд╡реЗрдЧрд│реНрдпрд╛ рдЯрд░реНрдорд┐рдирд▓рдордзреНрдпреЗ рдХрд╛рдлреНрдХрд╛ рд╕рд░реНрд╡реНрд╣рд░ рд▓рд╛рдБрдЪ рдХрд░рд╛:

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

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

рдирд╡реАрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╕рд╛рдареА рдЙрддреНрдкрд╛рджрдХ рдЖрдгрд┐ рдЧреНрд░рд╛рд╣рдХрд╛рдВрдЪреНрдпрд╛ рдЪрд╛рдЪрдгреАрдЪреЗ рдХреНрд╖рдг рдЧрдорд╛рд╡реВрдпрд╛. рдЖрдкрдг рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рдгреЗ рдЖрдгрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреЗ рдХрд╕реЗ рддрдкрд╛рд╕реВ рд╢рдХрддрд╛ рдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓ рдЕрдзрд┐рдХреГрдд рдХрд╛рдЧрджрдкрддреНрд░рд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдЖрд╣реЗрдд - рдХрд╛рд╣реА рд╕рдВрджреЗрд╢ рдкрд╛рдард╡рд╛. рдмрд░рдВ, рдЖрдореНрд╣реА KafkaProducer API рд╡рд╛рдкрд░реВрди Python рдордзреНрдпреЗ рдирд┐рд░реНрдорд╛рддрд╛ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдХрдбреЗ рдкреБрдвреЗ рдЬрд╛рдК.

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

рдирд┐рд░реНрдорд╛рддрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░реЗрд▓ - рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрдХрдВрджрд╛рд▓рд╛ 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 рдЖрдгрд┐ рдкреБрдвреАрд▓ рдмрдЯрдгрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛:
рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧрд╕рд╣ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдЖрдгрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

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

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

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

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

рдЦрд╛рд▓реАрд▓ рдЪрд┐рддреНрд░рд╛рдд рджрд╛рдЦрд╡рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдирд╡реНрдпрд╛рдиреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЧрдЯрд╛рд╕рд╛рдареА рдкреЛрд░реНрдЯ 5432 рд╕рд╛рдареА рдЗрдирдмрд╛рдЙрдВрдб рдирд┐рдпрдо рднрд░рд╛. рддреБрдореНрд╣реА рдкреЛрд░реНрдЯ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА, рдкрд░рдВрддреБ рдкреНрд░рдХрд╛рд░ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреАрдордзреВрди PostgreSQL рдирд┐рд╡рдбрд╛.

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

рдЖрдореНрд╣реА рдмреНрд░рд╛рдЙрдЭрд░ рдкреГрд╖реНрдард╛рд╡рд░ рдкрд░рдд рдЖрд▓реЛ, рдЬрд┐рдереЗ рдЖрдордЪреНрдпрд╛рдХрдбреЗ "рдкреНрд░рдЧрдд рд╕реЗрдЯрд┐рдВрдЧреНрдЬ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛" рдЙрдШрдбрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ VPC рд╕реБрд░рдХреНрд╖рд╛ рдЧрдЯ рд╡рд┐рднрд╛рдЧрд╛рдд рдирд┐рд╡рдбрд╛ -> рд╡рд┐рджреНрдпрдорд╛рди VPC рд╕реБрд░рдХреНрд╖рд╛ рдЧрдЯ рдирд┐рд╡рдбрд╛ -> PostgreSQL:
рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧрд╕рд╣ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдЖрдгрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ

рдкреБрдвреЗ, рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░реНрдпрд╛рдпрд╛рдВрдордзреНрдпреЗ -> рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рд╡ -> рдирд╛рд╡ рд╕реЗрдЯ рдХрд░рд╛ - habrDB.

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

рдзрд╛рдЧрд╛ рд╣рд╛рддрд╛рд│рдгрд╛рд░рд╛

рдЕрдВрддрд┐рдо рдЯрдкреНрдкрд╛ рд╕реНрдкрд╛рд░реНрдХ рдЬреЙрдмрдЪрд╛ рд╡рд┐рдХрд╛рд╕ рдЕрд╕реЗрд▓, рдЬреЛ рджрд░ рджреЛрди рд╕реЗрдХрдВрджрд╛рдВрдиреА рдХрд╛рдлреНрдХрд╛рдХрдбреВрди рдпреЗрдгрд╛рд▒реНрдпрд╛ рдирд╡реАрди рдбреЗрдЯрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрд▓ рдЖрдгрд┐ рдбреЗрдЯрд╛рдмреЗрд╕рдордзреНрдпреЗ рдирд┐рдХрд╛рд▓ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реЗрд▓.

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

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

streamingContext.checkpoint(checkpointDirectory)

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

from pyspark.streaming import StreamingContext

context = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext)

рдЖрдореНрд╣реА KafkaUtils рд▓рд╛рдпрдмреНрд░рд░реАрдЪреА createDirectStream рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди тАЬрд╡реНрдпрд╡рд╣рд╛рд░тАЭ рд╡рд┐рд╖рдпрд╛рд╢реА рдХрдиреЗрдХреНрдЯ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рдбрд╛рдпрд░реЗрдХреНрдЯрд╕реНрдЯреНрд░реАрдо рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рддреЛ:

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_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 рд▓рд╛ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдХрд╛рд╣реА рд╢рдмреНрдж. рдЖрдореНрд╣реА "AWS PostgreSQL рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рдгреЗ" рдЪрд░рдгрд╛рд╡рд░ рддреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЖрдгрд┐ рдкрд╛рд╕рд╡рд░реНрдб рддрдпрд╛рд░ рдХреЗрд▓рд╛. рддреБрдореНрд╣реА рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡реНрд╣рд░ url рдореНрд╣рдгреВрди Endpoint рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рд╛рд╡рд╛, рдЬреЛ рдХрдиреЗрдХреНрдЯрд┐рд╡реНрд╣рд┐рдЯреА рдЖрдгрд┐ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рднрд╛рдЧрд╛рдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ:

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

рд╕реНрдкрд╛рд░реНрдХ рдЖрдгрд┐ рдХрд╛рдлреНрдХрд╛ рдпрд╛рдВрдирд╛ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдЖрд░реНрдЯрд┐рдлреЕрдХреНрдЯ рд╡рд╛рдкрд░реВрди smark-submit рджреНрд╡рд╛рд░реЗ рдХрд╛рдо рдЪрд╛рд▓рд╡рд╛рд╡реЗ. spark-streaming-kafka-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.

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

рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╢ рдЗрдЪреНрдЫрд┐рддреЛ!

PS рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рд╕реНрдерд╛рдирд┐рдХ PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рдпреЛрдЬрдирд╛ рд╣реЛрддреА, рдкрд░рдВрддреБ AWS рдмрджреНрджрд▓рдЪреЗ рдорд╛рдЭреЗ рдкреНрд░реЗрдо рдкрд╛рд╣рддрд╛, рдореА рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд▓рд╛рдЙрдбрд╡рд░ рд╣рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛. рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рдкреБрдвреАрд▓ рд▓реЗрдЦрд╛рдд, рдореА AWS рдордзреНрдпреЗ рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реА рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдгрд╛рд▓реА AWS Kinesis рдЖрдгрд┐ AWS EMR рд╡рд╛рдкрд░реВрди рдХрд╢реА рдЕрдВрдорд▓рд╛рдд рдЖрдгрд╛рдпрдЪреА рддреЗ рджрд╛рдЦрд╡реЗрди. рдмрд╛рддрдореНрдпрд╛рдВрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рд╛!

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

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