ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 3. Kafka

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° нСбольшой ΠΊΠ½ΠΈΠ³ΠΈ:
Β«Understanding Message BrokersΒ»,
Π°Π²Ρ‚ΠΎΡ€: Jakub Korab, ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ: O’Reilly Media, Inc., Π΄Π°Ρ‚Π° издания: June 2017, ISBN: 9781492049296.

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ пСрСвСдСнная Ρ‡Π°ΡΡ‚ΡŒ: ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ГЛАВА 3

Kafka

Kafka Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Π² LinkedIn для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ нСобходимости Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ нСсколько Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний для Ρ€Π°Π·Π½Ρ‹Ρ… взаимодСйствий Β«Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°Β», Ρ‡Ρ‚ΠΎ описано Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π’Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β» Π½Π° страницС 28. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΈ использования Π² LinkedIn Π² основном ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Π»ΠΈΡΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΌ ΠΏΠΎΠ³Π»ΠΎΡ‰Π΅Π½ΠΈΠΈ ΠΎΡ‡Π΅Π½ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠΊΠΈ Π½Π° страницах ΠΈ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ доступа, Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя позволяя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ нСскольким систСмам, Π½Π΅ влияя Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ². ЀактичСски, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° сущСствования Kafka Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ описываСт Universal Data Pipeline.

Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ этой ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ†Π΅Π»ΠΈ, СстСствСнно, Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ трСбования. Kafka Π΄ΠΎΠ»ΠΆΠ½Π°:

  • Π‘Ρ‹Ρ‚ΡŒ Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ быстрой
  • ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с сообщСниями
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Β«Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒ-ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΠΊΒ» ΠΈ Β«Π’ΠΎΡ‡ΠΊΠ°-Π’ΠΎΡ‡ΠΊΠ°Β»
  • НС Π·Π°ΠΌΠ΅Π΄Π»ΡΡ‚ΡŒΡΡ с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ. НапримСр, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠ° Π² ActiveMQ ΡƒΡ…ΡƒΠ΄ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ростС количСства ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ Π½Π° адрСсатС
  • Π‘Ρ‹Ρ‚ΡŒ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ; Ссли ΠΎΠ΄ΠΈΠ½ Π±Ρ€ΠΎΠΊΠ΅Ρ€, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΠΈΠΉ (persists) сообщСния, ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° максимальной скорости диска, Ρ‚ΠΎ для увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ экзСмпляра Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°
  • Π Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ доступ ΠΊ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΡŽ сообщСний

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ΡŒ всСго этого, Π² Kafka принята Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, которая ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»Π° Ρ€ΠΎΠ»ΠΈ ΠΈ обязанности ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями. МодСль JMS ΠΎΡ‡Π΅Π½ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€, Π³Π΄Π΅ ΠΎΠ½ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° распространСниС сообщСний, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ± ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСний. Kafka, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, ΠΏΡ€ΠΈ этом ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±Π΅Ρ€Π΅Ρ‚ Π½Π° сСбя ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ справСдливоС распрСдСлСниС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… сообщСний срСди ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ, Π² ΠΎΠ±ΠΌΠ΅Π½ получая Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ быстрый ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€. Для людСй, Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠΈΡ… с Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ систСмами ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, Ρ€Π°Π±ΠΎΡ‚Π° с Kafka Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π²ΠΎ взглядах.
Π­Ρ‚ΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½ΠΎΠ΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ созданию инфраструктуры ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, способной Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ порядков ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ. Как ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сопряТСн с компромиссами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Kafka Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ ΠΈ установлСнного ПО.

Унифицированная модСль адрСсата

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ трСбования, описанныС Π²Ρ‹ΡˆΠ΅, Kafka объСдинила ΠΎΠ±ΠΌΠ΅Π½ сообщСниями Ρ‚ΠΈΠΏΠ° «публикация-подписка» ΠΈ Β«Ρ‚ΠΎΡ‡ΠΊΠ°-Ρ‚ΠΎΡ‡ΠΊΠ°Β» Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° адрСсата β€” Ρ‚ΠΎΠΏΠΈΠΊΠ°. Π­Ρ‚ΠΎ сбиваСт с Ρ‚ΠΎΠ»ΠΊΡƒ людСй, Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠΈΡ… с систСмами ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, Π³Π΄Π΅ слово Β«Ρ‚ΠΎΠΏΠΈΠΊΒ» относится ΠΊ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡƒ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ (ΠΈΠ· Ρ‚ΠΎΠΏΠΈΠΊΠ°) Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ (is nondurable). Π’ΠΎΠΏΠΈΠΊΠΈ Kafka слСдуСт Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ адрСсата, Π² соотвСтствии с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ, Π΄Π°Π½Π½Ρ‹ΠΌ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊ этой ΠΊΠ½ΠΈΠ³Π΅.

Π’ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части этой Π³Π»Π°Π²Ρ‹, Ссли ΠΌΡ‹ явно Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ ΠΈΠ½ΠΎΠ΅, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Β«Ρ‚ΠΎΠΏΠΈΠΊΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΏΠΈΠΊΡƒ Kafka.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя Ρ‚ΠΎΠΏΠΈΠΊΠΈ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ ΠΎΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ сначала Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Kafka.
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΎΠΏΠΈΠΊΠ° Π² Kafka Π΅ΡΡ‚ΡŒ свой ΠΆΡƒΡ€Π½Π°Π».
ΠŸΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€Ρ‹, ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ сообщСния Π² Kafka, Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π² этот ΠΆΡƒΡ€Π½Π°Π», Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρ‹ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ постоянно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π²ΠΏΠ΅Ρ€Π΅Π΄. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ Kafka удаляСт самыС старыС части ΠΆΡƒΡ€Π½Π°Π»Π°, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΈ Π»ΠΈ сообщСния Π² этих частях ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹ ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄ΠΈΠ·Π°ΠΉΠ½Π° Kafka являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π½Π΅ заботится ΠΎ Ρ‚ΠΎΠΌ, ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹ Π»ΠΈ сообщСния ΠΈΠ»ΠΈ Π½Π΅Ρ‚ β€” это ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹ Β«ΠΆΡƒΡ€Π½Π°Π»Β» ΠΈ Β«ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΒ» Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Kafka. Π­Ρ‚ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстныС Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ здСсь, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ пониманию.

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

ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 3. Kafka
Figure 3-1. ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Kafka

Когда ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ отправляСт сообщСниС Π² Ρ‚ΠΎΠΏΠΈΠΊ Kafka, ΠΎΠ½ Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС. ΠœΡ‹ рассмотрим это Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.

Π§Ρ‚Π΅Π½ΠΈΠ΅ сообщСний

ΠšΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сообщСния, управляСт ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ Π³Ρ€ΡƒΠΏΠΏΠ° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² (consumer group), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° смСщСниС (offset) сообщСния Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ. Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ β€” это позиция с Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ, которая начинаСтся с 0 Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ. Π­Ρ‚Π° Π³Ρ€ΡƒΠΏΠΏΠ° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π² API Ρ‡Π΅Ρ€Π΅Π· опрСдСляСмый ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ group_id, соотвСтствуСт ΠΎΠ΄Π½ΠΎΠΌΡƒ логичСскому ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŽ ΠΈΠ»ΠΈ систСмС.

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

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ чтСния ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Π’ΠΎΠΏΠΈΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΏΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ мноТСство Π³Ρ€ΡƒΠΏΠΏ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ²
  • Π“Ρ€ΡƒΠΏΠΏΠ° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… экзСмпляров

Π­Ρ‚ΠΎ Π½Π΅Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Β«ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ». Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Kafka обращаСтся с ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ², экзСмплярами ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² ΠΈ партициями, рассмотрим ряд постСпСнно ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‰ΠΈΡ…ΡΡ сцСнариСв чтСния.

ΠšΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρ‹ ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ²

Π”Π°Π²Π°ΠΉΡ‚Π΅ возьмСм Π² качСствС ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ‚ΠΎΠΏΠΈΠΊ с ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠ΅ΠΉ (Figure 3-2).

ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 3. Kafka
Figure 3-2. ΠšΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ

Когда экзСмпляр ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ со своим собствСнным group_id ΠΊ этому Ρ‚ΠΎΠΏΠΈΠΊΡƒ, Π΅ΠΌΡƒ назначаСтся партиция для чтСния ΠΈ смСщСниС Π² этой ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ. ПолоТСниС этого смСщСния конфигурируСтся Π² ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ°ΠΌΡƒΡŽ послСднюю ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ (самоС Π½ΠΎΠ²ΠΎΠ΅ сообщСниС) ΠΈΠ»ΠΈ ΡΠ°ΠΌΡƒΡŽ Ρ€Π°Π½Π½ΡŽΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ (самоС староС сообщСниС). ΠšΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ (polls) сообщСния ΠΈΠ· Ρ‚ΠΎΠΏΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΈΡ… ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»Π°.
ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ смСщСния рСгулярно коммитится ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Kafka ΠΈ сохраняСтся, ΠΊΠ°ΠΊ сообщСния Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ Ρ‚ΠΎΠΏΠΈΠΊΠ΅ _consumer_offsets. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ сообщСния всС Ρ€Π°Π²Π½ΠΎ Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚Π°Ρ‚ΡŒ (rewind) смСщСниС, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ просмотрСнныС сообщСния.

Когда ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π²Ρ‚ΠΎΡ€ΠΎΠΉ логичСский ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ group_id, ΠΎΠ½ управляСт Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ зависит ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ (Figure 3-3). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎΠΏΠΈΠΊ Kafka дСйствуСт ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ сущСствуСт ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ‚ΠΎΠΏΠΈΠΊ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ-подписчик (pub-sub), Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подписаны нСсколько ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ², с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ прСимущСством, Ρ‡Ρ‚ΠΎ всС сообщСния ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ нСсколько Ρ€Π°Π·.

ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 3. Kafka
Figure 3-3. Π”Π²Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ

ΠšΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρ‹ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ²

Когда ΠΎΠ΄ΠΈΠ½ экзСмпляр ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСния, ΠΊΠ°ΠΊ описано Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.
Если нСсколько экзСмпляров ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ group_id ΠΊ Ρ‚ΠΎΠΏΠΈΠΊΡƒ с ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠ΅ΠΉ, Ρ‚ΠΎ экзСмпляру, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ»ΡΡ послСдним, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ всС сообщСния (Figure 3-4).

ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 3. Kafka
Figure 3-4. Π”Π²Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ

Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ количСство экзСмпляров ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ число ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ монопольного потрСбитСля. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° Β«Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ-пассивная» (ΠΈΠ»ΠΈ «горячая-тСплая») кластСризация Π²Π°ΡˆΠΈΡ… экзСмпляров ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ², хотя ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² (Β«Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ-активная» ΠΈΠ»ΠΈ «горячая-горячая») Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Π°, Ρ‡Π΅ΠΌ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρ‹ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ оТидания.

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

Π§Π°Ρ‰Π΅ всСго, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ создаСм нСсколько экзСмпляров ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ², ΠΌΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это Π»ΠΈΠ±ΠΎ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний, Π»ΠΈΠ±ΠΎ для увСличСния скорости чтСния, Π»ΠΈΠ±ΠΎ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ устойчивости процСсса чтСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π°, Ρ‚ΠΎ ΠΊΠ°ΠΊ это достигаСтся Π² Kafka?

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

ΠšΠ°Π½ΠΎΠ½ΠΈΡ‡Π΅ΡΠΊΠΈΠΌ способом Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Kafka являСтся использованиС бОльшСго количСства ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ.

ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ основным ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ распараллСливания чтСния ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ Ρ‚ΠΎΠΏΠΈΠΊΠ° Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ пропускной способности ΠΎΠ΄Π½ΠΎΠ³ΠΎ экзСмпляра Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°. Π§Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ это, Π΄Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° сущСствуСт Ρ‚ΠΎΠΏΠΈΠΊ с двумя партициями ΠΈ Π½Π° этот Ρ‚ΠΎΠΏΠΈΠΊ подписываСтся ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ (Figure 3-5).

ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 3. Kafka
Figure 3-5. Один ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ

Π’ этом сцСнарии ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρƒ даСтся ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ указатСлями, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΅Π³ΠΎ group_id Π² ΠΎΠ±ΠΎΠΈΡ… партициях, ΠΈ начинаСтся Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ сообщСний ΠΈΠ· ΠΎΠ±Π΅ΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ.
Когда Π² этот Ρ‚ΠΎΠΏΠΈΠΊ добавляСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ для Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ group_id, Kafka ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ (reallocate) ΠΎΠ΄Π½Ρƒ ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€. ПослС Ρ‡Π΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠ° (Figure 3-6).

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ сообщСний ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ Π² 20 ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π²Π°ΠΌ потрСбуСтся ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 20 ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ. Если ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ мСньшС, Ρƒ вас останутся ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ Π½Π°Π΄ Ρ‡Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ описано Ρ€Π°Π½Π΅Π΅ Π² обсуТдСнии ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ².

ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 3. Kafka
Figure 3-6. Π”Π²Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ

Π­Ρ‚Π° схСма Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ сниТаСт ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Kafka ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с распрСдСлСниСм сообщСний, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ JMS. Π—Π΄Π΅ΡΡŒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ заботится ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ…:

  • Какой ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС, ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° цикличСском (round-robin) распрСдСлСнии, Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Смкости Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… сообщСниях (ΠΊΠ°ΠΊ для Π³Ρ€ΡƒΠΏΠΏ сообщСний JMS).
  • КакиС сообщСния ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π°ΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ ΠΎΠ½ΠΈ Π±Ρ‹Ρ‚ΡŒ доставлСны ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Π² случаС сбоя.

ВсС, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Kafka β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ сообщСния ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρƒ, ΠΊΠΎΠ³Π΄Π° послСдний Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ….

Однако, трСбования ΠΊ Ρ€Π°ΡΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡŽ Π²Ρ‹Ρ‡ΠΈΡ‚ΠΊΠΈ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ… сообщСний Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ Π΄Π΅Π²Π°ΡŽΡ‚ΡΡ β€” ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Π½ΠΈΡ… просто ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ Π² вашСм ΠΊΠΎΠ΄Π΅.

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСний

ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠ°ΠΊΡƒΡŽ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСниС, возлагаСтся Π½Π° ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ этого сообщСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ это дСлаСтся, сначала Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΌΡ‹ Π½Π° самом Π΄Π΅Π»Π΅ отправляСм.

