RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ

Π’ ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрСли ΠΊΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡŽ RabbitMQ для обСспСчСния отказоустойчивости ΠΈ высокой доступности. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ покопаСмся Π² Apache Kafka.

Π—Π΄Π΅ΡΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ являСтся Ρ€Π°Π·Π΄Π΅Π» (partition). Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΎΠΏΠΈΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΅ΡΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€ с Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°ΠΌΠΈ ΠΈΠ»ΠΈ Π±Π΅Π· Π½ΠΈΡ…. ΠŸΡ€ΠΈ создании Ρ‚ΠΎΠΏΠΈΠΊΠ° указываСтся количСство Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΈ коэффициСнт Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ: ΠΎΠ΄ΠΈΠ½ Π»ΠΈΠ΄Π΅Ρ€ ΠΈ Π΄Π²Π° Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 1. Π§Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π΄Π΅Π»Π° распрСдСлСны ΠΌΠ΅ΠΆΠ΄Ρƒ трСмя Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ

ВсС запросы Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π»ΠΈΠ΄Π΅Ρ€Ρƒ. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ пСриодичСски ΠΏΠΎΡΡ‹Π»Π°ΡŽΡ‚ Π»ΠΈΠ΄Π΅Ρ€Ρƒ запросы Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ послСдних сообщСний. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΊ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°ΠΌ, послСдниС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для избыточности ΠΈ отказоустойчивости.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ

Π‘Π±ΠΎΠΉ Ρ€Π°Π·Π΄Π΅Π»Π°

Когда отваливаСтся Π±Ρ€ΠΎΠΊΠ΅Ρ€, часто выходят ΠΈΠ· строя Π»ΠΈΠ΄Π΅Ρ€Ρ‹ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ². Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ становится Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. На самом Π΄Π΅Π»Π΅ это Π½Π΅ всСгда Ρ‚Π°ΠΊ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ влияСт Π΅Ρ‰Π΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ синхронизации: Π΅ΡΡ‚ΡŒ Π»ΠΈ синхронизированныС Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹, Π° Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ Π»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½Π΅ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ. Но ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ.

Из сСти ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ 3 β€” ΠΈ для Ρ€Π°Π·Π΄Π΅Π»Π° 2 избираСтся Π½ΠΎΠ²Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 2.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 2. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚, ΠΈ Π΅Π³ΠΎ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 2 избираСтся Π½ΠΎΠ²Ρ‹ΠΌ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π° 2

Π—Π°Ρ‚Π΅ΠΌ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ 1 ΠΈ Ρ€Π°Π·Π΄Π΅Π» 1 Ρ‚ΠΎΠΆΠ΅ тСряСт своСго Π»ΠΈΠ΄Π΅Ρ€Π°, Ρ€ΠΎΠ»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 2.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 3. ΠžΡΡ‚Π°Π»ΡΡ ΠΎΠ΄ΠΈΠ½ Π±Ρ€ΠΎΠΊΠ΅Ρ€. ВсС Π»ΠΈΠ΄Π΅Ρ€Ρ‹ находятся Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ

Когда Π±Ρ€ΠΎΠΊΠ΅Ρ€ 1 возвращаСтся Π² ΡΠ΅Ρ‚ΡŒ, Ρ‚ΠΎ добавляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², обСспСчивая Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ€Π°Π·Π΄Π΅Π»Ρƒ. Но всС Π»ΠΈΠ΄Π΅Ρ€Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 2.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 4. Π›ΠΈΠ΄Π΅Ρ€Ρ‹ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 2

Когда поднимаСтся Π±Ρ€ΠΎΠΊΠ΅Ρ€ 3, ΠΌΡ‹ возвращаСмся ΠΊ Ρ‚Ρ€Π΅ΠΌ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ Π½Π° Ρ€Π°Π·Π΄Π΅Π». Но всС Π»ΠΈΠ΄Π΅Ρ€Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 2.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 5. НСсбалансированноС Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² послС восстановлСния Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² 1 ΠΈ 3

Π£ Kafka Π΅ΡΡ‚ΡŒ инструмСнт для Π±ΠΎΠ»Π΅Π΅ качСствСнной пСрСбалансировки Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ², Ρ‡Π΅ΠΌ Ρƒ RabbitMQ. Π’Π°ΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сторонний ΠΏΠ»Π°Π³ΠΈΠ½ ΠΈΠ»ΠΈ скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСнял ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π·Π° счСт сниТСния избыточности Π²ΠΎ врСмя ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠΌΠΈΡ€ΠΈΡ‚ΡŒΡΡ с Π½Π΅Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ Π²ΠΎ врСмя синхронизации.

Π£ Kafka Π΅ΡΡ‚ΡŒ концСпция Β«ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊΒ» Π½Π° Ρ€ΠΎΠ»ΡŒ Π»ΠΈΠ΄Π΅Ρ€Π°. Когда ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Ρ‚ΠΎΠΏΠΈΠΊΠ°, Kafka пытаСтся Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² ΠΏΠΎ ΡƒΠ·Π»Π°ΠΌ ΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ этих ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ·-Π·Π° ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сСрвСров, сбоСв ΠΈ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ связности Π»ΠΈΠ΄Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»Π°Ρ…, ΠΊΠ°ΠΊ Π² Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΌ случаС.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ это, Kafka ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π΄Π²Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°:

  • ΠžΠΏΡ†ΠΈΡ auto.leader.rebalance.enable=true позволяСт ΡƒΠ·Π»Ρƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° автоматичСски ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ ΠΈ Ρ‚Π΅ΠΌ самым Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ΅ распрСдСлСниС.
  • Администратор ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ скрипт kafka-preferred-replica-election.sh для пСрСназначСния Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 6. Π Π΅ΠΏΠ»ΠΈΠΊΠΈ послС пСрСбалансировки

Π­Ρ‚ΠΎ Π±Ρ‹Π»Π° упрощСнная вСрсия сбоя, Π½ΠΎ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТна, хотя Π½ΠΈΡ‡Π΅Π³ΠΎ слишком слоТного здСсь Π½Π΅Ρ‚. ВсС сводится ΠΊ синхронизированным Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ (In-Sync Replicas, ISR).

Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ (ISR)

ISR β€” это Π½Π°Π±ΠΎΡ€ Ρ€Π΅ΠΏΠ»ΠΈΠΊ Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считаСтся «синхронизированным» (in-sync). Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€, Π° Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ считаСтся синхронизированным, Ссли ΠΎΠ½ сдСлал Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠΏΠΈΠΈ всСх сообщСний Π»ΠΈΠ΄Π΅Ρ€Π° Π΄ΠΎ истСчСния ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° replica.lag.time.max.ms.

Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ удаляСтся ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ISR, Ссли ΠΎΠ½:

  • Π½Π΅ сдСлал запрос Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» replica.lag.time.max.ms (считаСтся ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΌ)
  • Π½Π΅ успСл ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» replica.lag.time.max.ms (считаСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ)

Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ replica.fetch.wait.max.ms, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ составляСт 500 мс.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ†Π΅Π»ΡŒ ISR, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° подтвСрТдСния ΠΎΡ‚ производитСля (producer) ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сцСнарии ΠΎΡ‚ΠΊΠ°Π·Π°. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€ отправляСт ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅:

  • acks=0, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ отправляСтся
  • acks=1, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ отправляСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π»ΠΈΠ΄Π΅Ρ€ записал сообщСниС Π² свой Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠ³
  • acks=all, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ отправляСтся послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π² ISR записали сообщСниС Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΎΠ³ΠΈ

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Kafka, Ссли ISR сохранил сообщСниС, происходит Π΅Π³ΠΎ Β«ΠΊΠΎΠΌΠΌΠΈΡ‚Β». Acks=all β€” самый бСзопасный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Π½ΠΎ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°. Рассмотрим Π΄Π²Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΎΡ‚ΠΊΠ°Π·Π° ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ ‘acks’ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ ISR.

Acks=1 ΠΈ ISR

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π»ΠΈΠ΄Π΅Ρ€ Π½Π΅ ΠΆΠ΄Π΅Ρ‚ сохранСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сообщСния ΠΎΡ‚ всСх Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², Ρ‚ΠΎ ΠΏΡ€ΠΈ сбоС Π»ΠΈΠ΄Π΅Ρ€Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° потСря Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ нСсинхронизированному Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ настройкой unclean.leader.election.enable.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ производитСля установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ acks=1. Π Π°Π·Π΄Π΅Π» распрСдСлСн ΠΏΠΎ всСм Ρ‚Ρ€Π΅ΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌ. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 отстаСт, ΠΎΠ½ синхронизировался с Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ восСмь сСкунд Π½Π°Π·Π°Π΄ ΠΈ сСйчас отстаСт Π½Π° 7456 сообщСний. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1 отстал всСго Π½Π° ΠΎΠ΄Π½Ρƒ сСкунду. Наш ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ отправляСт сообщСниС ΠΈ быстро ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ack, Π±Π΅Π· ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄Π° Π½Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Ρ… Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»ΠΈΠ΄Π΅Ρ€ Π½Π΅ ΠΆΠ΄Π΅Ρ‚.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 7. ISR с трСмя Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌΠΈ

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 2 Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈΠ· строя, ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ соСдинСния. ПослС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° лидСрства ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 1 ΠΌΡ‹ тСряСм 123 сообщСния. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 1 Π²Ρ…ΠΎΠ΄ΠΈΠ» Π² ISR, Π½ΠΎ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ синхронизировался с Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΎΡ‚ ΡƒΠΏΠ°Π».

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 8. ΠŸΡ€ΠΈ сбоС Ρ‚Π΅Ρ€ΡΡŽΡ‚ΡΡ сообщСния

Π’ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ bootstrap.servers Ρƒ производитСля пСрСчислСно нСсколько Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ², ΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, ΠΊΡ‚ΠΎ стал Π½ΠΎΠ²Ρ‹ΠΌ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π°. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ устанавливаСт соСдинСниС с Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ 1 ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сообщСния.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 9. ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСний возобновляСтся послС ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²Π°

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 отстаСт Π΅Ρ‰Π΅ большС. Он Π΄Π΅Π»Π°Π΅Ρ‚ запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ связано с ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ сСтСвым соСдинСниСм ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ, ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ хранСния ΠΈ Ρ‚. Π΄. Он удаляСтся ΠΈΠ· ISR. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ISR состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ β€” Π»ΠΈΠ΄Π΅Ρ€Π°! ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сообщСния ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ подтвСрТдСния.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 10. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 3 удаляСтся ΠΈΠ· ISR

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1 ΠΏΠ°Π΄Π°Π΅Ρ‚, ΠΈ Ρ€ΠΎΠ»ΡŒ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 3 с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ 15286 сообщСний! ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Π»ΠΈΠ΄Π΅Ρ€Ρƒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ISR Π±Ρ‹Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·-Π·Π° настройки unclean.leader.election.enable=true. Если ΠΎΠ½Π° установлСна Π² false, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π», Π° всС запросы чтСния ΠΈ записи Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½Ρ‹. Π’ этом случаС ΠΌΡ‹ ΠΆΠ΄Π΅ΠΌ возвращСния Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° 1 с Π΅Π³ΠΎ Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅, которая вновь Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ Π½Π° сСбя лидСрство.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 11. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1 ΠΏΠ°Π΄Π°Π΅Ρ‚. ΠŸΡ€ΠΈ сбоС тСряСтся большоС количСство сообщСний

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ устанавливаСт соСдинСниС с послСдним Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ ΠΈ Π²ΠΈΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π»ΠΈΠ΄Π΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»Π°. Он Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ сообщСния Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 3.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 12. ПослС ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π²Π° сообщСния снова ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π΄Π΅Π» 0

ΠœΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΈΡ… ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ Π½Π° установку Π½ΠΎΠ²Ρ‹Ρ… соСдинСний ΠΈ поиск Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ постоянно отправлял сообщСния. Вакая конфигурация обСспСчиваСт Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π·Π° счСт согласованности (бСзопасности Π΄Π°Π½Π½Ρ‹Ρ…). Kafka потСрял тысячи сообщСний, Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π» ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ записи.

Acks=all ΠΈ ISR

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ этот сцСнарий Π΅Ρ‰Π΅ Ρ€Π°Π·, Π½ΠΎ с acks=all. Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° 3 Π² срСднСм Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ сСкунды. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ отправляСт сообщСниС с acks=all, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ быстрый ΠΎΡ‚Π²Π΅Ρ‚. Π›ΠΈΠ΄Π΅Ρ€ ΠΆΠ΄Π΅Ρ‚, ΠΏΠΎΠΊΠ° сообщСниС сохранят всС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π² ISR.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 13. ISR с трСмя Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌΠΈ. Одна Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ΅ записи

ПослС Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… сСкунд Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€ 2 отправляСт ack. ВсС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 14. ВсС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ сообщСния ΠΈ отправляСтся ack

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ отстаСт Π΅Ρ‰Π΅ большС ΠΈ удаляСтся ΠΈΠ· ISR. Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ISR Π½Π΅ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 2 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΆΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° 1, Π° Ρƒ Π½Π΅Π³ΠΎ срСдний Π»Π°Π³ 500 мс.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 15. Π Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 3 удаляСтся ΠΈΠ· ISR

Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ 2, ΠΈ лидСрство ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 1 Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 16. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 2 ΠΏΠ°Π΄Π°Π΅Ρ‚

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ Π΅ΠΌΡƒ сообщСния. Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π΅Ρ‰Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, вСдь Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ISR состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ! ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ опция acks=all Π½Π΅ добавляСт избыточности.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 17. Π Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 1 Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя лидСрство Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний

Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ°Π΄Π°Π΅Ρ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ 1, ΠΈ лидСрство ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 3 с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ 14238 сообщСний!

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 18. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 1 ΡƒΠΌΠΈΡ€Π°Π΅Ρ‚, Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ лидСрства с настройкой unclean ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ±ΡˆΠΈΡ€Π½ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

ΠœΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π½Π΅ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ unclean.leader.election.enable Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ false. Настройка acks=all с unclean.leader.election.enable=true обСспСчиваСт Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ Π΄Π°Π½Π½Ρ‹Ρ…. Но, ΠΊΠ°ΠΊ Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΌΡ‹ всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ сообщСния.

Но Ρ‡Ρ‚ΠΎ, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…? МоТно ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ unclean.leader.election.enable = false, Π½ΠΎ это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ нас ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π»ΠΈΠ΄Π΅Ρ€ ΡƒΠΏΠ°Π» ТСстко ΠΈ унСс с собой Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ сообщСния ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ потСряны, плюс тСряСтся Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΠΊΠ° администратор Π½Π΅ восстановит ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ.

Π›ΡƒΡ‡ΡˆΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ всСх сообщСний, Π° Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ записи. Π’ΠΎΠ³Π΄Π° хотя Π±Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° потСря Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… сбоях.

Acks=all, min.insync.replicas ΠΈ ISR

Π‘ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΎΠΏΠΈΠΊΠ° min.insync.replicas ΠΌΡ‹ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности Π΄Π°Π½Π½Ρ‹Ρ…. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΅Ρ‰Π΅ Ρ€Π°Π· пройдСмся ΠΏΠΎ послСднСй части ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ сцСнария, Π½ΠΎ Π½Π° этот Ρ€Π°Π· с min.insync.replicas=2.

Π˜Ρ‚Π°ΠΊ, Ρƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° 2 Π΅ΡΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, Π° Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 3 ΡƒΠ΄Π°Π»Π΅Π½ ΠΈΠ· ISR.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 19. ISR ΠΈΠ· Π΄Π²ΡƒΡ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 2 ΠΏΠ°Π΄Π°Π΅Ρ‚, Π° лидСрство ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 1 Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний. Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ISR состоит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ. Π­Ρ‚ΠΎ Π½Π΅ соотвСтствуСт ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ числу для получСния записСй, ΠΈ поэтому Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π½Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ записи ошибкой NotEnoughReplicas.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 20. Число ISR Π½Π° ΠΎΠ΄ΠΈΠ½ Π½ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² min.insync.replicas

Π­Ρ‚Π° конфигурация ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π΄ΠΈ согласованности. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ сообщСниС, ΠΌΡ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ записываСтся ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π° Π΄Π²Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Π—Π΄Π΅ΡΡŒ потСря сообщСний Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ сбоя Π΄Π²ΡƒΡ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ Π² ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», ΠΏΠΎΠΊΠ° сообщСниС Π½Π΅ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ маловСроятно. Но Ссли Π²Ρ‹ супСрпараноик, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ коэффициСнт Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ 5, Π° min.insync.replicas Π½Π° 3. Π’ΡƒΡ‚ сразу Ρ‚Ρ€ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠΏΠ°ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ запись! ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π° Ρ‚Π°ΠΊΡƒΡŽ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ Π·Π°ΠΏΠ»Π°Ρ‚ΠΈΡ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ.

Когда Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для бСзопасности Π΄Π°Π½Π½Ρ‹Ρ…

Как ΠΈ Π² случаС с RabbitMQ, ΠΈΠ½ΠΎΠ³Π΄Π° Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для бСзопасности Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ ΠΎ Ρ‡Π΅ΠΌ:

  • ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€ просто Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π° Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π°Ρ слуТба ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΠΎΠ·ΠΆΠ΅?
  • ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сообщСниС локально ΠΈΠ»ΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΠΎΠ·ΠΆΠ΅?

Если ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, Ρ‚ΠΎ оптимизация доступности ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹ потСряСтС мСньшС Π΄Π°Π½Π½Ρ‹Ρ…, Ссли Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ вмСсто ΠΎΡ‚ΠΊΠ°Π·Π° ΠΎΡ‚ записи. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, всС сводится ΠΊ поиску баланса, Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ситуации.

Бмысл ISR

Набор ISR позволяСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ. НапримСр, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² условиях сбоя Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊ, минимизируя влияниС ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ.

ΠœΡ‹ сами Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ replica.lag.time.max.ms Π² соотвСтствии со своими потрСбностями. По сути этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, ΠΊΠ°ΠΊΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ acks=all. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” Π΄Π΅ΡΡΡ‚ΡŒ сСкунд. Если для вас это слишком Π΄ΠΎΠ»Π³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ. Π’ΠΎΠ³Π΄Π° вырастСт частота ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ISR, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡Π°Ρ‰Π΅ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ.

Π’ RabbitMQ просто Π½Π°Π±ΠΎΡ€ Π·Π΅Ρ€ΠΊΠ°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠœΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ Π·Π΅Ρ€ΠΊΠ°Π»Π° привносят Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ, Π° ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠ° ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹Ρ… Π·Π΅Ρ€ΠΊΠ°Π» ΠΌΠΎΠΆΠ½ΠΎ ΠΆΠ΄Π°Ρ‚ΡŒ Π΄ΠΎ истСчСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° (net tick). ISR β€” интСрСсный способ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. Но ΠΌΡ‹ рискуСм ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ISR ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого риска, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ настройку min.insync.replicas.

Гарантия ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ²

Π’ настройках bootstrap.servers производитСля ΠΈ потрСбитСля ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° остаСтся нСсколько запасных, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ соСдинСниС. Π­Ρ‚ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈΠ΄Π΅Ρ€Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², Π° просто ΠΏΠ»Π°Ρ†Π΄Π°Ρ€ΠΌ для для Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΈΡ…, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡƒΠ·Π»Π΅ размСщаСтся Π»ΠΈΠ΄Π΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»Π° для чтСния/записи.

Π’ RabbitMQ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΡƒΠ·Π»Ρƒ, Π° внутрСнняя ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ отправляСт запрос ΠΊΡƒΠ΄Π° Π½Π°Π΄ΠΎ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ RabbitMQ балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. Kafka Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈΡΡŒ ΠΊ ΡƒΠ·Π»Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ размСщаСтся Π»ΠΈΠ΄Π΅Ρ€ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°. Π’ Ρ‚Π°ΠΊΠΎΠΉ ситуации балансировщик Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π΅ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ. Бписок bootstrap.servers критичСски Π²Π°ΠΆΠ΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΡƒΠ·Π»Π°ΠΌ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… послС сбоя.

