рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдЖрдЬ рд╣рдо рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЕрдкрд╛рд░реНрдХ рдХрд╛рдлреНрдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдЖрд░рдбреАрдПрд╕ рдХреНрд▓рд╛рдЙрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░рд┐рдгрд╛рдо рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдЧреАред
рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХреНрд░реЗрдбрд┐рдЯ рд╕рдВрд╕реНрдерд╛рди рдиреЗ рд╣рдореЗрдВ рдЕрдкрдиреА рд╕рднреА рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдордХреНрдЦреА рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЗрдирджреЗрди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЯреНрд░реЗрдЬрд░реА рдХреЗ рд▓рд┐рдП рдЦреБрд▓реА рдореБрджреНрд░рд╛ рд╕реНрдерд┐рддрд┐, рд▓реЗрдирджреЗрди рдкрд░ рд╕реАрдорд╛ рдпрд╛ рд╡рд┐рддреНрддреАрдп рдкрд░рд┐рдгрд╛рдо рдЖрджрд┐ рдХреА рдЬрд▓реНрджреА рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЬрд╛рджреВ рдФрд░ рдЬрд╛рджреВ рдордВрддреНрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП - рд╣рдо рдХрдЯреМрддреА рдХреЗ рддрд╣рдд рдкрдврд╝рддреЗ рд╣реИрдВ! рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВ!
(рдЫрд╡рд┐ рд╕реНрд░реЛрдд)рдкрд░рд┐рдЪрдп
рдмреЗрд╢рдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕рд░рдгреА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрдзреБрдирд┐рдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рдВрдпреЛрдЬрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЯреИрдВрдбрдо, рдЬрд╣рд╛рдВ рдХрд╛рдлреНрдХрд╛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрджреЗрд╢ рдкреИрдХреЗрдЯреЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЗрди рдкреИрдХреЗрдЯреЛрдВ рдХреЛ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЖрд╡реЗрджрди рдХреА рдЧрд▓рддреА рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЪреМрдХрд┐рдпреЛрдВ - рдЪреМрдХрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЬрдм рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЦреЛрдП рд╣реБрдП рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдВрджреБ рдкрд░ рд▓реМрдЯрдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╡рд┐рдХрд╛рд╕ рдХреЗ рддрд╣рдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рдкреНрд░рдпреБрдХреНрдд рдШрдЯрдХ:
- рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рддрд░рд┐рдд рд╕рдВрджреЗрд╢ рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдСрдлрд╝рд▓рд╛рдЗрди рдФрд░ рдСрдирд▓рд╛рдЗрди рд╕рдВрджреЗрд╢ рдЦрдкрдд рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рдлреНрдХрд╛ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рдлреНрдХрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рдХреАрдкрд░ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗрд╡рд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ;
- рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ - рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╛рд░реНрдХ рдШрдЯрдХред рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдорд╛рдЗрдХреНрд░реЛ-рдмреИрдЪ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдм рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдЫреЛрдЯреЗ рдбреЗрдЯрд╛ рдкреИрдХреЗрдЯ рдХреЗ рдирд┐рд░рдВрддрд░ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдЯреЗ рдкреИрдХреЗрдЯреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИред рдирд┐рдпрдорд┐рдд рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдирдП рдкреИрдХреЗрдЬ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдкреИрдХреЗрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдкреИрдХреЗрдЯ рд╡реГрджреНрдзрд┐ рдмрдВрдж рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЕрдВрддрд░рд╛рд▓ рдХрд╛ рдЖрдХрд╛рд░ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмреИрдЪ рдЕрдВрддрд░рд╛рд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдЕрдкрд╛рдЪреЗ рд╕реНрдкрд╛рд░реНрдХ рдПрд╕рдХреНрдпреВрдПрд▓ - рд╕реНрдкрд╛рд░реНрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрдкрд░рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕реНрдХреАрдорд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рд╕рднреА рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рд╕реЗрдЯред рд╕реНрдкрд╛рд░реНрдХ SQL рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдЗрдирдкреБрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдФрд░, рд╕реНрдХреАрдорд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд░рд┐рдХреЙрд░реНрдб рдлрд╝реАрд▓реНрдб рдХреЛ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдПрдкреАрдЖрдИ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ;
- AWS RDS рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд╕реНрддрд╛ рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ, рдЬреЛ рдПрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рд╕рдВрдЪрд╛рд▓рди рдФрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реАрдзреЗ рдЕрдореЗрдЬрд╝рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╢рд╛рд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
Kafka рд╕рд░реНрд╡рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рд╢реБрд░реВ рдХрд░реЗрдВ
рд╕реАрдзреЗ рдХрд╛рдлреНрдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЬреЗрд╡реАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
sudo apt-get update sudo apt-get install default-jre java -version
рдХрд╛рдлреНрдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ:
sudo useradd kafka -m sudo passwd kafka sudo adduser kafka sudo
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдзрд┐рдХрд╛рд░рд┐рдХ Apache Kafka рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рд╡рд┐рддрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ:
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
рдЕрдЧрд▓рд╛ рдЪрд░рдг рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ Apache 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 рдФрд░ рдиреЗрдХреНрд╕реНрдЯ рдкреЗрдЬ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рдЕрдЧрд▓реЗ рдкреГрд╖реНрда рдореЗрдВ рдмрд╛рд╣рд░ (рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкрд╣реБрдВрдЪ) рдФрд░ рдкреЛрд░реНрдЯ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╕реЗ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
рдЪрд▓реЛ VPC рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдкреЛрд░реНрдЯ 5432 (PostgreSQL) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдПрдХ рдЕрд▓рдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ, VPC рдбреИрд╢рдмреЛрд░реНрдб рдореЗрдВ AWS рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдБ -> рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ -> рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдПрдБ:
рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реЗрдЯ рдХрд░реЗрдВ - PostgreSQL, рдПрдХ рд╡рд┐рд╡рд░рдг, рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреМрди рд╕рд╛ VPC рдЗрд╕ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмрдирд╛рдПрдБ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рдкреЛрд░реНрдЯ 5432 рдХреЗ рд▓рд┐рдП рдирдП рдмрдирд╛рдП рдЧрдП рдЗрдирдмрд╛рдЙрдВрдб рдирд┐рдпрдо рд╕рдореВрд╣ рдХреЛ рднрд░реЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдк рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рд╕реЗ PostgreSQL рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рдиреЗ рдкрд░, рдореВрд▓реНрдп :: / 0 рдХрд╛ рдЕрд░реНрде рд╣реИ рджреБрдирд┐рдпрд╛ рднрд░ рдХреЗ рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛, рдЬреЛ рдХрд┐ рдХреИрдиреЛрдирд┐рдХ рд░реВрдк рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╣рдо рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
рд╣рдо рдЙрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреГрд╖реНрда рдкрд░ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ "рдЙрдиреНрдирдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ" рдЦреБрд▓реА рд╣реБрдИ рд╣реИ рдФрд░ рдЕрдиреБрднрд╛рдЧ VPC рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЪреБрдиреЗрдВ -> рдореМрдЬреВрджрд╛ VPC рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣ рдЪреБрдиреЗрдВ -> PostgreSQL:
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд┐рдХрд▓реНрдк -> рдбреЗрдЯрд╛рдмреЗрд╕ рдирд╛рдо -> рдирд╛рдо рд╕реЗрдЯ рдХрд░реЗрдВ -
habrDB ред
рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдмреИрдХрдЕрдк (рдмреИрдХрдЕрдк рдкреНрд░рддрд┐рдзрд╛рд░рдг рдЕрд╡рдзрд┐ - 0 рджрд┐рди) рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ, рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдмрд╛рдХреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
рд╕реНрдЯреНрд░реАрдо рд╣реИрдВрдбрд▓рд░
рдЕрдВрддрд┐рдо рдЪрд░рдг рд╕реНрдкрд╛рд░реНрдХ-рдиреМрдХрд░рд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реЛрдЧрд╛, рдЬреЛ рдХрдлрдХрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣рд░ рджреЛ рд╕реЗрдХрдВрдб рдХреЗ рдирдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рдХрд░реЗрдЧрд╛ред
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЪреМрдХрд┐рдпреЛрдВ рд╕реНрдкрд╛рд░реНрдХрд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рддрдВрддреНрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЧрд▓рддреА рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдбреНрд░реЙрдк рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдВрджреБ рдкрд░ рд▓реМрдЯрдиреЗ рдФрд░ рдЦреЛрдП рд╣реБрдП рдбреЗрдЯрд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рд╕реЗ рдЧрдгрдирд╛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЖрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдПрдХ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдЪрдбреАрдПрдлрдПрд╕, рдПрд╕ 3, рдЖрджрд┐) рдореЗрдВ рд╕реЗрдЯ рдХрд░рдХреЗ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рд╣реЗрдЬреА рдЬрд╛рдПрдЧреАред рдпрд╣ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
streamingContext.checkpoint(checkpointDirectory)
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреН, рдпрджрд┐ рдЪреМрдХреАрдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╕рдВрджрд░реНрдн рдирд┐рдпрдВрддреНрд░рдг рдбреЗрдЯрд╛ рдбреЗрдЯрд╛ рд╕реЗ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ (рдпрд╛рдиреА рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), functionToCreateContext рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдирдпрд╛ рд╕рдВрджрд░реНрдн рдмрдирд╛рдиреЗ рдФрд░ DStreams рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:
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 рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВред рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо DataFrame рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдЦрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
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 рдХреЗ рд▓рд┐рдП, рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬреЛ рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ:
рд╕реНрдкрд╛рд░реНрдХ рдФрд░ рдХрд╛рдлреНрдХрд╛ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рд╕реНрдкрд╛рд░реНрдХ-рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ-рдХрд╛рдлреНрдХрд╛-0-8_2.11 рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдорд╛рд░реНрдХ-рд╕рдмрдорд┐рдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ -рдкреИрдХреЗрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рдЪреАрд▓реЗрдкрди рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрджреЗрд╢ рд╕рд░реНрд╡рд░ рдФрд░ рдЙрд╕ рд╡рд┐рд╖рдп рдХрд╛ рдирд╛рдо рднреА рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЗрдирдкреБрдЯ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ:
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 рд╕реЗрдХрдВрдб рдореЗрдВ рдирдП рдПрдХрддреНрд░реАрдХрд░рдг рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдмреИрдЪрд┐рдВрдЧрд┐рдВрдЧ рдЕрдВрддрд░рд╛рд▓ рдХреЛ 2 рд╕реЗрдХрдВрдб рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм StreamingContext рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ:
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо
рд▓реЗрди-рджреЗрди_рдкреНрд░рд╡рд╛рд╣ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдкреНрд░рд╢реНрди рдмрдирд╛рддреЗ рд╣реИрдВ:
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЕрдкрд╛рдЪреЗ рдХрдлрд╝реНрдХрд╛ рдФрд░ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрдирд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦрд╛ред рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреА рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдкрд░рд┐рдЪрд╛рд▓рди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╛рд░реНрдХ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп рдХреЛ рдХрдо рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рдЖрдк
GitHub рдкрд░ рдореЗрд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдкрд░ рдЦреБрд╢реА рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ, рдореИрдВ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдкрд╛рдардХреЛрдВ рдХреА рд░рдЪрдирд╛рддреНрдордХ рдЖрд▓реЛрдЪрдирд╛ рдХреА рднреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ рдЖрдкрдХреЛ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!
PS рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд╛рдиреАрдп PostgreSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рд▓реЗрдХрд┐рди AWS рдХреЗ рдореЗрд░реЗ рдкреНрдпрд╛рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд░рдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ AWS Kinesis рдФрд░ AWS KR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ AWS рдореЗрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЦрдмрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ!