Kafka ΠΈ микросСрвисы: ΠΎΠ±Π·ΠΎΡ€

Kafka ΠΈ микросСрвисы: ΠΎΠ±Π·ΠΎΡ€

ВсСм ΠΏΡ€ΠΈΠ²Π΅Ρ‚. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π² Авито Π΄Π΅Π²ΡΡ‚ΡŒ мСсяцСв Π½Π°Π·Π°Π΄ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ Kafka, ΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΈΠ· сСбя прСдставляСт. ПодСлюсь ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· кСйсов использования β€” Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний. И напослСдок ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ»ΡŽΡΡ‹ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΡ‚ примСнСния ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Kafka as a Service.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

Kafka ΠΈ микросСрвисы: ΠΎΠ±Π·ΠΎΡ€

Для Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ контСкста. НСкотороС врСмя Π½Π°Π·Π°Π΄ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, ΠΈ сСйчас Π² Авито ΡƒΠΆΠ΅ нСсколько сотСн Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… сСрвисов. Они ΠΈΠΌΠ΅ΡŽΡ‚ свои Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°, свой стСк Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° свою Ρ‡Π°ΡΡ‚ΡŒ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ.

Одна ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с большим числом сСрвисов β€” ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ. БСрвис А часто Ρ…ΠΎΡ‡Π΅Ρ‚ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ располагаСт сСрвис Π‘. Π’ этом случаС сСрвис А обращаСтся ΠΊ сСрвису Π‘ Ρ‡Π΅Ρ€Π΅Π· синхронный API. БСрвис Π’ Ρ…ΠΎΡ‡Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит Ρƒ сСрвисов Π“ ΠΈ Π”, Π° Ρ‚Π΅, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ΡΡ сСрвисами А ΠΈ Π‘. Когда Ρ‚Π°ΠΊΠΈΡ… Β«Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ…Β» сСрвисов становится ΠΌΠ½ΠΎΠ³ΠΎ, связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π·Π°ΠΏΡƒΡ‚Π°Π½Π½Ρ‹ΠΉ ΠΊΠ»ΡƒΠ±ΠΎΠΊ.

ΠŸΡ€ΠΈ этом Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ сСрвис А ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ нСдоступСн. И Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² этом случаС сСрвису Π‘ ΠΈ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ завязанным Π½Π° Π½Π΅Π³ΠΎ сСрвисам? А Ссли для выполнСния бизнСс-ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… синхронных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·Π° всСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ становится Π΅Ρ‰Π΅ Π²Ρ‹ΡˆΠ΅ (ΠΈ ΠΎΠ½Π° Ρ‚Π΅ΠΌ Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ Π΄Π»ΠΈΠ½Π½Π΅Π΅ эта Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°).

Π’Ρ‹Π±ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Kafka ΠΈ микросСрвисы: ΠΎΠ±Π·ΠΎΡ€

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

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° доставка сообщСний. Для этого спСрва ΠΏΠΎΠΉΠΌΠ΅ΠΌ, Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ ΠΎΡ‚ Π½Π΅Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ:

  • сообщСния ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚Π΅Ρ€ΡΡ‚ΡŒΡΡ;
  • сообщСния ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ;
  • сообщСния ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ Π² нСсколько Π΄Π½Π΅ΠΉ (пСрсистСнтный Π±ΡƒΡ„Π΅Ρ€);
  • сСрвисы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡ… Π΄Π°Π½Π½Ρ‹Π΅;
  • нСсколько сСрвисов ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅;
  • сообщСния ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ, ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹ΠΉ payload (event-carried state transfer);
  • ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½Π° гарантия порядка сообщСний.

Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌ критичСски Π²Π°ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ максимально ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡƒΡŽ систСму с высокой пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ (Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 100k сообщСний ΠΏΠΎ нСсколько ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ Π² сСкунду).