АрхитСктура консСнсуса Kafka

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ Π½Π΅ рассмотрСли, ΠΊΠ°ΠΊ кластСр ΡƒΠ·Π½Π°Π΅Ρ‚ ΠΎ ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΈ ΠΊΠ°ΠΊ выбираСтся Π½ΠΎΠ²Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Kafka Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с сСтСвыми Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ, сначала Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ консСнсуса.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ кластСр Kafka развСртываСтся вмСстС с кластСром Zookeeper β€” это слуТба распрСдСлСнного консСнсуса, которая позволяСт систСмС Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ консСнсуса Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ состояния с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ согласованности Π½Π°Π΄ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒΡŽ. Для одобрСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния ΠΈ записи трСбуСтся согласиС Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΡƒΠ·Π»ΠΎΠ² Zookeeper.

Zookeeper Ρ…Ρ€Π°Π½ΠΈΡ‚ состояниС кластСра:

  • Бписок Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ², Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π»ΠΈΠ΄Π΅Ρ€Π°, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ.
  • Π§Π»Π΅Π½Ρ‹ кластСра. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΏΠΈΠ½Π³ΡƒΠ΅Ρ‚ Π² кластСр Zookeeper. Если Ρ‚ΠΎΡ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΈΠ½Π³ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚ΠΎ Zookeeper записываСт Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π² нСдоступныС.
  • Π’Ρ‹Π±ΠΎΡ€ основного ΠΈ запасного ΡƒΠ·Π»ΠΎΠ² для ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°.

Π£Π·Π΅Π» ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² Kafka, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΠ·Π±Ρ€Π°Π½ΠΈΠ΅ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² Ρ€Π΅ΠΏΠ»ΠΈΠΊ. Zookeeper отправляСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ увСдомлСния ΠΎ члСнствС Π² кластСрС ΠΈ измСнСниях Ρ‚ΠΎΠΏΠΈΠΊΠ°, ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² соотвСтствии с этими измСнСниями.

НапримСр, возьмСм Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΎΠΏΠΈΠΊ с Π΄Π΅ΡΡΡ‚ΡŒΡŽ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌΠΈ ΠΈ коэффициСнтом Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ 3. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°, ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€:

  • обновляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² Zookeeper ΠΎ ISR ΠΈ Π»ΠΈΠ΄Π΅Ρ€Π΅;
  • отправляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ LeaderAndISRCommand ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ этого Ρ€Π°Π·Π΄Π΅Π»Π°, информируя Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² ΠΎΠ± ISR ΠΈ Π»ΠΈΠ΄Π΅Ρ€Π΅.

Когда ΠΏΠ°Π΄Π°Π΅Ρ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ с Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ, Zookeeper отправляСт ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ, ΠΈ Ρ‚ΠΎΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ сначала обновляСт Zookeeper, Π° Π·Π°Ρ‚Π΅ΠΌ отправляСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ, увСдомляя ΠΈΡ… ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ лидСрства.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€ нСсСт ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Π½Π°Π±ΠΎΡ€ ISR. Настройка replica.lag.time.max.ms опрСдСляСт, ΠΊΡ‚ΠΎ Ρ‚ΡƒΠ΄Π° Π²ΠΎΠΉΠ΄Π΅Ρ‚. ΠŸΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ISR Π»ΠΈΠ΄Π΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Zookeeper Π½ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ.

Zookeeper всСгда ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ ΠΎ Π»ΡŽΠ±Ρ‹Ρ… измСнСниях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² случаС сбоя руководство ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΎ ΠΊ Π½ΠΎΠ²ΠΎΠΌΡƒ Π»ΠΈΠ΄Π΅Ρ€Ρƒ.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 21. ΠšΠΎΠ½ΡΠ΅Π½ΡΡƒΡ Kafka

ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ

ПониманиС Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ сцСнарии ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

Запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ, Log End Offset (LEO) ΠΈ Highwater Mark (HW)

ΠœΡ‹ рассмотрСли, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ пСриодичСски ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π»ΠΈΠ΄Π΅Ρ€Ρƒ запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ (fetch). Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π» ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ составляСт 500 мс. Π­Ρ‚ΠΎ отличаСтся ΠΎΡ‚ RabbitMQ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² RabbitMQ рСпликация инициируСтся Π½Π΅ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π° мастСром. ΠœΠ°ΡΡ‚Π΅Ρ€ ΠΏΡƒΡˆΠΈΡ‚ измСнСния Π½Π° Π·Π΅Ρ€ΠΊΠ°Π»Π°.

Π›ΠΈΠ΄Π΅Ρ€ ΠΈ всС Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ смСщСниС ΠΊΠΎΠ½Ρ†Π° Π»ΠΎΠ³Π° (Log End Offset, LEO) ΠΈ ΠΌΠ΅Ρ‚ΠΊΡƒ Highwater (HW). ΠžΡ‚ΠΌΠ΅Ρ‚ΠΊΠ° LEO Ρ…Ρ€Π°Π½ΠΈΡ‚ смСщСниС послСднСго сообщСния Π² локальной Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅, Π° HW β€” смСщСниС послСднСго ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ для статуса Β«ΠΊΠΎΠΌΠΌΠΈΡ‚Β» сообщСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сохранСно Π²ΠΎ всСх Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ… ISR. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ LEO ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‡ΡƒΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π΅ΠΆΠ°Π΅Ρ‚ HW.

Когда Π»ΠΈΠ΄Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСниС, ΠΎΠ½ сохраняСт Π΅Π³ΠΎ локально. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π΄Π΅Π»Π°Π΅Ρ‚ запрос Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² свой LEO. Π—Π°Ρ‚Π΅ΠΌ Π»ΠΈΠ΄Π΅Ρ€ отправляСт ΠΏΠ°ΠΊΠ΅Ρ‚ сообщСний, начиная с этого LEO, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ HW. Когда Π»ΠΈΠ΄Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ всС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ сохранили сообщСниС с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ смСщСниСм, ΠΎΠ½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ HW. Волько Π»ΠΈΠ΄Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ HW, ΠΈ Ρ‚Π°ΠΊ всС Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ ΡƒΠ·Π½Π°ΡŽΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΡ‚Π²Π΅Ρ‚Π°Ρ… Π½Π° свой запрос. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚ΡΡ‚Π°Π²Π°Ρ‚ΡŒ ΠΎΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΈ ΠΏΠΎ сообщСниям, ΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ знания HW. ΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ сообщСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ HW.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ «сохранСнный» (persisted) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ записанный Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π½Π΅ Π½Π° диск. Для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Kafka выполняСт ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° диск с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ. Π£ RabbitMQ Ρ‚ΠΎΠΆΠ΅ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», Π½ΠΎ ΠΎΠ½ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ мастСр ΠΈ всС Π·Π΅Ρ€ΠΊΠ°Π»Π° записали сообщСниС Π½Π° диск. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Kafka ΠΏΠΎ сообраТСниям ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ приняли Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ack, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сообщСниС записано Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Kafka Π΄Π΅Π»Π°Π΅Ρ‚ ставку Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ компСнсируСт риск краткосрочного хранСния ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… сообщСний Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² памяти.

