Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka

Apache Kafka – ΠΌΠΎΠΉ конспСкт

Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

β€” Π’Π΅ΠΌΠ° (Topic)
β€” ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΠΊΠΈ (consumer)
β€” Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒ (producer)
β€” Π“Ρ€ΡƒΠΏΠΏΠ° (group), Ρ€Π°Π·Π΄Π΅Π» (partition)
β€” ΠŸΠΎΡ‚ΠΎΠΊΠΈ (streams)

Kafka β€” основноС

ΠŸΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ Kafka Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ вопросы, ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ½Π΅ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠΊΡΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, Π²ΠΎΡ‚ это ΠΈ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΎ Π² этом конспСктС. Как ΡΡ‚Π°Ρ€Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ с Ρ‡Π΅Π³ΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ я Π΄Π°ΠΌ ΠΎΠ΄Π½Ρƒ ΠΈΠ· ссылок Π½ΠΈΠΆΠ΅ Π² ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°Ρ….

Apache Kafka – диспСтчСр сообщСний Π½Π° Java ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Π’ Kafka Π΅ΡΡ‚ΡŒ Ρ‚Π΅ΠΌΠ° сообщСния Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΈΡˆΡƒΡ‚ сообщСния ΠΈ Π΅ΡΡ‚ΡŒ подписчики Π² Ρ‚Π΅ΠΌΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ эти сообщСния, всС сообщСния Π² процСссС диспСтчСризации ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π½Π° диск ΠΈ Π½Π΅ зависит ΠΎΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Π’ состав Kafka входят Π½Π°Π±ΠΎΡ€ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΏΠΎ созданию Ρ‚Π΅ΠΌ, Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ, подписчики для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈ Π΄Ρ€. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Kafka Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ Β«ZooKeeperΒ», поэтому Π²Π½Π°Ρ‡Π°Π»Π΅ стартуСм ZooKeeper (zkServer.cmd) Π·Π°Ρ‚Π΅ΠΌ сСрвСр Kafka (kafka-server-start.bat), ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ находятся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ°ΠΏΠΊΠ°Ρ… bin, Ρ‚Π°ΠΌ ΠΆΠ΅ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹.

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ‚Π΅ΠΌΡƒ Kafka ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ΠΎΠΉ, ходящСй Π² состав

здСсь ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ сСрвСр zookeeper, replication-factor это количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΆΡƒΡ€Π½Π°Π»Π° сообщСний, partitions – количСство Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π² Ρ‚Π΅ΠΌΠ΅ (ΠΎΠ± этом Π½ΠΈΠΆΠ΅) ΠΈ собствСнно сама Ρ‚Π΅ΠΌΠ° – β€œout-topic”.

Для простого тСстирования ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ входящиС Π² состав Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ прилоТСния Β«kafka-console-consumerΒ» ΠΈ Β«kafka-console-producerΒ», Π½ΠΎ я сдСлаю свои. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΠΊΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ Π² Π³Ρ€ΡƒΠΏΠΏΡ‹, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΌ прилоТСниям Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ сообщСния ΠΈΠ· Ρ‚Π΅ΠΌΡ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. g7ugnarc1bpr1wiwv4l5 kdvo0. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-g7ugnarc1bpr1wiwv4l5 kdvo0. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° g7ugnarc1bpr1wiwv4l5 kdvo0. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прилоТСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½Π° своя ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, читая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΎ выполняСт пСрСмСщСния указатСля послСднСго ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΠΎΠ³ΠΎ сообщСния (offset), это называСтся фиксациСй (commit) чтСния. И Ρ‚Π°ΠΊ Ссли ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ сообщСниС Π² Ρ‚Π΅ΠΌΡƒ, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΌ этой Ρ‚Π΅ΠΌΡ‹ Ссли ΠΎΠ½ Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ½ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Ссли Π΅ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ (client.id), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹, Π½ΠΎ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ…, Ρ‚ΠΎ сообщСния ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ Π½Π΅ зависимо Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΈ Π² Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° Π±ΡƒΠ΄ΡƒΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ сообщСний ΠΈ нСзависимоС Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΡ… потрСбитСлями ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π΅ΠΌΡ‹.