На этом этапС ΠΌΡ‹ Ρ€Π°ΡΠΏΡ€ΠΎΡ‰Π°Π»ΠΈΡΡŒ с RabbitMQ (слоТно ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π½Π° высоких rps), PGQ ΠΎΡ‚ SkyTools (нСдостаточно быстрый ΠΈ ΠΏΠ»ΠΎΡ…ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ) ΠΈ NSQ (Π½Π΅ пСрсистСнтный). ВсС эти Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Ρƒ нас Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π½ΠΎ ΠΏΠΎΠ΄ Ρ€Π΅ΡˆΠ°Π΅ΠΌΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΎΠ½ΠΈ Π½Π΅ подошли.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ для нас Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β€” Apache Kafka, Apache Pulsar ΠΈ NATS Streaming.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ отбросили Pulsar. ΠœΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Kafka ΠΈ Pulsar β€” довольно ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ собой Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. И нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Pulsar ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌΠΈ компаниями, Π½ΠΎΠ²Π΅Π΅ ΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΡƒΡŽ latency (Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ), ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΈΠ· этих Π΄Π²ΡƒΡ… ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Kafka, ΠΊΠ°ΠΊ de facto стандарт для Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡. ВСроятно, ΠΌΡ‹ вСрнСмся ΠΊ Apache Pulsar Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

И Π²ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π΄Π²Π° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Π°: NATS Streaming ΠΈ Apache Kafka. ΠœΡ‹ довольно ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΠ±Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΈ ΠΎΠ±Π° ΠΎΠ½ΠΈ подошли ΠΏΠΎΠ΄ Π·Π°Π΄Π°Ρ‡Ρƒ. Но Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ побоялись ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ молодости NATS Streaming (ΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· основных Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², Tyler Treat, Ρ€Π΅ΡˆΠΈΠ» ΡƒΠΉΡ‚ΠΈ ΠΈΠ· ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ свой собствСнный β€” Liftbridge). ΠŸΡ€ΠΈ этом Clustering Ρ€Π΅ΠΆΠΈΠΌ NATS Streaming Π½Π΅ Π΄Π°Π²Π°Π» возмоТности сильного Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ (вСроятно, это ΡƒΠΆΠ΅ Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° послС добавлСния partitioning Ρ€Π΅ΠΆΠΈΠΌΠ° Π² 2017 Π³ΠΎΠ΄Ρƒ).

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, NATS Streaming – крутая тСхнология, написанная Π½Π° Go ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Cloud Native Computing Foundation. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Apache Kafka, Π΅ΠΉ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ Zookeeper для Ρ€Π°Π±ΠΎΡ‚Ρ‹ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, скоро ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС ΠΈ ΠΎ Kafka), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ RAFT. ΠŸΡ€ΠΈ этом NATS Streaming ΠΏΡ€ΠΎΡ‰Π΅ Π² администрировании. ΠœΡ‹ Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² дальнСйшСм Π΅Ρ‰Ρ‘ вСрнСмся ΠΊ этой Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.

И всё-Ρ‚Π°ΠΊΠΈ Π½Π° сСгодняшний дСнь нашим ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ стала Apache Kafka. На Π½Π°ΡˆΠΈΡ… тСстах ΠΎΠ½Π° ΠΏΠΎΠΊΠ°Π·Π°Π»Π° сСбя достаточно быстрой (Π±ΠΎΠ»Π΅Π΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° сообщСний Π² сСкунду Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Π½Π° запись ΠΏΡ€ΠΈ объСмС сообщСний 1 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚), достаточно Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Π² ΠΏΡ€ΠΎΠ΄Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌΠΈ компаниями. ΠšΡ€ΠΎΠΌΠ΅ этого, Kafka ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ нСсколько ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… коммСрчСских ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ (ΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Confluent вСрсиСй), Π° Ρ‚Π°ΠΊΠΆΠ΅ Kafka ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΡ‚ΡƒΡŽ экосистСму.

ΠžΠ±Π·ΠΎΡ€ Kafka

ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Ρ‚ΡŒ, сразу ΠΏΠΎΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ β€” Β«Kafka: The Definitive GuideΒ» (Π΅ΡΡ‚ΡŒ ΠΈ Π² русском ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅, Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠΌΠ°ΡŽΡ‚ ΠΌΠΎΠ·Π³). Π’ Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ для Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ понимания Kafka ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС. Π‘Π°ΠΌΠ° докумСнтация ΠΎΡ‚ Apache ΠΈ Π±Π»ΠΎΠ³ ΠΎΡ‚ Confluent Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ написаны ΠΈ Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ.

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ устроСна Kafka с высоты ΠΏΡ‚ΠΈΡ‡ΡŒΠ΅Π³ΠΎ ΠΏΠΎΠ»Π΅Ρ‚Π°. Базовая топология Kafka состоит ΠΈΠ· producer, consumer, broker ΠΈ zookeeper.