Π‘Π±ΠΎΠΉ Π»ΠΈΠ΄Π΅Ρ€Π°

Когда ΠΏΠ°Π΄Π°Π΅Ρ‚ Π»ΠΈΠ΄Π΅Ρ€, Zookeeper увСдомляСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€, ΠΈ Ρ‚ΠΎΡ‚ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ Π»ΠΈΠ΄Π΅Ρ€Π°. Новый Π»ΠΈΠ΄Π΅Ρ€ устанавливаСт Π½ΠΎΠ²ΡƒΡŽ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΡƒ HW Π² соотвСтствии со своим LEO. Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΎΠ²ΠΎΠΌ Π»ΠΈΠ΄Π΅Ρ€Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹. Π’ зависимости ΠΎΡ‚ вСрсии Kafka, Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡƒΡ… сцСнариСв:

  1. УсСчёт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠ³ Π΄ΠΎ извСстного HW ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Π½ΠΎΠ²ΠΎΠΌΡƒ Π»ΠΈΠ΄Π΅Ρ€Ρƒ запрос Π½Π° сообщСния послС этой ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ.
  2. ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ Π»ΠΈΠ΄Π΅Ρ€Ρƒ запрос, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ HW Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅Π³ΠΎ избрания Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ усСчСт Π»ΠΎΠ³ Π΄ΠΎ этого смСщСния. Π—Π°Ρ‚Π΅ΠΌ Π½Π°Ρ‡Π½Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ пСриодичСскиС запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ, начиная с этого смСщСния.

Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΡƒΡ€Π΅Π·Π°Ρ‚ΡŒ Π»ΠΎΠ³ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • Когда происходит сбой Π»ΠΈΠ΄Π΅Ρ€Π°, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ISR, зарСгистрированный Π² Zookeeper, Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π±ΠΎΡ€Ρ‹ ΠΈ становится Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ. ВсС Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ Π² ISR, хотя ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ «синхронизированными», ΠΌΠΎΠ³Π»ΠΈ ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚ Π±Ρ‹Π²ΡˆΠ΅Π³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΊΠΎΠΏΠΈΠΈ всСх сообщСний. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΈΠ·Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π° Π½Π΅ самая Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ копия. Kafka Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°ΠΌΠΈ Π½Π΅Ρ‚ расхоТдСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ расхоТдСния, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΡΠ΅Ρ‡ΡŒ свой Π»ΠΎΠ³ Π΄ΠΎ значСния HW Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΅Π³ΠΎ избрания. Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎΡ‡Π΅ΠΌΡƒ настройка acks=all Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½Π° для согласованности.
  • БообщСния пСриодичСски Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° диск. Если всС ΡƒΠ·Π»Ρ‹ кластСра ΠΎΡ‚ΠΊΠ°Π·Π°Π»ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Ρ‚ΠΎ Π½Π° дисках сохранятся Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌ смСщСниСм. Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ снова вСрнутся Π² ΡΠ΅Ρ‚ΡŒ, Π½ΠΎΠ²Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π±Ρ€Π°Π½, окаТСтся ΠΏΠΎΠ·Π°Π΄ΠΈ своих Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ сохранился Π½Π° диск Ρ€Π°Π½ΡŒΡˆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΡ….

ВоссоСдинСниС c кластСром

ΠŸΡ€ΠΈ воссоСдинСнии с кластСром Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ сбоС Π»ΠΈΠ΄Π΅Ρ€Π°: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΈ ΡƒΡΠ΅ΠΊΠ°ΡŽΡ‚ свой Π»ΠΎΠ³ Π΄ΠΎ Π΅Π³ΠΎ HW (Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ избрания). Для сравнСния, RabbitMQ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ расцСниваСт воссоСдинСнныС ΡƒΠ·Π»Ρ‹ ΠΊΠ°ΠΊ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½ΠΎΠ²Ρ‹Π΅. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π±Ρ€ΠΎΠΊΠ΅Ρ€ отбрасываСт любоС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ состояниС. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ автоматичСская синхронизация, Ρ‚ΠΎ мастСр Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ всС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ содСрТимоС Π² Π½ΠΎΠ²ΠΎΠ΅ Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ способом Β«ΠΈ ΠΏΡƒΡΡ‚ΡŒ вСсь ΠΌΠΈΡ€ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π΅Ρ‚Β». Π’ΠΎ врСмя этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ мастСр Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния ΠΈΠ»ΠΈ записи. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ создаСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… очСрСдях.

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

НовыС ΠΈΠ»ΠΈ воссоСдинСнныС Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ISR ΠΈ Π½Π΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ…. Они просто Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ рядом с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ, получая сообщСния Ρ‚Π°ΠΊ быстро, ΠΊΠ°ΠΊ ΠΌΠΎΠ³ΡƒΡ‚, ΠΏΠΎΠΊΠ° Π½Π΅ догонят Π»ΠΈΠ΄Π΅Ρ€Π° ΠΈ Π½Π΅ Π²ΠΎΠΉΠ΄ΡƒΡ‚ Π² ISR. Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°Ρ‚ΡŒ всС свои Π΄Π°Π½Π½Ρ‹Π΅.

ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ связности

Π£ Kafka большС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ², Ρ‡Π΅ΠΌ Π² RabbitMQ, поэтому здСсь Π±ΠΎΠ»Π΅Π΅ слоТный Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° Π² кластСрС Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ. Но Kafka ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π»Π°ΡΡŒ для кластСров, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΌΠ°Π½Ρ‹.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ нСсколько сцСнариСв Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ связности:

  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 1. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π°, Π½ΠΎ всС Π΅Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper.
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 2. Π›ΠΈΠ΄Π΅Ρ€ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°, Π½ΠΎ всС Π΅Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper.
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 3. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π²ΠΈΠ΄ΠΈΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π°, Π½ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper.
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 4. Π›ΠΈΠ΄Π΅Ρ€ Π²ΠΈΠ΄ΠΈΡ‚ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², Π½ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper.
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 5. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² Kafka, ΠΈ ΠΎΡ‚ Zookeeper.
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 6. Π›ΠΈΠ΄Π΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² Kafka, ΠΈ ΠΎΡ‚ Zookeeper.
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 7. Π£Π·Π΅Π» ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Kafka Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ·Π΅Π» Kafka.
  • Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 8. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Kafka Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper.

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сцСнария прСдусмотрСно своС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 1. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π°, Π½ΠΎ всС Π΅Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 22. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 1. ISR ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ

ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ связности отдСляСт Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° 3 ΠΎΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² 1 ΠΈ 2, Π½ΠΎ Π½Π΅ ΠΎΡ‚ Zookeeper. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ 3 большС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ. По истСчСнии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ replica.lag.time.max.ms ΠΎΠ½ удаляСтся ΠΈΠ· ISR ΠΈ Π½Π΅ участвуСт Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π°Ρ… сообщСний. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ восстановлСна, ΠΎΠ½ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ ΠΈ присоСдинится ΠΊ ISR, ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ³ΠΎΠ½ΠΈΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π°. Zookeeper ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ΠΈ ΠΈ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΆΠΈΠ² ΠΈ Π·Π΄ΠΎΡ€ΠΎΠ².

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 23. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 1. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ удаляСтся ΠΈΠ· ISR, Ссли ΠΎΡ‚ Π½Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ запрос Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° replica.lag.time.max.ms