Но Π΅ΡΡ‚ΡŒ ситуация, ΠΊΠΎΠ³Π΄Π° сообщСния Π² Ρ‚Π΅ΠΌΡƒ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ быстрСС Ρ‡Π΅ΠΌ ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ, Ρ‚.Π΅. ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡ… дольшС. Для этого Π² Ρ‚Π΅ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ (partitions) ΠΈ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΠ΅ для этой Ρ‚Π΅ΠΌΡ‹.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. xsjqbqelhvg. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-xsjqbqelhvg. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° xsjqbqelhvg. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ распрСдСлСниС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π½Π΅ всС сообщСния Π² Ρ‚Π΅ΠΌΠ΅ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΠΎΠΉΠ΄ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½ΠΎΠ³ΠΎ потрСбитСля. И Ρ‚ΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½Π° стратСгия, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ сообщСния ΠΏΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ. Π•ΡΡ‚ΡŒ нСсколько стратСгий: round-robin – это ΠΏΠΎ ΠΊΡ€ΡƒΠ³Ρƒ, ΠΏΠΎ Ρ…ΡΡˆ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΊΠ»ΡŽΡ‡Π°, ΠΈΠ»ΠΈ явноС ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° Ρ€Π°Π·Π΄Π΅Π»Π° ΠΊΡƒΠ΄Π° ΠΏΠΈΡΠ°Ρ‚ΡŒ. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΠΊΠΈ Π² этом случаС Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ ΠΏΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ. Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, подписчиков Π±ΡƒΠ΄Π΅Ρ‚ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ большС Ρ‡Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², Ρ‚ΠΎ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сообщСния. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΠΈ.

НапримСр послС создания Ρ‚Π΅ΠΌΡ‹ с ΠΎΠ΄Π½ΠΈΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ я ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ» Π½Π° Π΄Π²Π° Ρ€Π°Π·Π΄Π΅Π»Π°.

my_kafka_run.cmd com.home.SimpleProducer out-topic (ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ)
my_kafka_run.cmd com.home.SimpleConsumer out-topic testGroup01 client01 (ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ подписчик)
my_kafka_run.cmd com.home.SimpleConsumer out-topic testGroup01 client02 (Π²Ρ‚ΠΎΡ€ΠΎΠΉ подписчик)

Начав Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² ΠΈΠ·Π΄Π°Ρ‚Π΅Π»Π΅ ΠΏΠ°Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΊΡ‚ΠΎ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚. Π’Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ стратСгии распрСдСлСния ΠΏΠΎ Ρ…ΡΡˆΡƒ ΠΊΠ»ΡŽΡ‡Π° сообщСниС m:1 ΠΏΠΎΠΏΠ°Π»ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ client01

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. i1l1ntorry2kmki6i357ciockru. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-i1l1ntorry2kmki6i357ciockru. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° i1l1ntorry2kmki6i357ciockru. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Π° сообщСниС n:1 ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ client02

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ml4cpybtevragz6jgcq3jryi1l0. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-ml4cpybtevragz6jgcq3jryi1l0. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ml4cpybtevragz6jgcq3jryi1l0. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Если Π½Π°Ρ‡Π½Ρƒ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π±Π΅Π· указания ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сдСлал Π² ΠΈΠ·Π΄Π°Ρ‚Π΅Π»Π΅), Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½Π° стратСгия ΠΏΠΎ ΠΊΡ€ΡƒΠ³Ρƒ. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ сообщСниС Β«mΒ» ΠΏΠΎΠΏΠ°Π»ΠΎ client01, Π° ΡƒΠΆΠ΅ Π²Ρ‚Ρ€ΠΎΠ΅ client02.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

И Π΅Ρ‰Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ key:value:partition

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. z2 z5hja dypmam2i 06kmp26ga. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-z2 z5hja dypmam2i 06kmp26ga. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° z2 z5hja dypmam2i 06kmp26ga. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Π Π°Π½Π΅Π΅ Π² стратСгии ΠΏΠΎ Ρ…ΡΡˆ, m:1 ΡƒΡ…ΠΎΠ΄ΠΈΠ» Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ (client01), Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ явном ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Ρ€Π°Π·Π΄Π΅Π»Π° (β„–1, Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ с 0) β€” ΠΊ client02.

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. 0oqw3dey87kzs ymc yelwjq4we. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-0oqw3dey87kzs ymc yelwjq4we. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 0oqw3dey87kzs ymc yelwjq4we. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

