рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐, рдпрд╛ рдореИрдВ рдЕрдм рдкрд╛рд╡рд░рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛

рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐, рдпрд╛ рдореИрдВ рдЕрдм рдкрд╛рд╡рд░рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛

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

рд╣рдо рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

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

  1. рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рдорд╛рд░реНрдХрдЕрдк рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рд╕рд╛рджрд╛ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
  2. рд╣рдорд╛рд░реА рд╕реНрд▓рд╛рдЗрдбреНрд╕ рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдмрд╛рд╣рд░реА рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓рд┐рдП рдмрд┐рдирд╛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
    • рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЯреБрдХрдбрд╝реЗ,
    • рддреАрд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рдЬреНрдпрд╛рдорд┐рддреАрдп рдЖрдХреГрддрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рд▓ рдЖрд░реЗрдЦ,
    • рдпреВрдПрдордПрд▓ рдЖрд░реЗрдЦ, рдлрд╝реНрд▓реЛрдЪрд╛рд░реНрдЯ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред
  3. рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдбреНрд░рд╛рдлреНрдЯ рдХреЛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  4. рддреИрдпрд╛рд░ рд╕реНрд▓рд╛рдЗрдбреЛрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕рдВрдпреЛрдЬрди рд╕реАрдЖрдИ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рд╣рд╛рд▓рд╛рдБрдХрд┐, HTML/CSS рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдХреМрд╢рд▓ рдирд╣реАрдВ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрдХреНрд╖ рдирд╣реАрдВ рд╣реВрдБред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд AsciiDoctor рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ: рдПрдХ рдХрдирд╡рд░реНрдЯрд░ asciidoctor-revealjs рдЖрдкрдХреЛ AsciiDoctor рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ RevealJS рд╕реНрд▓рд╛рдЗрдб рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕реАрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИ!

рд╕реНрд▓рд╛рдЗрдб рдХреЛ рдХреЛрдб рдХреИрд╕реЗ рдХрд░реЗрдВ

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

рдПрдХ рд╢реАрд░реНрд╖рдХ рд╡рд╛рд▓реА рд╕реНрд▓рд╛рдЗрдб рдФрд░ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЖрдЗрдЯрдореЛрдВ рдХреА рд╕реВрдЪреА:

== ╨Ч╨░╤З╨╡╨╝ ╨╜╨░╨╝ Streams API?

[%step]
* Real-time stream processing
* Stream-like API (map / reduce)
* ╨Я╨╛╨┤ ╨║╨░╨┐╨╛╤В╨╛╨╝:
** ╨Р╨▓╤В╨╛╨╝╨░╤В╨╕╤З╨╡╤Б╨║╨╕╨╣ offset commit
** ╨а╨╡╨▒╨░╨╗╨░╨╜╤Б╨╕╤А╨╛╨▓╨║╨░
** ╨Т╨╜╤Г╤В╤А╨╡╨╜╨╜╨╡╨╡ ╤Б╨╛╤Б╤В╨╛╤П╨╜╨╕╨╡ ╨╛╨▒╤А╨░╨▒╨╛╤В╤З╨╕╨║╨╛╨▓
** ╨Ы╨╡╨│╨║╨╛╨╡ ╨╝╨░╤Б╤И╤В╨░╨▒╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡

рдкрд░рд┐рдгрд╛рдо

рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐, рдпрд╛ рдореИрдВ рдЕрдм рдкрд╛рд╡рд░рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛

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

== Kafka Streams API: ╨╛╨▒╤Й╨░╤П ╤Б╤В╤А╤Г╨║╤В╤Г╤А╨░ KStreams-╨┐╤А╨╕╨╗╨╛╨╢╨╡╨╜╨╕╤П

[source,java]
----
StreamsConfig config = ...;
//╨Ч╨┤╨╡╤Б╤М ╤Г╤Б╤В╨░╨╜╨░╨▓╨╗╨╕╨▓╨░╨╡╨╝ ╨▓╤Б╤П╨║╨╕╨╡ ╨╛╨┐╤Ж╨╕╨╕

Topology topology = new StreamsBuilder()
//╨Ч╨┤╨╡╤Б╤М ╤Б╤В╤А╨╛╨╕╨╝ ╤В╨╛╨┐╨╛╨╗╨╛╨│╨╕╤О
....build();
----

рдкрд░рд┐рдгрд╛рдо

рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐, рдпрд╛ рдореИрдВ рдЕрдм рдкрд╛рд╡рд░рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛

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

рд╢реАрд░реНрд╖рдХ, рдЪрд┐рддреНрд░рдг рдФрд░ рдкрд╛рда (рд╕реНрд▓рд╛рдЗрдб рдкрд░ рд▓реЗрдЖрдЙрдЯ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ AsciiDoctor рдЯреЗрдмрд▓):

== Kafka Streams in Action

[.custom-style]
[cols="30a,70a"]
|===
|image::KSIA.jpg[]
|
* **William Bejeck**, +
тАЬKafka Streams in ActionтАЭ, November 2018
* ╨Я╤А╨╕╨╝╨╡╤А╤Л ╨║╨╛╨┤╨░ ╨┤╨╗╤П Kafka 1.0
|===

рдкрд░рд┐рдгрд╛рдо

рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐, рдпрд╛ рдореИрдВ рдЕрдм рдкрд╛рд╡рд░рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛

рдХрднреА-рдХрднреА рдХрд┐рд╕реА рд╢реАрд░реНрд╖рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЕрдкрдиреА рдмрд╛рдд рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкреВрд░реНрдг-рд╕реНрдХреНрд░реАрди рдЫрд╡рд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ:

[%notitle]
== ╨Ц╨╕╤В╤М ╨▓ ╨╗╨╡╨│╨░╤Б╨╕ ╨╜╨╡╨╗╨╡╨│╨║╨╛

image::swampman.jpg[canvas, size=cover]

рдкрд░рд┐рдгрд╛рдо

рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐, рдпрд╛ рдореИрдВ рдЕрдм рдкрд╛рд╡рд░рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛

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

== ╨Я╨╕╤И╨╡╨╝ тАЬBet Totalling AppтАЭ

╨Ъ╨░╨║╨╛╨▓╨░ ╤Б╤Г╨╝╨╝╨░ ╨▓╤Л╨┐╨╗╨░╤В ╨┐╨╛ ╤Б╨┤╨╡╨╗╨░╨╜╨╜╤Л╨╝ ╤Б╤В╨░╨▓╨║╨░╨╝, ╨╡╤Б╨╗╨╕ ╤Б╤Л╨│╤А╨░╨╡╤В ╨╕╤Б╤Е╨╛╨┤?

[graphviz, "counting-topology.png"]
-----
digraph G {
graph [ dpi = 150 ];
rankdir="LR";
node [fontsize=18; shape="circle"; fixedsize="true"; width="1.1"];
Store [shape="cylinder"; label="Local Store"; fixedsize="true"; width="1.5"]
Source -> MapVal -> Sum -> Sink
Sum -> Store [dir=both; label=" n "]
{rank = same; Store; Sum;}
}
-----

рдкрд░рд┐рдгрд╛рдо

рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐, рдпрд╛ рдореИрдВ рдЕрдм рдкрд╛рд╡рд░рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛

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

рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг:

== ╨Э╨╡╨▓╨╛╤Б╨┐╤А╨╛╨╕╨╖╨▓╨╛╨┤╨╕╨╝╨░╤П ╤Б╨▒╨╛╤А╨║╨░
[graphviz, "unstable-update.png"]
-----
digraph G {
  rankdir="LR";
  graph [ dpi = 150 ];
  u -> r0;
  u[shape=plaintext; label="linter updaten+ 13 warnings"]
  r0[shape=point, width = 0]
  r1 -> r0[ arrowhead = none, label="master branch" ];
  r0-> r2 [];   b1 -> b4;  r1->b1
  r1[label="150nwarnings"]
  b1[label="┬▒ 0nwarnings"]
  b4[label="┬▒ 0nwarnings"]
  b4->r2
  r2[label="163nwarnings", color="red", xlabel=<<font color="red">merge blocked</font>>]
  {rank = same; u; r0; b4;}
}
-----

рдкрд░рд┐рдгрд╛рдо

рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрддрд┐, рдпрд╛ рдореИрдВ рдЕрдм рдкрд╛рд╡рд░рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛

рд╡реИрд╕реЗ, рдЧреНрд░рд╛рдлрд╝рд╡рд┐рдЬрд╝ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ рдкреЗрдЬ рдкрд░ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЧреНрд░рд╛рдлрд╝рд╡рд┐рдЬрд╝ рдСрдирд▓рд╛рдЗрди.

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

рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдкрд░ рд╕рдВрдпреБрдХреНрдд рдХрд╛рд░реНрдп рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рд╛рдордЧреНрд░реА рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрдирд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ред RevealJS рдореЗрдВ рд╕реНрд▓рд╛рдЗрдбреНрд╕ (рдлрд╝реЙрдиреНрдЯ, рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб, рдЗрдВрдбреЗрдВрдЯ) рдХрд╛ рдбрд┐рдЬрд╝рд╛рдЗрди CSS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреМрд╢рд▓ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╣ GIF - рд▓реЗрдХрд┐рди рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рдРрд╕реЗ рд▓реЛрдЧ рд╣реЛрдВ рдЬреЛ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд╕рд╛рде рдореБрдЭрд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдирд┐рдкреБрдгрддрд╛ рдФрд░ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рд▓рд┐рдП рддреЗрдЬреА рд╕реЗ рдирд┐рдХрдЯ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде, рд╣рдо Git рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдлрд╛рдЗрд▓реЛрдВ рдкрд░ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣рдпреЛрдЧ рдХреА рдЧрддрд┐ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ .pptx рдлрд╝рд╛рдЗрд▓реЗрдВ рднреЗрдЬрддреЗ рд╕рдордп рдЕрд╕рдВрднрд╡ рд╣реИред

рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ HTML рдкреЗрдЬ рдмрдирд╛рдирд╛

рд╕рд╛рджрд╛ рдкрд╛рда рд╕реНрд░реЛрдд рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдореЗрдВ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ?

AsciiDoctor рд░реВрдмреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рд░реВрдмреА рднрд╛рд╖рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реАрдзреЗ рдПрд╕реНрд╕реАрдбреЙрдХреНрдЯрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдВрднрд╡рддрдГ рд░реВрдмреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдХрд░реАрдмреА рдЪреАрдЬрд╝ рд╣реИред

рдпрджрд┐ рдЖрдк рд░реВрдмреА рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЧрдбрд╝рдмрдбрд╝реА рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдбреЙрдХрд░ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ asciidoctor/docker-asciidoctor, рдЬрд┐рд╕рдореЗрдВ, рд▓реЙрдиреНрдЪ рд╣реЛрдиреЗ рдкрд░, рдЖрдк VOLUME рдХреЗ тАЛтАЛрдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдкрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдЙрдкрд▓рдмреНрдзрддрд╛ рдПрд╕реНрдХреАрдбреЙрдХреНрдЯрд░-рдореЗрд╡реЗрди-рдкреНрд▓рдЧрдЗрди рдЖрдкрдХреЛ AsciiDoctor рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ (рдЬрд┐рд╕реЗ рд╣рдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ)ред рдЙрд╕реА рд╕рдордп, AsciiDoctor рдФрд░ JRuby Maven рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ AsciiDoctor JRuby рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ: рдорд╢реАрди рдкрд░ рдХреБрдЫ рднреА рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ! (рдкреИрдХреЗрдЬ рдХреЛ рдЫреЛрдбрд╝рдХрд░ graphviz, рдпрджрд┐ рдЖрдк рдЧреНрд░рд╛рдлрд╡рд┐рдЬрд╝ рдпрд╛ рдкреНрд▓рд╛рдВрдЯрдпреВрдПрдордПрд▓ рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред) рдмрд╕ рдЕрдкрдиреА .adoc рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ src/main/asciidoc/ред рдпрд╣рд╛рдВ рдкреЛрдордирд┐рдХ рдХрд╛ рдЙрджрд╛рд╣рд░рдгрдЖрд░реЗрдЦреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд▓рд╛рдЗрдб рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛ред

рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдХреЛ рдкреАрдбреАрдПрдл рдореЗрдВ рдмрджрд▓реЗрдВ

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

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