Π’ Ρ‚ΠΎ врСмя, ΠΊΠ°ΠΊ Π² JMS ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ структуру сообщСния с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ ΠΈ свойствами) ΠΈ Ρ‚Π΅Π»ΠΎΠΌ, содСрТащим ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ (payload), Π² Kafka сообщСниС являСтся ΠΏΠ°Ρ€ΠΎΠΉ Β«ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Β». ПолСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сообщСния отправляСтся, ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (value). ΠšΠ»ΡŽΡ‡, с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ для партиционирования ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ спСцифичный для бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΊΠ»ΡŽΡ‡, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ связанныС сообщСний Π² Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ.

Π’ Π“Π»Π°Π²Π΅ 2 ΠΌΡ‹ обсуТдали сцСнарий ΠΎΠ½Π»Π°ΠΉΠ½-ставок, ΠΊΠΎΠ³Π΄Π° связанныС события Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ порядку ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠΌ:

  1. УчСтная запись ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ настроСна.
  2. Π”Π΅Π½ΡŒΠ³ΠΈ Π·Π°Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π½Π° счСт.
  3. ДСлаСтся ставка, которая Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ дСньги со счСта.

Если ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ событиС прСдставляСт собой сообщСниС, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ Π² Ρ‚ΠΎΠΏΠΈΠΊ, Ρ‚ΠΎ Π² этом случаС СстСствСнным ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи.
Когда сообщСниС отправляСтся с использованиСм Kafka Producer API, ΠΎΠ½ΠΎ пСрСдаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ партиционирования, которая, учитывая сообщСниС ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ состояниС кластСра Kafka, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½ΠΎ сообщСниС. Π­Ρ‚Π° функция Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Java Ρ‡Π΅Ρ€Π΅Π· интСрфСйс Partitioner.

Π­Ρ‚ΠΎΡ‚ интСрфСйс выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

interface Partitioner {
    int partition(String topic,
        Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster);
}

РСализация Partitioner для опрСдСлСния ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»ΡŽΡ‡Π° (general-purpose hashing algorithm over the key) ΠΈΠ»ΠΈ цикличСский ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ (round-robin), Ссли ΠΊΠ»ΡŽΡ‡ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв. Однако, Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свой собствСнный.

НаписаниС собствСнной стратСгии партиционирования

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

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” это полСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° банковского ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° (bank transfer payload), Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, Ρƒ нас Π½Π΅ остаСтся Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π°, ΠΊΡ€ΠΎΠΌΠ΅ опрСдСлСния структуры Π΄Π°Π½Π½Ρ‹Ρ… для использования Π² ΠΊΠ»ΡŽΡ‡Π΅. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи для партиционирования, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ всС сообщСния, относящиСся ΠΊ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ порядку, ΠΌΡ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру JSON:

{
  "signature": "541661622185851c248b41bf0cea7ad0",
  "accountId": "10007865234"
}

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ подписи Π±ΡƒΠ΄Π΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, дСфолтная стратСгия Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ интСрфСйса Partitioner Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ связанныС сообщСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠ»ΡŽΡ‡ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ (partition) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ accountId.

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

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

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

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

Рассмотрим Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ кластСрами Kafka Π² Ρ€Π°Π·Π½Ρ‹Ρ… гСографичСских располоТСниях. Для этой Ρ†Π΅Π»ΠΈ Kafka поставляСтся с инструмСнтом ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ MirrorMaker, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для чтСния сообщСний ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ кластСра ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

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

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ стратСгии партиционирования Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅Π΄ΠΊΠΎ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ цикличСский ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ сцСнариСв. Однако, Ссли Π²Π°ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ строгиС Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ упорядочивания ΠΈΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ, Ρ‚ΠΎ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это Ρ‚ΠΎ, Π½Π° Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ слСдуСт Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ.

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

JMS Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»ΠΎ с Ρ‚Π°ΠΊΠΈΠΌΠΈ трСбованиями. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ связанных сообщСний ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· JMS Message Groups (Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ стратСгии балансировки sticky load balancing (SLB)), Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π» сообщСния, ΠΊΠ°ΠΊ связанныС. Π’ случаС JMS, Π±Ρ€ΠΎΠΊΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ этой Π³Ρ€ΡƒΠΏΠΏΡ‹ связанных сообщСний ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρƒ ΠΈΠ· ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΏΡ€Π°Π² собствСнности Π½Π° Π³Ρ€ΡƒΠΏΠΏΡƒ Ссли ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ отвалился.