МоТно ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ описания Π³Ρ€ΡƒΠΏΠΏ, Ρ‚Π΅ΠΌΡ‹ соотвСтствСнно:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. 2z 6pe9kfn6. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-2z 6pe9kfn6. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 2z 6pe9kfn6. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Для запуска своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ я сдСлал ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» β€” my_kafka_run.cmd

my_kafka_run.cmd com.home.SimpleConsumer out-topic testGroup02 client01

Kafka Streams

Π˜Ρ‚Π°ΠΊ, ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π² Kafka это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ ΠΈΠ· Ρ‚Π΅ΠΌΡ‹, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, трансформации ΠΈ Π·Π°Ρ‚Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ Π΄Π°Π»Π΅Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π΅ΠΌΡƒ ΠΈΠ»ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π‘Π”, Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΊΡƒΠ΄Π° ΡƒΠ³ΠΎΠ΄Π½ΠΎ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ (filter), прСобразования (map), Ρ‚Π°ΠΊ ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ (count, sum, avg). Для этого Π΅ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы KStream, KTable, Π³Π΄Π΅ KTable ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ значСниями ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ постоянно ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ поступлСния Π½ΠΎΠ²Ρ‹Ρ… сообщСний Π² Ρ‚Π΅ΠΌΡƒ. Как это происходит?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

НапримСр, ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΈΡˆΠ΅Ρ‚ Π² Ρ‚Π΅ΠΌΡƒ события (сообщСния), Kafka всС сообщСния сохраняСт Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ хранСния (Retention Policy), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 7 Π΄Π½Π΅ΠΉ. НапримСр события измСнСния ΠΊΠΎΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ это ΠΏΠΎΡ‚ΠΎΠΊ, Π΄Π°Π»Π΅Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ·Π½Π°Ρ‚ΡŒ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎΠ³Π΄Π° создадим Stream ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»Π° ΠΈ посчитаСт срСднСС, Π³Π΄Π΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ акция, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ – срСднСС (это ΡƒΠΆΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Π° с состояниСм). Π’ΡƒΡ‚ Π΅ΡΡ‚ΡŒ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ – ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ агрСгирования Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ состояниС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ вновь ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ сообщСния (события) Π² Ρ‚Π΅ΠΌΡƒ, Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ, Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ (state store), Π΄Π°Π»Π΅Π΅ вновь ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π² ΠΆΡƒΡ€Π½Π°Π», Stream ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ измСнСния ΠΊ ΡƒΠΆΠ΅ сохранСнному ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ сохранСния состояния. И Ρ‚ΡƒΡ‚ Ρ‚ΠΎΠΆΠ΅ stream Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ это Π½Π΅ зависимо ΠΎΡ‚ издатСля. НапримСр, ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΈΡˆΠ΅Ρ‚ сообщСния, Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° β€” stream Π² это врСмя Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄Π΅Ρ‚, всС сообщСния Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ ΠΈ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°-stream станСт Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ, ΠΎΠ½Π° сдСлаСт вычислСния, сохранит состояниС, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ смСщСниС для ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Ρ… сообщСний (ΠΏΠΎΠΌΠ΅Ρ‚ΠΈΡ‚ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Ρ‹) ΠΈ Π² дальнСйшСм ΠΎΠ½Π° ΡƒΠΆΠ΅ ΠΊ Π½ΠΈΠΌ Π½Π΅ вСрнСтся, Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ эти сообщСния ΡƒΠΉΠ΄ΡƒΡ‚ ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»Π° (kafka-logs). Π’ΡƒΡ‚ Π²ΠΈΠ΄ΠΈΠΌΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΆΡƒΡ€Π½Π°Π» (kafka-logs) ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° хранСния ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ это. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ состояниС Kafka Stream Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² RocksDB. Π–ΡƒΡ€Π½Π°Π» сообщСний ΠΈ всС с Π½ΠΈΠΌ связанноС (Ρ‚Π΅ΠΌΡ‹, смСщСния, ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΈ Π΄Ρ€.) располагаСтся ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ Β«log.dirs=kafka-logsΒ» Ρ„Π°ΠΉΠ»Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Β«config\server.propertiesΒ», Ρ‚Π°ΠΌ ΠΆΠ΅ указываСтся ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° хранСния ΠΆΡƒΡ€Π½Π°Π»Π° Β«log.retention.hours=48Β». ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π»ΠΎΠ³Π°

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. khwkoc2nstwvlbke ft p764. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-khwkoc2nstwvlbke ft p764. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° khwkoc2nstwvlbke ft p764. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

А ΠΏΡƒΡ‚ΡŒ ΠΊ Π±Π°Π·Π΅ с состояниями stream указываСтся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ прилоТСния

Бостояния хранятся ΠΏΠΎ Π˜Π” прилоТСниям нСзависимо (StreamsConfig.APPLICATION_ID_CONFIG). ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Stream. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Stream ΠΈΠ· ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΡΡ‚ΡŒ поставкС (с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ для экспСримСнта), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ считаСт количСство ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… слов ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΈ подписчик. ΠŸΠΈΡΠ°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π² Ρ‚Π΅ΠΌΡƒ in-topic

my_kafka_run.cmd com.home.SimpleProducer in-topic

my_kafka_run.cmd com.home.KafkaCountStream in-topic app_01

my_kafka_run.cmd com.home.SimpleProducer in-topic
my_kafka_run.cmd com.home.SimpleConsumer out-topic testGroup01 client01

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. 2nyjq9k30vvyzrsq0crlgdbszkw. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-2nyjq9k30vvyzrsq0crlgdbszkw. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° 2nyjq9k30vvyzrsq0crlgdbszkw. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

НачинаСм Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ слова ΠΈ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΡ… подсчСт с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΊΠΎΠΉ Stream App-ID ΠΈΡ… подсчитал

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. hqzxak. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-hqzxak. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° hqzxak. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Π Π°Π±ΠΎΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ΄Ρ‚ΠΈ нСзависимо, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Stream ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ‚Π΅ΠΌΡƒ, ΠΎΠ½ ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈ стартС посчитаСт. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Stream c App-ID = app_02 (это Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π˜Π”), ΠΎΠ½ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΆΡƒΡ€Π½Π°Π» (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ событий, которая сохраняСтся согласно ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ΅ Retention), подсчитаСт ΠΊΠΎΠ»-Π²ΠΎ, сохранит состояниС ΠΈ выдаст Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΄Π²Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π½Π°Ρ‡Π°Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½ΠΎΠ΅ врСмя ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдставим наш ΠΆΡƒΡ€Π½Π°Π» устарСл (Retention ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°) ΠΈΠ»ΠΈ ΠΌΡ‹ Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ (Ρ‡Ρ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π°Π΄ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ) ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ stream с App-ID = app_03 (я для этого остановил Kafka, ΡƒΠ΄Π°Π»ΠΈΠ» kafka-logs ΠΈ вновь стартовал) ΠΈ Π²Π²ΠΎΠ΄ΠΈΠΌ Π² Ρ‚Π΅ΠΌΡƒ Π½ΠΎΠ²ΠΎΠ΅ сообщСниС ΠΈ Π²ΠΈΠ΄ΠΈΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ (app_01) ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ» подсчСт Π° Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π½Π°Ρ‡Π°Π» с нуля.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Если Π·Π°Ρ‚Π΅ΠΌ запустим ΠΏΠΎΡ‚ΠΎΠΊ app_02, Ρ‚ΠΎ ΠΎΠ½ Π΄ΠΎΠ³ΠΎΠ½ΠΈΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π²Π½Ρ‹ Π² значСниях. Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° стало понятно, ΠΊΠ°ΠΊ Kafka ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΆΡƒΡ€Π½Π°Π», добавляСт ΠΊ Ρ€Π°Π½Π΅Π΅ сохранСнному ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’Π΅ΠΌΠ° Kafka ΠΎΡ‡Π΅Π½ΡŒ ΠΎΠ±ΡˆΠΈΡ€Π½Π°, я для сСбя сдСлал ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС πŸ™‚

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Как Apache Kafka ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ 200К ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ Π² кластСрС?

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. . Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° . Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

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

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