НСт Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ логичСского раздСлСния (split-brain) ΠΈΠ»ΠΈ приостановки ΡƒΠ·Π»Π°, ΠΊΠ°ΠΊ Π² RabbitMQ. ВмСсто этого ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 2. Π›ΠΈΠ΄Π΅Ρ€ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°, Π½ΠΎ всС Π΅Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 24. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 2. Π›ΠΈΠ΄Π΅Ρ€ ΠΈ Π΄Π²Π° Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°

ΠΠ°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ сСтСвой связности отдСляСт Π»ΠΈΠ΄Π΅Ρ€Π° ΠΎΡ‚ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², Π½ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€ всС Π΅Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper. Как ΠΈ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ сцСнарии, ISR сТимаСтся, Π½ΠΎ Π½Π° этот Ρ€Π°Π· Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°ΡŽΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ логичСского раздСлСния. ВмСсто этого происходит потСря избыточности для Π½ΠΎΠ²Ρ‹Ρ… сообщСний, ΠΏΠΎΠΊΠ° ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ Π½Π΅ восстановится. Zookeeper ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΠΈΠ½Π³ΠΈ ΠΈ считаСт, Ρ‡Ρ‚ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΆΠΈΠ² ΠΈ Π·Π΄ΠΎΡ€ΠΎΠ².

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 25. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 2. ISR сТался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 3. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π²ΠΈΠ΄ΠΈΡ‚ Π»ΠΈΠ΄Π΅Ρ€Π°, Π½ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper

Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ отдСляСтся ΠΎΡ‚ Zookeeper, Π½ΠΎ Π½Π΅ ΠΎΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° с Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ запросы Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π»Π΅Π½ΠΎΠΌ ISR. Zookeeper большС Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠΈΠ½Π³ΠΈ ΠΈ рСгистрируСт ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… послСдствий послС восстановлСния.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 26. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 3. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€Ρƒ запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 4. Π›ΠΈΠ΄Π΅Ρ€ Π²ΠΈΠ΄ΠΈΡ‚ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², Π½ΠΎ Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 27. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 4. Π›ΠΈΠ΄Π΅Ρ€ ΠΈ Π΄Π²Π° Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°

Π›ΠΈΠ΄Π΅Ρ€ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΎΡ‚ Zookeeper, Π½ΠΎ Π½Π΅ ΠΎΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² с Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°ΠΌΠΈ.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 28. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 4. Π›ΠΈΠ΄Π΅Ρ€ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΡ‚ Zookeeper

Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя Zookeeper зарСгистрируСт ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠΈΡ‚ ΠΎΠ± этом ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. Π’ΠΎΡ‚ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ срСди Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ² Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°. Однако исходный Π»ΠΈΠ΄Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ являСтся Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ записи с acks=1. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ большС Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π΅ΠΌΡƒ запросы Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ, поэтому ΠΎΠ½ посчитаСт ΠΈΡ… ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΌΠΈ ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΡΠΆΠ°Ρ‚ΡŒ ISR Π΄ΠΎ самого сСбя. Но ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρƒ Π½Π΅Π³ΠΎ Π½Π΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Zookeeper, ΠΎΠ½ Π½Π΅ смоТСт это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈ Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ откаТСтся ΠΎΡ‚ дальнСйшСго ΠΏΡ€ΠΈΠ΅ΠΌΠ° записСй.

БообщСния acks=all Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ подтвСрТдСния, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ сначала ISR Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, Π° Π΄ΠΎ Π½ΠΈΡ… сообщСния Π½Π΅ доходят. Когда ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€ попытаСтся ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈΠ· ISR, ΠΎΠ½ Π½Π΅ смоТСт этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ пСрСстанСт ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ сообщСния.

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

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 29. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 4. Π›ΠΈΠ΄Π΅Ρ€ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 1 становится Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠΌ послС восстановлСния сСти

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 5. Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² Kafka, ΠΈ ΠΎΡ‚ Zookeeper

Π€ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² Kafka, ΠΈ ΠΎΡ‚ Zookeeper. Он просто удаляСтся ΠΈΠ· ISR, ΠΏΠΎΠΊΠ° ΡΠ΅Ρ‚ΡŒ Π½Π΅ восстановится, Π° ΠΏΠΎΡ‚ΠΎΠΌ догоняСт ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ….

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 30. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 5. Π˜Π·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ удаляСтся ΠΈΠ· ISR

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 6. Π›ΠΈΠ΄Π΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ ΠΈ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² Kafka, ΠΈ ΠΎΡ‚ Zookeeper

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 31. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 6. Π›ΠΈΠ΄Π΅Ρ€ ΠΈ Π΄Π²Π° Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°

Π›ΠΈΠ΄Π΅Ρ€ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ ΠΎΡ‚ своих Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΈ Zookeeper. Π’ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° ΠΎΠ½ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ записи с acks=1.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 32. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 6. Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² Kafka ΠΈ Zookeeper

НС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² запросов ΠΏΠΎ истСчСнии replica.lag.time.max.ms, ΠΎΠ½ попытаСтся ΡΠΆΠ°Ρ‚ΡŒ ISR Π΄ΠΎ самого сСбя, Π½ΠΎ Π½Π΅ смоТСт этого ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Ρ‚ связи с Zookeeper, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ записи.

ΠœΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, Zookeeper ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΊΠ°ΠΊ ΠΌΠ΅Ρ€Ρ‚Π²ΠΎΠ³ΠΎ, Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 33. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 6. Π”Π²Π° Π»ΠΈΠ΄Π΅Ρ€Π°

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ записи Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСкунд, Π½ΠΎ Π·Π°Ρ‚Π΅ΠΌ пСрСстаСт ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ сообщСния. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 60 сСкунд с послСдними ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. Они Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎ смСнС Π»ΠΈΠ΄Π΅Ρ€Π° ΠΈ Π½Π°Ρ‡Π½ΡƒΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ записи Π½ΠΎΠ²ΠΎΠΌΡƒ Π»ΠΈΠ΄Π΅Ρ€Ρƒ.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 34. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 6. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π½Π° Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π°

Π‘ΡƒΠ΄ΡƒΡ‚ потСряны всС ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Ρ‘Π½Π½Ρ‹Π΅ записи, сдСланныС исходным Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связности. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ΅Ρ‚ΡŒ восстановлСна, исходный Π»ΠΈΠ΄Π΅Ρ€ Ρ‡Π΅Ρ€Π΅Π· Zookeeper ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚, Ρ‡Ρ‚ΠΎ большС Π½Π΅ являСтся Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ. Π—Π°Ρ‚Π΅ΠΌ усСчСт свой Π»ΠΎΠ³ Π΄ΠΎ HW Π½ΠΎΠ²ΠΎΠ³ΠΎ Π»ΠΈΠ΄Π΅Ρ€Π° Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ избрания ΠΈ Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запросы ΠΊΠ°ΠΊ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€.

RabbitMQ ΠΏΡ€ΠΎΡ‚ΠΈΠ² Kafka: ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ
Рис. 35. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 6. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€ становится Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠΌ послС восстановлСния связности сСти

Π’ этой ситуации Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒΡΡ логичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли acks=1 ΠΈ min.insync.replicas Ρ‚ΠΎΠΆΠ΅ 1. ЛогичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ автоматичСски Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π»ΠΈΠ±ΠΎ послС восстановлСния сСти, ΠΊΠΎΠ³Π΄Π° исходный Π»ΠΈΠ΄Π΅Ρ€ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ большС Π½Π΅ Π»ΠΈΠ΄Π΅Ρ€, Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° всС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π»ΠΈΠ΄Π΅Ρ€ измСнился ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠΌΡƒ Π»ΠΈΠ΄Π΅Ρ€Ρƒ β€” Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ρ€Π°Π½ΡŒΡˆΠ΅. Π’ любом случаС ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ потСря Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сообщСний, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с acks=1.

БущСствуСт Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ этого сцСнария, ΠΊΠΎΠ³Π΄Π° нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ сСти Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Ρ‹ отстали, Π° Π»ΠΈΠ΄Π΅Ρ€ сТал ISR Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сСбя. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½ изолируСтся ΠΈΠ·-Π·Π° ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связности. Π˜Π·Π±ΠΈΡ€Π°Π΅Ρ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€, Π½ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΈΠ΄Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ записи, Π΄Π°ΠΆΠ΅ acks=all, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ISR ΠΊΡ€ΠΎΠΌΠ΅ Π½Π΅Π³ΠΎ Π½ΠΈΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚. Π­Ρ‚ΠΈ записи Π±ΡƒΠ΄ΡƒΡ‚ потСряны послС восстановлСния сСти. ЕдинствСнный способ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° β€” min.insync.replicas = 2.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 7. Π£Π·Π΅Π» ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Kafka Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ·Π΅Π» Kafka

Π’ Ρ†Π΅Π»ΠΎΠΌ, послС ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связи с ΡƒΠ·Π»ΠΎΠΌ Kafka ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ смоТСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅ΠΌΡƒ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎ измСнСнию Π»ΠΈΠ΄Π΅Ρ€Π°. Π’ Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ случаС это ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ краткосрочному логичСскому Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡŽ, ΠΊΠ°ΠΊ Π² сцСнарии 6. Π§Π°Ρ‰Π΅ всСго Π±Ρ€ΠΎΠΊΠ΅Ρ€ просто Π½Π΅ станСт ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ΠΎΠΌ Π½Π° лидСрство Π² случаС ΠΎΡ‚ΠΊΠ°Π·Π° послСднСго.

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ 8. ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Kafka Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚ Zookeeper

ΠžΡ‚ ΠΎΡ‚Π²Π°Π»ΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° Zookeeper Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΏΠΈΠ½Π³Π° ΠΈ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π» Kafka. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ сСбя Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌ, Π½ΠΎ ΠΎΠ½ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ увСдомлСния ΠΎΡ‚ Zookeeper, поэтому Ρƒ Π½Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡ для выполнСния. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠ΅Ρ‚ΡŒ восстановится, ΠΎΠ½ ΠΏΠΎΠΉΠΌΡ‘Ρ‚, Ρ‡Ρ‚ΠΎ большС Π½Π΅ являСтся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ, Π° стал ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΡƒΠ·Π»ΠΎΠΌ Kafka.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΈΠ· сцСнариСв

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ потСря связности Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ² Π½Π΅ приводят ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ сообщСний, Π° просто Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΠΊΠ° ΡΠ΅Ρ‚ΡŒ Π½Π΅ восстановится. Π­Ρ‚ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Ссли потСряны ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΡƒΠ·Π»ΠΎΠ².

Если ΠΈΠ·-Π·Π° ΠΏΠΎΡ‚Π΅Ρ€ΠΈ связности Π»ΠΈΠ΄Π΅Ρ€ отдСлился ΠΎΡ‚ Zookeeper, это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ сообщСний с acks=1. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ связи с Zookeeper Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ логичСскоС Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ с двумя Π»ΠΈΠ΄Π΅Ρ€Π°ΠΌΠΈ. Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ acks=all.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ min.insync.replicas Π² Π΄Π²Π΅ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊ Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ краткосрочныС сцСнарии Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ сообщСний, ΠΊΠ°ΠΊ Π² сцСнарии 6.

РСзюмС ΠΏΠΎ ΠΏΠΎΡ‚Π΅Ρ€Π΅ сообщСний

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΠΌ всС способы, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Kafka:

  • Π›ΡŽΠ±ΠΎΠΉ сбой Π»ΠΈΠ΄Π΅Ρ€Π°, Ссли сообщСния ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π»ΠΈΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ acks=1
  • Π›ΡŽΠ±ΠΎΠΉ нСчистый (unclean) ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ лидСрства, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ISR, Π΄Π°ΠΆΠ΅ с acks=all
  • Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ Π»ΠΈΠ΄Π΅Ρ€Π° ΠΎΡ‚ Zookeeper, Ссли сообщСния ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π»ΠΈΡΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ acks=1
  • Полная изоляция Π»ΠΈΠ΄Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ сТал Π³Ρ€ΡƒΠΏΠΏΡƒ ISR Π΄ΠΎ самого сСбя. Π‘ΡƒΠ΄ΡƒΡ‚ потСряны всС сообщСния, Π΄Π°ΠΆΠ΅ acks=all. Π­Ρ‚ΠΎ Π²Π΅Ρ€Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли min.insync.replicas=1.
  • ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ сбои всСх ΡƒΠ·Π»ΠΎΠ² Ρ€Π°Π·Π΄Π΅Π»Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сообщСния ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚ΡΡ ΠΈΠ· памяти, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° диск. ПослС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сСрвСров Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сообщСний ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ.