БоглашСния ΠΏΠΎ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€Ρƒ

ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это Π½Π΅ СдинствСнноС, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ сообщСний. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ send () класса Producer Π² Java API:

Future < RecordMetadata > send(ProducerRecord < K, V > record);
Future < RecordMetadata > send(ProducerRecord < K, V > record, Callback callback);

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ сразу ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Future, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ опСрация ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π΅ выполняСтся Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ получаСтся, Ρ‡Ρ‚ΠΎ сообщСниС (ProducerRecord) записываСтся Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΈ пСрСдаСтся Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ Ρ„ΠΎΠ½ΠΎΠ²Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Kafka. Π₯отя это Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ нСвСроятно быстрой, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠΏΡ‹Ρ‚Π½ΠΎ написанноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ сообщСния, Ссли Π΅Π³ΠΎ процСсс Π±ΡƒΠ΄Π΅Ρ‚ остановлСн.

Как всСгда, Π΅ΡΡ‚ΡŒ способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ Π·Π° счСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π Π°Π·ΠΌΠ΅Ρ€ этого Π±ΡƒΡ„Π΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π² 0, ΠΈ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ прилоТСния Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° сообщСния Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

RecordMetadata metadata = producer.send(record).get();

Π•Ρ‰Π΅ Ρ€Π°Π· ΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ сообщСний

Π§Ρ‚Π΅Π½ΠΈΠ΅ сообщСний ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ слоТности, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡ€Π°ΡΡΡƒΠΆΠ΄Π°Ρ‚ΡŒ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ API JMS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π»Ρ сообщСний (message listener) Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° поступлСниС сообщСния, интСрфСйс Consumer Kafka Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ (polling). Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ рассмотрим ΠΌΠ΅Ρ‚ΠΎΠ΄ poll (), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для этой Ρ†Π΅Π»ΠΈ:

ConsumerRecords < K, V > poll(long timeout);

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° β€” это контСйнСрная структура, содСрТащая нСсколько ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ConsumerRecord ΠΈΠ· ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ. ConsumerRecord сам ΠΏΠΎ сСбС являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ-Ρ…ΠΎΠ»Π΄Π΅Ρ€ΠΎΠΌ для ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ партиция, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½.

Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Π² Π“Π»Π°Π²Π΅ 2, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ постоянно ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ происходит с сообщСниями послС ΠΈΡ… ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС ΠΈΠ»ΠΈ Ссли ΠΎΠ½ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. Π’ JMS это ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΎΡΡŒ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅ΠΆΠΈΠΌ подтвСрТдСния (acknowledgement mode). Π‘Ρ€ΠΎΠΊΠ΅Ρ€ Π»ΠΈΠ±ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ сообщСниС, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ доставит Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ΅ ΠΈΠ»ΠΈ Π·Π°Ρ„Π΅ΠΉΠ»Π΅Π½Π½ΠΎΠ΅ (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ).
Kafka Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ совсСм ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. БообщСния Π½Π΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ Π² Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ послС Π²Ρ‹Ρ‡ΠΈΡ‚ΠΊΠΈ ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ происходит ΠΏΡ€ΠΈ сбоС, Π»Π΅ΠΆΠΈΡ‚ Π½Π° самом Π²Ρ‹Ρ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅.

Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, Π³Ρ€ΡƒΠΏΠΏΠ° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² связана со смСщСниСм Π² ΠΆΡƒΡ€Π½Π°Π»Π΅. ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ Π² ΠΆΡƒΡ€Π½Π°Π»Π΅, связанная с этим смСщСниСм, соотвСтствуСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ΠΎ Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° poll (). Π Π΅ΡˆΠ°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° это смСщСниС увСличиваСтся.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ чтСния, рассмотрСнной Ρ€Π°Π½Π΅Π΅, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сообщСния состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… этапов:

  1. Π˜Π·Π²Π»Π΅Ρ‡ΡŒ сообщСниС для чтСния.
  2. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС.
  3. ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ сообщСниС.

ΠšΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ Kafka поставляСтся с ΠΎΠΏΡ†ΠΈΠ΅ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ enable.auto.commit. Π­Ρ‚ΠΎ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ настройка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠ°ΠΊ это ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ с настройками, содСрТащими слово Β«Π°Π²Ρ‚ΠΎΒ».

Π”ΠΎ Kafka 0.10 ΠΊΠ»ΠΈΠ΅Π½Ρ‚, использовавший этот ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, отправлял смСщСниС послСднСго ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ³ΠΎ сообщСния ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ poll () послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±Ρ‹Π΅ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½Ρ‹ (fetched), ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹, Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΡ… ΡƒΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π», Π½ΠΎ Π±Ρ‹Π» Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ poll (). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π½Π΅ сохраняСт Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ состояния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, сколько Ρ€Π°Π· сообщСниС Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΎ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ это сообщСниС, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ псСвдо-Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ. Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΠ»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСния, Π½ΠΎ Ссли ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π±Ρ€ΠΎΠΊΠ΅Ρ€ снова отправлял Ρ‚ΠΎ ΠΆΠ΅ самоС сообщСниС Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ соотвСтствовало Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ доставки сообщСний «ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·«.

