НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π₯Π°Π±Ρ€!

НапоминаСм, Ρ‡Ρ‚ΠΎ вслСд Π·Π° ΠΊΠ½ΠΈΠ³ΠΎΠΉ ΠΎ Kafka ΠΌΡ‹ выпустили Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ интСрСсный Ρ‚Ρ€ΡƒΠ΄ ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Kafka Streams API.

НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

Пока сообщСство Ρ‚ΠΎΠ»ΡŒΠΊΠΎ постигаСт Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ возмоТностСй этого ΠΌΠΎΡ‰Π½ΠΎΠ³ΠΎ инструмСнта. Π’Π°ΠΊ, Π½Π΅Π΄Π°Π²Π½ΠΎ Π²Ρ‹ΡˆΠ»Π° ΡΡ‚Π°Ρ‚ΡŒΡ, с ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ вас ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒ. На собствСнном ΠΎΠΏΡ‹Ρ‚Π΅ Π°Π²Ρ‚ΠΎΡ€ рассказываСт, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· Kafka Streams распрСдСлСнноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΡΡ‚Π½ΠΎΠ³ΠΎ чтСния!

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Apache Kafka Streams ΠΏΠΎ всСму ΠΌΠΈΡ€Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² энтСрпрайзС для распрСдСлСнной ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ²Π΅Ρ€Ρ… Apache Kafka. Один ΠΈΠ· Π½Π΅Π΄ΠΎΠΎΡ†Π΅Π½Π΅Π½Π½Ρ‹Ρ… аспСктов этого Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ позволяСт Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ локальноС состояниС, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π½Π° основС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу, ΠΊΠ°ΠΊ Π² нашСй ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎ Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΏΠΎ бСзопасности ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Kafka Streams ΠΌΡ‹ создали микросСрвисы с раздСляСмым состояниСм, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слуТит Π½Π°ΠΌ отказоустойчивым ΠΈ высокодоступным источником достовСрной ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² систСмС. Для нас это шаг Π²ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΊ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ надСТности, Ρ‚Π°ΠΊ ΠΈ Π² удобствС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ.

Если вас интСрСсуСт Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΡƒΡŽ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ состояния Π²Π°ΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² – ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅, Π±ΡƒΠ΄Π΅Ρ‚ интСрСсно…

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ сочли, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΌΠ΅Π½ΡΡ‚ΡŒ наши ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅ с раздСляСмым состояниСм

Нам Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ состояниС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΎΠΏΠΈΡ€Π°ΡΡΡŒ Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ Π°Π³Π΅Π½Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: подвСргался Π»ΠΈ сайт Π°Ρ‚Π°ΠΊΠ΅)? Π”ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Kafka Streams ΠΌΡ‹ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ полагались для управлСния состояниСм Π½Π° Π΅Π΄ΠΈΠ½ΡƒΡŽ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (+ сСрвисный API). Π£ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ свои нСдостатки: Π² датаинтСнсивных ситуациях ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° согласованности ΠΈ синхронизации прСвращаСтся Π² настоящий Π²Ρ‹Π·ΠΎΠ². Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΡƒΠ·ΠΊΠΈΠΌ мСстом, Π»ΠΈΠ±ΠΎ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² состоянии Π³ΠΎΠ½ΠΊΠΈ ΠΈ ΡΡ‚Ρ€Π°Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ нСпрСдсказуСмости.

НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ 1: Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ сцСнарий с Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ состояния, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π²ΡˆΠΈΠΉΡΡ Π½Π° Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π°
Kafka ΠΈ Kafka Streams: Π°Π³Π΅Π½Ρ‚Ρ‹ ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‚ свои прСдставлСния Ρ‡Π΅Ρ€Π΅Π· API, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ состояниС рассчитываСтся Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…

Π—Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Kafka Streams – Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ стало просто ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ микросСрвисы с раздСляСмым состояниСм

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π³ΠΎΠ΄ Π½Π°Π·Π°Π΄ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π½ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ наши сцСнарии Ρ€Π°Π±ΠΎΡ‚Ρ‹ с раздСляСмым состояниСм, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Π‘Ρ€Π°Π·Ρƒ ΠΆΠ΅ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Kafka Streams – извСстно, насколько ΠΎΠ½Π° ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ, высокодоступная ΠΈ отказоустойчивая, ΠΊΠ°ΠΊΠΎΠΉ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΉ Ρƒ Π½Π΅Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» (прСобразования, Π² Ρ‚ΠΎΠΌ числС, с сохранСниСм состояния). Как Ρ€Π°Π· Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ, Π½Π΅ говоря ΡƒΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, насколько зрСлая ΠΈ надСТная систСма ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями слоТилась Π² Kafka.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· созданных Π½Π°ΠΌΠΈ микросСрвисов с сохранСниСм состояния строился Π½Π° основС инстанса Kafka Streams с довольно простой Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ. Он состоял ΠΈΠ· 1) источника 2) процСссора с постоянным Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ 3) стока:

НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ 2: задаваСмая ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ топология Π½Π°ΡˆΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… инстансов для микросСрвисов с сохранСниСм состояния. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: здСсь Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находятся ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ Π½ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Π°Π³Π΅Π½Ρ‚Ρ‹ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ сообщСния, ΠΏΠΎΠ΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Π² исходный Ρ‚ΠΎΠΏΠΈΠΊ, Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ – скаТСм, сСрвис ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ – ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ вычислСнноС раздСляСмоС состояниС Ρ‡Π΅Ρ€Π΅Π· сток (Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΠΏΠΈΠΊ).

НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ 3: Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π·Π°Π΄Π°Ρ‡ для сцСнария с раздСляСмыми микросСрвисами: 1) Π°Π³Π΅Π½Ρ‚ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ сообщСниС, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π΅ Π² исходный Ρ‚ΠΎΠΏΠΈΠΊ Kafka; 2) микросСрвис с раздСляСмым состояниСм (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Kafka Streams) ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΈ записываСт вычислСнноС состояниС Π² ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ‚ΠΎΠΏΠΈΠΊ Kafka; послС Ρ‡Π΅Π³ΠΎ 3) ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π½ΠΎΠ²ΠΎΠ΅ состояниС

Π­ΠΉ, Π° это встроСнноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² самом Π΄Π΅Π»Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ!

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Π²Ρ‹ΡˆΠ΅, наша топология с раздСляСмым состояниСм содСрТит Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠœΡ‹ нашли нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π΅Π³ΠΎ использования, ΠΈ Π΄Π²Π° ΠΈΠ· Π½ΠΈΡ… описаны Π½ΠΈΠΆΠ΅.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ #1: использованиС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ вычислСниях

НашС ΠΏΠ΅Ρ€Π²ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ содСрТало Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΈΡΡŒ Π½Π°ΠΌ для вычислСний. НапримСр, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях раздСляСмоС состояниС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ»ΠΎΡΡŒ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ Β«Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° голосов». Π’ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ всС послСдниС ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ Π°Π³Π΅Π½Ρ‚ΠΎΠ² ΠΎ состоянии Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π—Π°Ρ‚Π΅ΠΌ, получая Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ Π°Π³Π΅Π½Ρ‚Π°, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ, ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π°Π³Π΅Π½Ρ‚ΠΎΠ² ΠΎ состоянии Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ вычислСниС.
НиТС Π½Π° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ 4 ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π»ΠΈ доступ ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ процСссора, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ сообщСниС.

НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ 4: ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ доступ ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° процСссора (послС этого Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сцСнарии, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ с раздСляСмым состояниСм, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ doProcess)

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ #2: созданиС CRUD API ΠΏΠΎΠ²Π΅Ρ€Ρ… Kafka Streams

Наладив наш Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π·Π°Π΄Π°Ρ‡, ΠΌΡ‹ стали ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ RESTful CRUD API для Π½Π°ΡˆΠΈΡ… микросСрвисов с раздСляСмым состояниСм. ΠœΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ состояниС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ»ΠΈ всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ΅ сСрвСрной части).

Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ всСх API Get State, всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π»ΠΎΡΡŒ Π·Π°Π½ΠΎΠ²ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ состояниС ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, ΠΌΡ‹ Π½Π°Π΄ΠΎΠ»Π³ΠΎ ΡƒΠΊΠ»Π°Π΄Ρ‹Π²Π°Π»ΠΈ Π΅Π³ΠΎ Π²ΠΎ встроСнноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС становится достаточно просто Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ API ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ СдинствСнного экзСмпляра Kafka Streams, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² Π½ΠΈΠΆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ листингС:

НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ 5: использованиС встроСнного Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для получСния прСдвычислСнного состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