НСчистых ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² лидСрства ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Π»ΠΈΠ±ΠΎ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ² ΠΈΡ…, Π»ΠΈΠ±ΠΎ обСспСчив ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄Π²ΡƒΡ…. НаиболСС прочная конфигурация β€” это сочСтаниС acks=all ΠΈ min.insync.replicas большС 1.

ΠŸΡ€ΡΠΌΠΎΠ΅ сравнСниС надёТности RabbitMQ ΠΈ Kafka

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

Π’ Kafka Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Она отбрасываСт Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Ρ‚ΠΎΡ‡ΠΊΠΈ расхоТдСния Π»ΠΈΠ΄Π΅Ρ€Π° ΠΈ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€Π°. ВсС ΠΎΠ±Ρ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, рСпликация Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ систСму. Π›ΠΈΠ΄Π΅Ρ€ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ записи, ΠΏΠΎΠΊΠ° Π½ΠΎΠ²Ρ‹ΠΉ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ Π΅Π³ΠΎ догоняСт, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ для дСвопсов присоСдинСниС ΠΈΠ»ΠΈ воссоСдинСниС кластСра становится Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ сСти ΠΏΡ€ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Если ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ нСсколько Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с Π»ΠΈΠΌΠΈΡ‚ΠΎΠΌ пропускной способности.

RabbitMQ прСвосходит Kafka Π² надёТности ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ сбоС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сСрвСров Π² кластСрС. Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, RabbitMQ отправляСт ΠΏΠ°Π±Π»ΠΈΡˆΠ΅Ρ€Ρƒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС записи сообщСния Π½Π° диск Ρƒ мастСра ΠΈ всСх Π·Π΅Ρ€ΠΊΠ°Π». Но это добавляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΏΠΎ Π΄Π²ΡƒΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ:

  • fsync ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ нСсколько сотСн миллисСкунд
  • Π‘Π±ΠΎΠΉ Π·Π΅Ρ€ΠΊΠ°Π»Π° ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ истСчСнии Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° (net tick). Если Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΡ‚ ΠΈΠ»ΠΈ ΡƒΠΏΠ°Π»ΠΎ, это добавляСт Π·Π°Π΄Π΅Ρ€ΠΆΠΊΡƒ.

Kafka Π΄Π΅Π»Π°Π΅Ρ‚ ставку Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ссли сообщСниС хранится Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠ·Π»Π°Ρ…, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ сообщСния, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. Из-Π·Π° этого Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ риск ΠΏΠΎΡ‚Π΅Ρ€ΠΈ сообщСний любого Ρ‚ΠΈΠΏΠ° (Π΄Π°ΠΆΠ΅ acks=all, min.insync.Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ=2) Π² случаС ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ°Π·Π°.

Π’ Ρ†Π΅Π»ΠΎΠΌ Kafka дСмонстрируСт Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΠΈ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ спроСктирована для кластСров. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ„ΠΎΠ»Π»ΠΎΠ²Π΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎ 11-Ρ‚ΠΈ, Ссли это Π½ΡƒΠΆΠ½ΠΎ для надёТности. ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ 5 ΠΈ минимальноС число Ρ€Π΅ΠΏΠ»ΠΈΠΊ Π² синхронизированном состоянии min.insync.replicas=3 ΡΠ΄Π΅Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡŽ сообщСния ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΈΠΌ событиСм. Если ваша инфраструктура способна ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ коэффициСнт Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ избыточности, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ этот Π²Π°Ρ€ΠΈΠ°Π½Ρ‚.

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

Одно ΠΈΠ· противоядий ΠΎΡ‚ уязвимости RabbitMQ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ β€” Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° мноТСство ΠΌΠ΅Π½ΡŒΡˆΠΈΡ…. Если Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ упорядочСния всСй ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… сообщСний (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сообщСний ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°), ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡ΠΈΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌ: посмотритС ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Rebalanser для разбиСния ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠΊΠ° Π½Π° Ρ€Π°Π½Π½Π΅ΠΉ стадии).

НаконСц, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎ рядС Π±Π°Π³ΠΎΠ² Π² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… кластСризации ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ Ρƒ RabbitMQ, Ρ‚Π°ΠΊ ΠΈ Ρƒ Kafka. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ систСмы стали Π±ΠΎΠ»Π΅Π΅ Π·Ρ€Π΅Π»Ρ‹ΠΌΠΈ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ, Π½ΠΎ Π½ΠΈ ΠΎΠ΄Π½ΠΎ сообщСниС Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° 100% Π·Π°Ρ‰ΠΈΡ‰Π΅Π½ΠΎ ΠΎΡ‚ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ! ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² Π΄Π°Ρ‚Π°-Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ… ΡΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ Π°Π²Π°Ρ€ΠΈΠΈ!

Если я Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пропустил, допустил ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈΠ»ΠΈ Π²Ρ‹ Π½Π΅ согласны с Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· тСзисов, Π½Π΅ ΡΡ‚Π΅ΡΠ½ΡΠΉΡ‚Π΅ΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈΠ»ΠΈ ΡΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ со ΠΌΠ½ΠΎΠΉ.

МСня часто ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚: Β«Π§Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, Kafka ΠΈΠ»ΠΈ RabbitMQ?Β», «Какая ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° Π»ΡƒΡ‡ΡˆΠ΅?Β». ΠŸΡ€Π°Π²Π΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ зависит ΠΎΡ‚ вашСй ситуации, Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠΏΡ‹Ρ‚Π° ΠΈ Ρ‚. Π΄. Π― Π½Π΅ Ρ€Π΅ΡˆΠ°ΡŽΡΡŒ Π²Ρ‹ΡΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ своё ΠΌΠ½Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±ΡƒΠ΄Π΅Ρ‚ слишком большим ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ΠΌ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΠ΄Π½Ρƒ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ для всСх Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Π― написал этот Ρ†ΠΈΠΊΠ» статСй, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ собствСнноС ΠΌΠ½Π΅Π½ΠΈΠ΅.

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

Π― Π²ΠΈΠΆΡƒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ этой надёТности ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ упорядочСния, Π·Π°Ρ‚Π΅ΠΌ ΡΠΌΠΎΡ‚Ρ€ΡŽ Π½Π° RabbitMQ ΠΈ Kafka β€” ΠΈ понимаю Π½Π΅Π²Π΅Ρ€ΠΎΡΡ‚Π½ΡƒΡŽ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Π΅ΠΈΡ… этих систСм.

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