Π’ Kafka 0.10 ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚ стал пСриодичСски Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Π² соотвСтствии с настройкой auto.commit.interval.ms. Π­Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ находится Π³Π΄Π΅-Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ JMS AUTO_ACKNOWLEDGE ΠΈ DUPS_OK_ACKNOWLEDGE. ΠŸΡ€ΠΈ использовании Π°Π²Ρ‚ΠΎΠΊΠΎΠΌΠΌΠΈΡ‚Π° сообщСния ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Ρ‹ нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π±Ρ‹Π»ΠΈ Π»ΠΈ ΠΎΠ½ΠΈ фактичСски ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ β€” это ΠΌΠΎΠ³Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π² случаС ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π°. Если ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π» Ρ€Π°Π±ΠΎΡ‚Ρƒ, сообщСния извлСкались ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠΌ, начиная с Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ³Π»ΠΎ привСсти ΠΊ пропуску сообщСния. Π’ этом случаС Kafka Π½Π΅ тСряла сообщСния, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ просто Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» ΠΈΡ….

Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΆΠΈΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ пСрспСктивы, Ρ‡Ρ‚ΠΎ ΠΈ Π² вСрсии 0.9: сообщСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹, Π½ΠΎ Π² случаС сбоя, смСщСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‡Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ задвоСнию доставки. Π§Π΅ΠΌ большС сообщСний Π²Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚Π΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ poll (), Ρ‚Π΅ΠΌ большС эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.

Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π§Ρ‚Π΅Π½ΠΈΠ΅ сообщСний ΠΈΠ· ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈΒ» Π½Π° стр. 21, Π² систСмС ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ понятия, ΠΊΠ°ΠΊ однократная доставка сообщСния, Ссли ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ сбоСв.

Π’ Kafka Π΅ΡΡ‚ΡŒ Π΄Π²Π° способа Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ) смСщСниС (оффсСт): автоматичСски ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях сообщСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ нСсколько Ρ€Π°Π·, Π² Ρ‚ΠΎΠΌ случаС, Ссли сообщСниС Π±Ρ‹Π»ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» сбой Π΄ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сообщСниС, Ссли ΠΊΠΎΠΌΠΌΠΈΡ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» Π² Ρ„ΠΎΠ½Π΅ ΠΈ ваш ΠΊΠΎΠ΄ Π±Ρ‹Π» Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ приступил ΠΊ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π² Kafka 0.9 ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… вСрсиях).

Π£ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ процСссом ΠΊΠΎΠΌΠΌΠΈΡ‚Π° смСщСния Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π² API ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Kafka, установив ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ enable.auto.commit Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false ΠΈ явно Π²Ρ‹Π·Π²Π°Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

void commitSync();
void commitAsync();

Если Π²Ρ‹ ΡΡ‚Ρ€Π΅ΠΌΠΈΡ‚Π΅ΡΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ сообщСниС «хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·Β», Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΈΡ‚ΡŒ смСщСниС Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ commitSync (), Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² эту ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ сразу послС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ сообщСний.

Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ (acknowledged) сообщСния Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ для устранСния ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ задвоСния ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя создавая Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ транзакционности. Π’ Kafka ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π£ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π½Π΅Ρ‚ возмоТности ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • АвтоматичСски ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ (roll back) Π·Π°Ρ„Π΅ΠΉΠ»Π΅Π½Π½ΠΎΠ΅ сообщСниС. ΠšΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρ‹ сами Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… пэйлоадов ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ бСкэнда, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΡƒΡŽ доставку сообщСний Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ.
  • ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ сообщСния Π² нСсколько Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ² Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Как ΠΌΡ‹ скоро ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠ°ΠΌΠΈ ΠΈ партициями ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ… Π² кластСрС Kafka, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅. На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π½Π° опрСдСлСнная Ρ€Π°Π±ΠΎΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ KIP-98.
  • Π‘Π²ΡΠ·Π°Ρ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ сообщСния ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΏΠΈΠΊΠ° с ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ сообщСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚ΠΎΠΏΠΈΠΊ. ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Kafka зависит ΠΎΡ‚ мноТСства нСзависимых машин, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° шина ΠΈ Π½Π΅ дСлаСтся Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΎΠΊ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ это. НапримСр, Π½Π΅ сущСствуСт ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ Π±Ρ‹ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ ΠšΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ ΠΈ ΠŸΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ Π² Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Π’ JMS это обСспСчиваСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Session, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ MessageProducers ΠΈ MessageConsumers.

Если ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ сСмантику, Π±ΠΎΠ»Π΅Π΅ Π±Π»ΠΈΠ·ΠΊΡƒΡŽ ΠΊ Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями?

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

void seek(TopicPartition partition, long offset);
void seekToBeginning(Collection < TopicPartition > partitions);

ΠœΠ΅Ρ‚ΠΎΠ΄ seek () ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ
offsetsForTimes (Map<TopicPartition,Long> timestampsToSearch) для ΠΏΠ΅Ρ€Π΅ΠΌΠΎΡ‚ΠΊΠΈ Π² состояниС Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΌ.

НСявно, использованиС этого ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ, вСсьма вСроятно, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сообщСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Ρ€Π°Π½Π΅Π΅, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ Π·Π°Π½ΠΎΠ²ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ этого, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎΠ΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ описано Π² Π“Π»Π°Π²Π΅ 4, для отслСТивания Ρ€Π°Π½Π΅Π΅ просмотрСнных сообщСний ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ².

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

Π›ΠΈΡ‡Π½Ρ‹Π΅ наблюдСния ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ с ростом интСнсивности сообщСний, Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сообщСния сниТаСтся. БообщСния большого объСма становятся, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ†Π΅Π½Π½Ρ‹ΠΌΠΈ, Ссли ΠΈΡ… Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π² Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅.

Высокая Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ (High Availability)

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

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ Kafka состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… экзСмпляров Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сСрвСрах. Kafka Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΈΠΌΠ΅Π΅Ρ‚ своС собствСнноС Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. ИспользованиС сСтСвых Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ (SAN) Π½Π΅ рСкомСндуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ мноТСствСнныС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠ½ΠΊΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½Π«Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹.

Kafka β€” это постоянно Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ систСма. МногиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Kafka Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ гасят свои кластСры ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС всСгда обСспСчиваСт ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ рСстарта. Π­Ρ‚ΠΎ достигаСтся Π·Π° счСт гарантирования совмСстимости с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй для сообщСний ΠΈ взаимодСйствий ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ.

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

Π’ Π±Π°Π·ΠΎΠ²ΠΎΠΌ случаС Ρ‚ΠΎΠΏΠΈΠΊ создаСтся Π² кластСрС Kafka со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ свойствами:

  • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ. Как ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ здСсь, зависит ΠΎΡ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ уровня ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ чтСния.
  • ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ (Ρ„Π°ΠΊΡ‚ΠΎΡ€) Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ опрСдСляСт, сколько экзСмпляров Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Π² кластСрС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ для этой ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ZooKeepers для ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ†ΠΈΠΈ, Kafka пытаСтся справСдливо Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ Π² кластСрС. Π­Ρ‚ΠΎ дСлаСтся ΠΎΠ΄Π½ΠΈΠΌ экзСмпляром, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Ρ€ΠΎΠ»ΡŒ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°.

Π’ Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠ° ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ Ρ€ΠΎΠ»ΠΈ Π»ΠΈΠ΄Π΅Ρ€Π° (leader, master, Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ) ΠΈ послСдоватСлСй (followers, slaves, ΠΏΠΎΠ΄Ρ‡ΠΈΠ½Π΅Π½Π½Ρ‹Ρ…). Π‘Ρ€ΠΎΠΊΠ΅Ρ€, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΉ Π² качСствС Π»ΠΈΠ΄Π΅Ρ€Π° для Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΏΡ€ΠΈΠ΅ΠΌ всСх сообщСний, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€Π°ΠΌΠΈ, ΠΈ распространСниС сообщСний ΠΏΠΎ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π°ΠΌ. ΠŸΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ сообщСний Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ Ρ‚ΠΎΠΏΠΈΠΊΠ° ΠΎΠ½ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½Π° всС ΡƒΠ·Π»Ρ‹ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ Π² качСствС послСдоватСлСй для этой ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π», содСрТащий ΠΆΡƒΡ€Π½Π°Π»Ρ‹ для ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, называСтся Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ. Π‘Ρ€ΠΎΠΊΠ΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ Π² качСствС Π»ΠΈΠ΄Π΅Ρ€Π° для ΠΎΠ΄Π½ΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ ΠΈ Π² качСствС послСдоватСля для Π΄Ρ€ΡƒΠ³ΠΈΡ….

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, содСрТащий всС сообщСния, хранящиСся Ρƒ Π»ΠΈΠ΄Π΅Ρ€Π°, называСтся синхронизированной Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ (Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΎΠΉ, находящСйся Π² синхронизированном состоянии, in-sync replica). Если Π±Ρ€ΠΎΠΊΠ΅Ρ€, Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠΉ Π² качСствС Π»ΠΈΠ΄Π΅Ρ€Π° для ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ, любой Π±Ρ€ΠΎΠΊΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΈΠ»ΠΈ синхронизированном состоянии для этой ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ Π½Π° сСбя Ρ€ΠΎΠ»ΡŒ Π»ΠΈΠ΄Π΅Ρ€Π°. Π­Ρ‚ΠΎ нСвСроятно устойчивый Π΄ΠΈΠ·Π°ΠΉΠ½.

Π§Π°ΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€Π° являСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ acks, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ опрСдСляСт, сколько Ρ€Π΅ΠΏΠ»ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ (acknowledge) ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ сообщСния, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠΎΡ‚ΠΎΠΊ прилоТСния ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ: 0, 1 ΠΈΠ»ΠΈ всС. Если Π·Π°Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ all, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ сообщСния Π»ΠΈΠ΄Π΅Ρ€ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ (confirmation) ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€Ρƒ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ (acknowledgements) записи ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π΅ΠΏΠ»ΠΈΠΊ (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ саму сСбя), ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… настройкой Ρ‚ΠΎΠΏΠΈΠΊΠ° min.insync.replicas (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1). Если сообщСниС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ для прилоТСния (NotEnoughReplicas ΠΈΠ»ΠΈ NotEnoughReplicasAfterAppend).

Π’ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ создаСтся Ρ‚ΠΎΠΏΠΈΠΊ с коэффициСнтом Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ 3 (1 Π»ΠΈΠ΄Π΅Ρ€, 2 послСдоватСля для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ) ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ min.insync.replicas устанавливаСтся Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2. Π’ этом случаС, кластСр Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ², ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠ΅ΠΉ Ρ‚ΠΎΠΏΠΈΠΊΠ°, ΠΌΠΎΠ³ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π±Π΅Π· влияния Π½Π° клиСнтскиС прилоТСния.

Π­Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ нас ΠΊ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌΡƒ компромиссу ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ. РСпликация происходит Π·Π° счСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ оТидания ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ (acknowledgments) ΠΎΡ‚ послСдоватСлСй. Π₯отя, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½Π° выполняСтся ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ, рСпликация, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π½Π° Ρ‚Ρ€ΠΈ ΡƒΠ·Π»Π°, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Π½Π° Π΄Π²Π° (игнорируя ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ использования пропускной способности сСти).

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эту схСму Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Kafka Π»ΠΎΠ²ΠΊΠΎ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚ нСобходимости ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ„ΠΈΠ·ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ запись ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сообщСния Π½Π° диск с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ sync (). КаТдоС сообщСниС, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ΠΎΠΌ, Π±ΡƒΠ΄Π΅Ρ‚ записано Π² ΠΆΡƒΡ€Π½Π°Π» ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΎΡΡŒ Π² Π“Π»Π°Π²Π΅ 2, запись Π² Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ выполняСтся Π² Π±ΡƒΡ„Π΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Если это сообщСниС Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ экзСмпляр Kafka ΠΈ находится Π² Π΅Π³ΠΎ памяти, потСря Π»ΠΈΠ΄Π΅Ρ€Π° Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ само сообщСниС Π±Ρ‹Π»ΠΎ потСряно β€” Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·ΡΡ‚ΡŒ Π½Π° сСбя синхронизированная Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°.
ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ нСобходимости Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ sync () ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Kafka ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ сообщСния со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ. И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρ‡Π΅ΠΌ дольшС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ сброса (flushing) памяти Π½Π° диск, Ρ‚Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π½Π΅Ρ€Π΅Π΄ΠΊΠΈ случаи, ΠΊΠΎΠ³Π΄Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌ Kafka выдСляСтся 64 Π“Π± памяти ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅. Π’Π°ΠΊΠΎΠ΅ использованиС памяти ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр Kafka ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° скоростях Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ тысяч Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний.

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

Π’ кластСрС Kafka Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ высокая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΈ использовании ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° Kafka, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π° мноТСствС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… машин.

Π˜Ρ‚ΠΎΠ³ΠΈ

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

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ пСрСвСдСнная Ρ‡Π°ΡΡ‚ΡŒ: ПониманиС Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² сообщСний. Π˜Π·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями посрСдством ActiveMQ ΠΈ Kafka. Π“Π»Π°Π²Π° 1

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½: tele.gg/middle_java

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ слСдуСт…

Волько зарСгистрированныС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΡ‡Π°ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² опросС. Π’ΠΎΠΉΠ΄ΠΈΡ‚Π΅, поТалуйста.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π»ΠΈ Kafka Π² вашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ?

  • Π”Π°

  • НСт

  • РаньшС использовалась, сСйчас Π½Π΅Ρ‚

  • ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ

ΠŸΡ€ΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 38 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ΠΎΠ·Π΄Π΅Ρ€ΠΆΠ°Π»ΠΈΡΡŒ 8 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