ОбновлСниС состояния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‡Π΅Ρ€Π΅Π· API Ρ‚Π°ΠΊΠΆΠ΅ нСслоТно Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, для этого Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠ΅Ρ€ Kafka, Π° с Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запись, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ состояниС. Π’Π°ΠΊ гарантируСтся, Ρ‡Ρ‚ΠΎ всС сообщСния, сгСнСрированныС Ρ‡Π΅Ρ€Π΅Π· API, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠ΅Ρ€ΠΎΠ² (Π½Π°ΠΏΡ€. Π°Π³Π΅Π½Ρ‚ΠΎΠ²).

НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ 6: Π·Π°Π΄Π°Ρ‚ΡŒ состояниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΡ€ΠΎΠ΄ΡŒΡŽΡΠ΅Ρ€Π° Kafka

НСбольшоС ослоТнСниС: Ρƒ Kafka мноТСство ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ, ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, прСдоставив Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сцСнарий кластСр микросСрвисов с раздСляСмым состояниСм. Настройка далась Π½Π°ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ простого: послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ сконфигурировали всС инстансы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ID прилоТСния (ΠΈ с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ сСрвСрами Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ), практичСски всС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ дСлалось автоматичСски. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°Π΄Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ исходный Ρ‚ΠΎΠΏΠΈΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ инстансу ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ подмноТСство Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ.

Π’Π°ΠΊΠΆΠ΅ упомяну, Ρ‡Ρ‚ΠΎ здСсь Π² порядкС Π²Π΅Ρ‰Π΅ΠΉ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΡƒΡŽ копию Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° состояний, Ρ‡Ρ‚ΠΎΠ±Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² случаС восстановлСния послС ΠΎΡ‚ΠΊΠ°Π·Π° ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΡ‚ΡŒ эту копию Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ инстанс. На ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ состояний Π² Kafka Streams создаСтся Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΎΠΏΠΈΠΊ с ΠΆΡƒΡ€Π½Π°Π»ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ (Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ обновлСния). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Kafka постоянно подстраховываСт Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ состояний. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² случаС ΠΎΡ‚ΠΊΠ°Π·Π° Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ инстанса Kafka Streams Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ состояний ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ быстро восстановлСно Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ инстансС, ΠΊΡƒΠ΄Π° ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ. Наш тСсты ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ это дСлаСтся Π·Π° считанныС сСкунды Π΄Π°ΠΆΠ΅ Ссли Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ находятся ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ‹ записСй.

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ микросСрвиса с раздСляСмым состояниСм ΠΊ кластСру микросСрвисов, становится Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Get State API. Π’ Π½ΠΎΠ²ΠΎΠΉ ситуации Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ состояний ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ микросСрвиса содСрТится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ (Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‡ΡŒΠΈ ΠΊΠ»ΡŽΡ‡ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π»ΠΈΡΡŒ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ). ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ инстансС ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π»ΠΎΡΡŒ состояниС Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ это Π½Π° основании ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°: Как ΠΌΡ‹ сдСлали ΠΈΠ· Kafka Streams Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ

Π˜Π»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡ 7: ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΌΡ‹ опрСдСляСм, с ΠΊΠ°ΠΊΠΎΠ³ΠΎ инстанса Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ состояниС Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°; ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ примСнялся с GET ALL API

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π²Ρ‹Π²ΠΎΠ΄Ρ‹

Π₯Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° состояний Π² Kafka Streams Π΄Π΅-Ρ„Π°ΠΊΡ‚ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ распрСдСлСнной Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ…,

  • постоянно Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ Π² Kafka
  • ΠŸΠΎΠ²Π΅Ρ€Ρ… Ρ‚Π°ΠΊΠΎΠΉ систСмы Π»Π΅Π³ΠΊΠΎ выстраиваСтся CRUD API
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° мноТСствСнных ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ получаСтся Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС
  • Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ нСсколько Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ состояний Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΡƒΡŽ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ для хранСния Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для:
  • Π”ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΡƒΠΆΠ½Ρ‹Ρ… для вычислСний ΠΏΡ€ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅
  • Π”ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ хранСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ инстанса
  • ΠΌΠ½ΠΎΠ³ΠΎΠ³ΠΎ другого…

Благодаря этим ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ достоинствам Kafka Streams ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ глобального состояния Π² Ρ‚Π°ΠΊΠΎΠΉ распрСдСлСнной систСмС ΠΊΠ°ΠΊ наша. Kafka Streams ΠΏΠΎΠΊΠ°Π·Π°Π»Π° сСбя вСсьма Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π΅ (с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π΅Π΅ развСртывания ΠΌΡ‹ практичСски Π½Π΅ тСряли сообщСний), ΠΈ ΠΌΡ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ этим Π΅Π΅ возмоТности Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com