Broker

Kafka ΠΈ микросСрвисы: ΠΎΠ±Π·ΠΎΡ€

Π—Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ (broker). ВсС Π΄Π°Π½Π½Ρ‹Π΅ хранятся Π² Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΌΠ°Π»ΠΎ Π·Π½Π°Π΅Ρ‚ ΠΏΡ€ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ· сСбя ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚, ΠΈ ΠΊΠ°ΠΊΠΎΠ²Π° ΠΈΡ… структура.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ логичСский Ρ‚ΠΈΠΏ событий ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ находится Π² своСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ‚ΠΎΠΏΠΈΠΊΠ΅ (topic). НапримСр, событиС создания объявлСния ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² Ρ‚ΠΎΠΏΠΈΠΊ item.created, Π° событиС Π΅Π³ΠΎ измСнСния β€” Π² item.changed. Π’ΠΎΠΏΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ классификаторы событий. На ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚ΠΎΠΏΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠ°ΠΊ:

  • объСм Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ/ΠΈΠ»ΠΈ ΠΈΡ… возраст (retention.bytes, retention.ms);
  • Ρ„Π°ΠΊΡ‚ΠΎΡ€ избыточности Π΄Π°Π½Π½Ρ‹Ρ… (replication factor);
  • ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния (max.message.bytes);
  • минимальноС число согласованных Ρ€Π΅ΠΏΠ»ΠΈΠΊ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π² Ρ‚ΠΎΠΏΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ (min.insync.replicas);
  • Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ провСсти failover Π½Π° Π½Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΎΡ‚ΡΡ‚Π°ΡŽΡ‰ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ с ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… (unclean.leader.election.enable);
  • ΠΈ Π΅Ρ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… (https://kafka.apache.org/documentation/#topicconfigs).

Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΎΠΏΠΈΠΊ разбиваСтся Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ (partition). ИмСнно Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ события. Если Π² кластСрС Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Ρ‚ΠΎ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ распрСдСлСны ΠΏΠΎ всСм Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ (насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ), Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½Π° запись ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π² ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΎΠΏΠΈΠΊ сразу Π½Π° нСсколько Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ².

На дискС Π΄Π°Π½Π½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ хранятся Π² Π²ΠΈΠ΄Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ² сСгмСнтов, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠΌΡƒ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Ρƒ (контролируСтся Ρ‡Π΅Ρ€Π΅Π· log.segment.bytes). ВаТная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ (ΠΏΡ€ΠΈ срабатывании retention) происходит ΠΊΠ°ΠΊ Ρ€Π°Π· сСгмСнтами (нСльзя ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ событиС ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π»Ρ‹ΠΉ сСгмСнт, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ).

Zookeeper

Zookeeper выполняСт Ρ€ΠΎΠ»ΡŒ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°. ИмСнно ΠΎΠ½ способСн ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΆΠΈΠ²Ρ‹ Π»ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ (ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° это Π³Π»Π°Π·Π°ΠΌΠΈ zookeeper ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π΅Ρ€Π΅Π· zookeeper-shell ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ls /brokers/ids), ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² являСтся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ (get /controller), находятся Π»ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² синхронном состоянии со своими Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌΠΈ (get /brokers/topics/topic_name/partitions/partition_number/state). Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ zookeeper спСрва ΠΏΠΎΠΉΠ΄ΡƒΡ‚ producer ΠΈ consumer, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΎΠΏΠΈΠΊΠΈ ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ хранятся. Π’ случаях, ΠΊΠΎΠ³Π΄Π° для Ρ‚ΠΎΠΏΠΈΠΊΠ° Π·Π°Π΄Π°Π½ replication factor большС 1, zookeeper ΡƒΠΊΠ°ΠΆΠ΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈΠ΄Π΅Ρ€Π°ΠΌΠΈ (Π² Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ запись ΠΈ ΠΈΠ· Π½ΠΈΡ… ΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅). Π’ случаС падСния Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² zookeeper Π±ΡƒΠ΄Π΅Ρ‚ записана информация ΠΎ Π½ΠΎΠ²Ρ‹Ρ… Π»ΠΈΠ΄Π΅Ρ€-партициях (с вСрсии 1.1.0 асинхронно, ΠΈ это Π²Π°ΠΆΠ½ΠΎ).

Π’ Π±ΠΎΠ»Π΅Π΅ старых вСрсиях Kafka zookeeper ΠΎΡ‚Π²Π΅Ρ‡Π°Π» ΠΈ Π·Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ оффсСтов, Π½ΠΎ сСйчас ΠΎΠ½ΠΈ хранятся Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ Ρ‚ΠΎΠΏΠΈΠΊΠ΅ __consumer_offsets Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ (хотя Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ zookeeper для этих Ρ†Π΅Π»Π΅ΠΉ).

Π‘Π°ΠΌΡ‹ΠΌ простым способом ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ваши Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Ρ‹ΠΊΠ²Ρƒ являСтся ΠΊΠ°ΠΊ Ρ€Π°Π· потСря ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ с zookeeper. Π’ Ρ‚Π°ΠΊΠΎΠΌ сцСнарии ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΎΡ‚ΠΊΡƒΠ΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ слоТно.

Producer

Producer β€” это Ρ‡Π°Ρ‰Π΅ всСго сСрвис, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ запись Π΄Π°Π½Π½Ρ‹Ρ… Π² Apache Kafka. Producer Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ topic, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π΅Π³ΠΎ тСматичСскиС сообщСния, ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² Π½Π΅Π³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. НапримСр, producer’ом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сСрвис объявлСний. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π² тСматичСскиС Ρ‚ΠΎΠΏΠΈΠΊΠΈ Ρ‚Π°ΠΊΠΈΠ΅ события, ΠΊΠ°ΠΊ «объявлСниС создано», «объявлСниС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎΒ», «объявлСниС ΡƒΠ΄Π°Π»Π΅Π½ΠΎΒ» ΠΈ Ρ‚.Π΄. КаТдоС событиС ΠΏΡ€ΠΈ этом прСдставляСт собой ΠΏΠ°Ρ€Ρƒ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС события Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ партициям Ρ‚ΠΎΠΏΠΈΠΊΠ° round-robin`ΠΎΠΌ, Ссли ΠΊΠ»ΡŽΡ‡ Π½Π΅ Π·Π°Π΄Π°Π½ (тСряя ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ), ΠΈ Ρ‡Π΅Ρ€Π΅Π· MurmurHash (ΠΊΠ»ΡŽΡ‡), Ссли ΠΊΠ»ΡŽΡ‡ присутствуСт (ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ).

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

Consumer

Kafka ΠΈ микросСрвисы: ΠΎΠ±Π·ΠΎΡ€

Consumer ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Apache Kafka. Если Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ Π²Ρ‹ΡˆΠ΅, consumer’ом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сСрвис ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎΡ‚ сСрвис Π±ΡƒΠ΄Π΅Ρ‚ подписан Π½Π° Ρ‚ΠΎΠΏΠΈΠΊ сСрвиса объявлСний, ΠΈ ΠΏΡ€ΠΈ появлСнии Π½ΠΎΠ²ΠΎΠ³ΠΎ объявлСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° соотвСтствиС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌ.

Apache Kafka Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚, ΠΊΠ°ΠΊΠΈΠ΅ послСдниС события ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» consumer (для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ слуТСбный Ρ‚ΠΎΠΏΠΈΠΊ __consumer__offsets), Ρ‚Π΅ΠΌ самым гарантируя, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ consumer Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ сообщСниС Π΄Π²Π°ΠΆΠ΄Ρ‹. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ enable.auto.commit = true ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡŽ полоТСния consumer’а Π² Ρ‚ΠΎΠΏΠΈΠΊΠ΅ Π½Π° ΠΎΡ‚ΠΊΡƒΠΏ ΠšΠ°Ρ„ΠΊΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Π’ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½ ΠΊΠΎΠ΄Π΅ Ρ‡Π°Ρ‰Π΅ всСго ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡŒΡŽΠΌΠ΅Ρ€Π° контролируСтся Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ (Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ управляСт ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ commit ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ³ΠΎ события).

Π’ Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ consumer нСдостаточно (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ‚ΠΎΠΊ Π½ΠΎΠ²Ρ‹Ρ… событий ΠΎΡ‡Π΅Π½ΡŒ большой), ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ нСсколько consumer, связав ΠΈΡ… вмСстС Π² consumer group. Consumer group логичСски прСдставляСт ΠΈΠ· сСбя Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ consumer, Π½ΠΎ с распрСдСлСниСм Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ участниками Π³Ρ€ΡƒΠΏΠΏΡ‹. Π­Ρ‚ΠΎ позволяСт ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· участников Π²Π·ΡΡ‚ΡŒ свою долю сообщСний, Ρ‚Π΅ΠΌ самым ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ чтСния.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования

Kafka ΠΈ микросСрвисы: ΠΎΠ±Π·ΠΎΡ€

Π—Π΄Π΅ΡΡŒ Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ тСкста, просто подСлюсь ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ. ВСстированиС ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π° 3 физичСских ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… (12 CPU, 384GB RAM, 15k SAS DISK, 10GBit/s Net), Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ ΠΈ zookeeper Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ Π² lxc.

ВСстированиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

Π’ Ρ…ΠΎΠ΄Π΅ тСстирования Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

  • Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ записи сообщСний Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1KB ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ 9 producer’ами β€” 1300000 событий Π² сСкунду.
  • Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ чтСния сообщСний Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 1KB ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ 9 consumer’ами β€” 1500000 событий Π² сСкунду.

ВСстированиС отказоустойчивости

Π’ Ρ…ΠΎΠ΄Π΅ тСстирования Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ (3 Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, 3 zookeeper).

  • ΠΠ΅ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ остановкС ΠΈΠ»ΠΈ нСдоступности кластСра. Π Π°Π±ΠΎΡ‚Π° продолТаСтся Π² ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅, Π½ΠΎ Π½Π° ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ приходится большая Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ°.
  • ΠΠ΅ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² Π² случаС кластСра ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² ΠΈ min.isr = 2 ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСдоступности кластСра Π½Π° запись, Π½ΠΎ доступности Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. Π’ случаС, Ссли min.isr = 1, кластСр ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ доступСн ΠΈ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΈ Π½Π° запись. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΡ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ ΠΊ высокой сохранности Π΄Π°Π½Π½Ρ‹Ρ….
  • ΠΠ΅ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· сСрвСров Zookeeper Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ остановкС ΠΈΠ»ΠΈ нСдоступности кластСра. Π Π°Π±ΠΎΡ‚Π° продолТаСтся Π² ΡˆΡ‚Π°Ρ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.
  • ΠΠ΅ΡˆΡ‚Π°Ρ‚Π½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… сСрвСров Zookeeper ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ нСдоступности кластСра Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° восстановлСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· сСрвСров Zookeeper. Π”Π°Π½Π½ΠΎΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Π΅Ρ€Π½ΠΎ для кластСра Zookeeper ΠΈΠ· 3 сСрвСров. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ послС исслСдований Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ кластСр Zookeeper Π΄ΠΎ 5 сСрвСров для увСличСния отказоустойчивости.

Kafka as a service

Kafka ΠΈ микросСрвисы: ΠΎΠ±Π·ΠΎΡ€

ΠœΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ Kafka β€” отличная тСхнология, которая позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ Π·Π°Π΄Π°Ρ‡Ρƒ (Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° сообщСний). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ сСрвисам Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Kafka ΠΈ Π·Π°ΠΊΡ€Ρ‹Π»ΠΈ Π΅Π΅ свСрху сСрвисом data-bus. Π—Π°Ρ‡Π΅ΠΌ ΠΌΡ‹ это сдСлали? На самом Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Ρ… нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½.

  • Data-bus Π·Π°Π±Ρ€Π°Π» Π½Π° сСбя всС Π·Π°Π΄Π°Ρ‡ΠΈ, связанныС с ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ с Kafka (рСализация ΠΈ настройка consumer’ов ΠΈ producer’ов, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³, Π°Π»Π΅Ρ€Ρ‚ΠΈΠ½Π³, Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ‚.Π΄.). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, интСграция с Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ сообщСний происходит максимально просто.

  • Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ языка ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Kafka.

  • Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π΄Ρ€ΡƒΠ³ΠΈΠΌ сСрвисам Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ слоя хранСния. ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ помСняСм Kafka Π½Π° Pulsar, ΠΈ ΠΏΡ€ΠΈ этом Π½ΠΈΠΊΡ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ (всС сСрвисы Π·Π½Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ API data-bus).

  • Data-bus взял Π½Π° сСбя Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ схСм событий.

  • Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ data-bus Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° аутСнтификация.

  • Под ΠΏΡ€ΠΈΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ data-bus ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±Π΅Π· Π΄Π°ΡƒΠ½Ρ‚Π°ΠΉΠΌΠ°, Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ вСрсии Kafka, Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ вСсти ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ producer’ов, consumer’ов, Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² ΠΈ Ρ‚.Π΄.

  • Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°ΠΌ Ρ„ΠΈΡ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² Kafka (Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°ΡƒΠ΄ΠΈΡ‚ Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ², ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π·Π° аномалиями Π² кластСрС, созданиС DLQ ΠΈ Ρ‚.Π΄.).

  • Data-bus позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ failover Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ для всСх сСрвисов.

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ для Π½Π°Ρ‡Π°Π»Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ событий Π² Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний достаточно ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π² ΠΊΠΎΠ΄ своСго сСрвиса. Π­Ρ‚ΠΎ всё. Π£ вас появляСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ, Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΉ строчкой ΠΊΠΎΠ΄Π°. Вся рСализация скрыта ΠΎΡ‚ вас, Π½Π°Ρ€ΡƒΠΆΡƒ Ρ‚ΠΎΡ€Ρ‡ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсколько Ρ€ΡƒΡ‡Π΅ΠΊ Ρ‚ΠΈΠΏΠ° Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±Π°Ρ‚Ρ‡Π°. Под ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ сСрвис data-bus ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² Kubernetes Π½ΡƒΠΆΠ½ΠΎΠ΅ количСство инстансов producer’ов ΠΈ consumer’ов ΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ ΠΈΠΌ Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, Π½ΠΎ всС это для вашСго сСрвиса ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, сСрСбряной ΠΏΡƒΠ»ΠΈ Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚, ΠΈ Ρƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ свои ограничСния.

  • Data-bus Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ своими силами, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ сторонних Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ.
  • Data-bus ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ число взаимодСйствий ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвисами ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ сообщСний, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ сниТСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π³ΠΎΠ»ΠΎΠΉ Kafka.
  • НС всё ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ просто ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚ сСрвисов, Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» KSQL ΠΈΠ»ΠΈ Kafka Streams Π² data-bus Π½Π°ΠΌ Π½Π΅ хочСтся, поэтому ΠΈΠ½ΠΎΠ³Π΄Π° приходится Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ сСрвисам Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Π’ нашСм случаС ΠΏΠ»ΡŽΡΡ‹ пСрСвСсили минусы, ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΊΡ€Ρ‹Ρ‚ΡŒ Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ сСрвисом ΠΎΠΏΡ€Π°Π²Π΄Π°Π»ΠΎΡΡŒ. Π—Π° Π³ΠΎΠ΄ эксплуатации Ρƒ нас Π½Π΅ Π±Ρ‹Π»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… Π°Π²Π°Ρ€ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ.

P.S. Бпасибо ΠΌΠΎΠ΅ΠΉ Π΄Π΅Π²ΡƒΡˆΠΊΠ΅, Π•ΠΊΠ°Ρ‚Π΅Ρ€ΠΈΠ½Π΅ ОбаляСвой, Π·Π° ΠΊΡ€ΡƒΡ‚Ρ‹Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ ΠΊ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅. Если ΠΎΠ½ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΈΡΡŒ, Ρ‚ΡƒΡ‚ найдётся Π΅Ρ‰Ρ‘ большС ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΉ.

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