node decktape.js -s 3200x1800 --slides 1-500 
  reveal "file:///index.html?fragments=true" slides.pdf  

рдбреЗрдХрдЯреЗрдк рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╕рдордп рджреЛ рддрд░рдХреАрдмреЗрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдордиреЗ рд▓рд╛рдирд╛ рдерд╛:

  • рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдХрд▓реНрдк -s рджреЛрд╣рд░реЗ рдорд╛рд░реНрдЬрд┐рди рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд░реВрдкрд╛рдВрддрд░рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ

  • рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдХреЗ HTML рд╕рдВрд╕реНрдХрд░рдг рдХреЗ URL рдореЗрдВ рдЖрдкрдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ?fragments=true, рдЬреЛ рдЖрдкрдХреА рд╕реНрд▓рд╛рдЗрдб рдХреА рдкреНрд░рддреНрдпреЗрдХ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдкреАрдбреАрдПрдл рдкреЗрдЬ рдмрдирд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдВрдЪ рдмреБрд▓реЗрдЯ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдВрдЪ рдкреЗрдЬ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣ рдЖрдкрдХреЛ рдХрд┐рд╕реА рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдкреАрдбреАрдПрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╡реЗрдм рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдФрд░ рдкреНрд░рдХрд╛рд╢рди

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

рдЪреВрдБрдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП CI рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ рдЯреНрд░реИрд╡рд┐рд╕реА, рдФрд░ рддреИрдпрд╛рд░ рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреЗ рд▓рд┐рдП - github.io. Github.io рдХреЗ рдкреАрдЫреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╕реНрдерд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХрд┐рд╕реА рд╢рд╛рдЦрд╛ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХреА рдЬрд╛рддреА рд╣реИ gh-pages рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ <╨▓╨░╤И╨╡ ╨╕╨╝╤П>.gihub.io/<╨▓╨░╤И ╨┐╤А╨╛╨╡╨║╤В>.

рдкреВрд░реНрдг рдЯреНрд░реИрд╡рд┐рд╕рд╕реАрдЖрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓, рдЬрд┐рд╕рдореЗрдВ рдореЗрд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреГрд╖реНрда рдХреЗ HTML рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛, рдбреЗрдХрдЯреЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреАрдбреАрдПрдл рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдереНрд░реЗрдб рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред gh-pages github.io рдкрд░ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП.

рдЯреНрд░реИрд╡рд┐рд╕реАрд╕реАрдЖрдИ рдХреА рдУрд░ рд╕реЗ рдРрд╕рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

  • GH_REF - github.com/inponomarev/csa-hb рдЬреИрд╕рд╛ рдорд╛рди
  • GH_TOKEN - GitHub рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрдиред рдЖрдк рдЗрд╕реЗ GitHub рд╕реЗ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдбреЗрд╡рд▓рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ -> рдкрд░реНрд╕рдирд▓ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХреНрд╕реЗрд╕ рд╕реНрддрд░ "рдкрдмреНрд▓рд┐рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдВрдЪ" рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
  • GH_USER_EMAIL / GH_USER_NAME тАФ рдирд╛рдо/рдИрдореЗрд▓ рдЬреЛрдбрд╝реА рдЬрд┐рд╕рдХреА рдУрд░ рд╕реЗ рдереНрд░реЗрдб рдХреЛ рдкреБрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ gh-pages.

рдЗрд╕ рдкреНрд░рдХрд╛рд░, GitHub рдкрд░ рдкреНрд░реЗрдЬреЗрдВрдЯреЗрд╢рди рдХреЛрдб рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдХрдорд┐рдЯ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрд▓рд╛рдЗрдб рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ HTML рдФрд░ PDF рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ рдФрд░ github.io рдкрд░ рдкреБрдирдГ рдЕрдкрд▓реЛрдб рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред (рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрди рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЛ github.io рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЕрдВрддрддрдГ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред)

рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг

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

рдЕрд▓рд╡рд┐рджрд╛ рдкрд╛рд╡рд░рдкреНрд╡рд╛рдЗрдВрдЯ! рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореБрдЭреЗ рддрдХрдиреАрдХреА рдкреНрд░рд╕реНрддреБрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрднреА рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА :)

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

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