Π‘Ρ€ΠΎΠΊΠ΅Ρ€ Kafka ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ выполняСт ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сбои Π² обслуТивании ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ этапы. (1) Π‘ΠΈΠ³Π½Π°Π» SIG_TERM отправляСтся Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹. (2) Π‘Ρ€ΠΎΠΊΠ΅Ρ€ отправляСт запрос ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ, увСдомляя, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π³ΠΎΡ‚ΠΎΠ² ΠΊ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ. (3) ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π·Π°Ρ‚Π΅ΠΌ мСняСт Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ Π½Π° этом Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² ΠΈ сохраняСт эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π² ZooKeeper. (4) ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ отправляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΎΠ²Ρ‹Ρ… Π»ΠΈΠ΄Π΅Ρ€Π°Ρ… Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌ Π² кластСрС. (5) ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ отправляСт Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰Π΅ΠΌΡƒΡΡ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° запрос, ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ свой процСсс. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ влияСт Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈΡ… Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ². Π­Ρ‚ΠΎΡ‚ процСсс ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ Π½Π° РисункС 1. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ шаги (4) ΠΈ (5) ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. image loader. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:

Рис. 1. (1) Π˜Π½ΠΈΡ†ΠΈΠ°Ρ†ΠΈΡ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 1; (2) Π±Ρ€ΠΎΠΊΠ΅Ρ€ 1 отправляСт запрос ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρƒ Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ 0; (3) ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ записываСт Π½ΠΎΠ²Ρ‹Ρ… Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² Π² ZooKeeper; (4) ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ отправляСт ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½ΠΎΠ²Ρ‹Ρ… Π»ΠΈΠ΄Π΅Ρ€Π°Ρ… Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 2; (5) ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ отправляСт ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ 1.

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

Начиная с Kafka 1.1.0 ΠΈ Π΄Π°Π»Π΅Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ происходит Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΏΡ€ΠΈ записи Π² ZooKeeper ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ асинхронный API. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€Π° для ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° этот процСсс Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, Π° ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ асинхронно Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ Π² ZooKeeper, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΆΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса. Π­Ρ‚ΠΎ позволяСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ запросы Π½Π° ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠΌ Kafka ΠΈ сСрвСром ZooKeeper ΠΈ сниТаСт ΠΎΠ±Ρ‰Π΅Π΅ врСмя Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, информация ΠΎ Π½ΠΎΠ²Ρ‹Ρ… Π»ΠΈΠ΄Π΅Ρ€Π°Ρ… отправляСтся Π±Π°Ρ‚Ρ‡Π°ΠΌΠΈ. ВмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ запроса для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ отправляСт ΠΎΠ΄ΠΈΠ½ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ запрос с Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ ΠΎΡ‚ всСх Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹Ρ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ.

ВрСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΡ‚ΠΊΠ°Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ. Если случаСтся ΠΎΡ‚ΠΊΠ°Π· ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, кластСр Kafka автоматичСски Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠ² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ свСТСназначСнный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ состояниС всСх ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ Π² кластСрС ΠΈΠ· ZooKeeper. Если ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΉ сбой ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°, ΠΎΠΊΠ½ΠΎ нСдоступности ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π»ΠΈΡ‚ΡŒΡΡ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, сколько продолТаСтся срок дСйствия сСссии ZooKeeper, плюс врСмя ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ состояния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сокращСниС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ состояния ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ€Π΅Π΄ΠΊΠΎΠΌ случаСм. Π”ΠΎ вСрсии 1.1.0 Π² Kafka для ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синхронный API ZooKeeper. Начиная с вСрсии 1.1.0 это Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° асинхронный API для сокращСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ.

ΠœΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ тСсты для ΠΎΡ†Π΅Π½ΠΊΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°. Для ΠΎΠ±ΠΎΠΈΡ… тСстов ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ€ ΠΈΠ· пяти ΡƒΠ·Π»ΠΎΠ² ZooKeeper Π½Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сСрвСрах.

Для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ тСста ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ кластСр Kafka с ΠΏΡΡ‚ΡŒΡŽ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°ΠΌΠΈ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… сСрвСрах. Π’ этом кластСрС ΠΌΡ‹ создали 25 000 Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ², Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ‚ΠΎΠΏΠΈΠΊΠ΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΈ Π΄Π²Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² 50 000 ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ Π±Ρ‹Π»ΠΎ 10 000 ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π·Π°ΠΌΠ΅Ρ€ΠΈΠ»ΠΈ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ понадобилось для ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ прСдставлСны Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π½ΠΈΠΆΠ΅.

ВСрсияKafka 1.0.0Kafka 1.1.0
ВрСмя ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ6,5 ΠΌΠΈΠ½ΡƒΡ‚3 сСкунды

Π‘ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ Π΄Π°Π΅Ρ‚ исправлСниС Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ проводятся Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ записи для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² кластСрС ΠΏΡ€ΠΈ смСнС Π»ΠΈΠ΄Π΅Ρ€Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ. ΠŸΡ€ΠΎΡΡ‚ΠΎ исправив Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΆΡƒΡ€Π½Π°Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΡ‹ снизили врСмя ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ с 6,5 ΠΌΠΈΠ½ΡƒΡ‚ Π΄ΠΎ 30 сСкунд. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° асинхронный API ZooKeeper снизил это врСмя Π΄ΠΎ 3 сСкунд. Π­Ρ‚ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ сущСствСнно снизили врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ кластСра Kafka.

Для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ тСста ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ кластСр Kafka, состоящий ΠΈΠ· пяти Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ², создали 2 000 Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ², Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΎ 50 ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ ΠΈ ΠΎΠ΄Π½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ΅. Π’ суммС Π²ΠΎ всСм кластСрС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ 100 000 ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π·Π°ΠΌΠ΅Ρ€ΠΈΠ»ΠΈ врСмя ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ состояния ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° ΠΈ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ 100% ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ (врСмя ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ снизилось с 28 сСкунд Π² Kafka 1.0.0 Π΄ΠΎ 14 сСкунда Π² Kafka 1.1.0).

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

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² KAFKA-5642 ΠΈ KAFKA-5027.

ΠžΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ: Команда Π‘Π»Ρ‘Ρ€ΠΌΠ° Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ видСокурс ΠΏΠΎ Apache Kafka. Π‘ΠΏΠΈΠΊΠ΅Ρ€Ρ‹ β€” Анатолий Π‘ΠΎΠ»Π΄Π°Ρ‚ΠΎΠ² ΠΈΠ· Авито ΠΈ АлСксандр ΠœΠΈΡ€ΠΎΠ½ΠΎΠ² ΠΈΠ· Stripe. Π’Π²ΠΎΠ΄Π½Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ ΡƒΠΆΠ΅ доступны Π½Π° Youtube. Π Π΅Π»ΠΈΠ· ΠΏΠΎΠ»Π½ΠΎΠΉ вСрсии курса β€” 7 апрСля 2021. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

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

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

ГЛАВА 3

Kafka

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

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

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

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

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

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. image loader. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:
Figure 3-1. ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Kafka

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

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

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

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

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

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

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. image loader. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:
Figure 3-2. ΠšΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ

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

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. image loader. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:
Figure 3-3. Π”Π²Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΠ°Ρ… ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ

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

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. image loader. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:
Figure 3-4. Π”Π²Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ

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

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

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

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

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

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

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. image loader. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:
Figure 3-5. Один ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ

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

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. image loader. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka Ρ„ΠΎΡ‚ΠΎ. Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka-image loader. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² kafka. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° image loader. Π­Ρ‚ΠΎ ΠΌΠΎΠΉ конспСкт, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ ΠΈ ΠΏΠΎ сути Π·Π°Ρ‚Ρ€ΠΎΠ½Ρƒ Ρ‚Π°ΠΊΠΈΠ΅ понятия Kafka ΠΊΠ°ΠΊ:
Figure 3-6. Π”Π²Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

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

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *