ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

PVbase: compacted topic Π² Apache Kafka

ΠŸΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Big Data, ΠΈ Π·Π°Π΄Π°ΠΉΡ‚Π΅ сСбС вопрос: Β«Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π± Π² 100 000 Ρ€Π°Π·?Β» ΠžΡ‚Π²Π΅Ρ‚ прост: producer ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ Π·Π°ΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ сообщСния, Π² ΠΈΡ‚ΠΎΠ³Π΅ Π½Π° дискС закончится мСсто для ΠΈΡ… хранСния.

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

Log Compaction (сТатиС ΠΆΡƒΡ€Π½Π°Π»Π°) – стратСгия, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² Apache Kafka – ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ сообщСний, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌ для вСдСния ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² событий, чтСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ с ΠΏΠ΅Ρ€ΠΈΡ„Π΅Ρ€ΠΈΠΉΠ½Ρ‹Ρ… устройств, сбора ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ посСтитСлСй Π½Π° сайтС. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ систСм, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Kafka, ΡΠ²Π»ΡΡŽΡ‚ΡΡ распрСдСлёнными ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ большиС ΠΎΠ±ΡŠΡ‘ΠΌΡ‹ сообщСний Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π—Π΄Π΅ΡΡŒ я ΠΏΠΎΡΡ‚Π°Ρ€Π°ΡŽΡΡŒ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡŽΠ°Π½ΡΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ compacted topic. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ log compaction, эта ΡΡ‚Π°Ρ‚ΡŒΡ для вас.

Π‘ΡƒΡ‚ΡŒ сТатия ΠΆΡƒΡ€Π½Π°Π»Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎΠΌ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ записСй, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρƒ нас Π΅ΡΡ‚ΡŒ послСднСС ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

Для простоты понимания процСсса ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ Ρ‚Π°ΠΊΡƒΡŽ аналогию ΠΈΠ· ΠΆΠΈΠ·Π½ΠΈ: допустим, Π½Π΅ΠΊΠΈΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ (Иван Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ дСнь смотрит Π½Π° градусник ΠΈ вносит записи ΠΎ Ρ‚Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π΅ Π² элСктронный ΠΆΡƒΡ€Π½Π°Π» (Π² Ρ€Π°Π·Π΄Π΅Π» Β«Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° Π²ΠΎΠ·Π΄ΡƒΡ…Π°Β»):

2 ноября 2021, 14:40

3 ноября 2021, 10:10

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

Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΆΡƒΡ€Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ записями, поэтому Ρ€Π°Π· Π² нСдСлю ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Василий ΠŸΠ΅Ρ‚Ρ€ΠΎΠ²ΠΈΡ‡ ΠΈ чистит Π΅Π³ΠΎ, удаляя всС сообщСния ΠΈ оставляя Ρ‚Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послСднюю запись (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ смысла):

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ описании ΠΏΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Kafka:

ΠšΠ»ΡŽΡ‡ (key): Иван Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡;

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (value): +10 градусов;

ΠœΠ΅Ρ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (timestamp): 4 ноября 2021, 15:30;

Π’ΠΎΠΏΠΈΠΊ (topic): способ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² сообщСний ΠΏΠΎ катСгориям [4] – Ρ€Π°Π·Π΄Π΅Π» ΠΆΡƒΡ€Π½Π°Π»Π° Β«Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° Π²ΠΎΠ·Π΄ΡƒΡ…Π°Β»;

Π Π°Π·Π΄Π΅Π» (partition): ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сообщСний Ρ‚ΠΎΠΏΠΈΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ упорядочСны Π² порядкС ΠΈΡ… поступлСния [4];

Зная всё это, сообщСния ΠΎΡ‚ Ивана Π˜Π²Π°Π½ΠΎΠ²ΠΈΡ‡Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

ЖУРНАЛ Π‘ΠžΠžΠ‘Π©Π•ΠΠ˜Π™

Π’ΠΎΠΏΠΈΠΊ (topic): Ρ€Π°Π·Π΄Π΅Π» ΠΆΡƒΡ€Π½Π°Π»Π° Β«Π’Π΅ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΡƒΡ€Π° Π²ΠΎΠ·Π΄ΡƒΡ…Π°Β»

Π Π°Π·Π΄Π΅Π» (partition)

ΠšΠ»ΡŽΡ‡ (key)

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (value)

ΠœΠ΅Ρ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (timestamp)

2 ноября 2021, 14:40

3 ноября 2021, 10:10

4 ноября 2021, 15:30

CтратСгия Log Compaction Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ Kafka всСгда Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ послСднСС извСстноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° сообщСния Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° Ρ‚ΠΎΠΏΠΈΠΊΠ°. Π’ основном ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚Π°ΠΊΠΈΡ… сцСнариСв, ΠΊΠ°ΠΊ восстановлСниС ΠΊ ΡΠΎΡΡ‚ΠΎΡΠ½ΠΈΡŽ Π΄ΠΎ сбоя прилоТСния ΠΈΠ»ΠΈ систСмы, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ кСша послС пСрСзапуска прилоТСния. ΠŸΡ€ΠΎΡ‰Π΅ говоря, Apache Kafka Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ записи ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ старыС вСрсии с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ.

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Π° Kafka позволяСт потрСбитСлям (consumer-Π°ΠΌ) Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ своё состояниС ΠΈΠ· записи compacted topic. Π­Ρ‚ΠΎΡ‚ процСсс Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ порядок сообщСний, Π½ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, смСщСниС (offset) Ρ€Π°Π·Π΄Π΅Π»Π° для сообщСния Π½Π΅ измСнится. Π–ΡƒΡ€Π½Π°Π» Π΄Π°Π½Π½Ρ‹Ρ… состоит ΠΈΠ· Π³ΠΎΠ»ΠΎΠ²Ρ‹ (head) ΠΈ хвоста (tail). КаТдоС Π½ΠΎΠ²ΠΎΠ΅ сообщСниС добавляСтся Π² ΠΊΠΎΠ½Π΅Ρ† head. ВсС записи log compaction находятся Π² хвостС ΡƒΠΏΠ»ΠΎΡ‚Π½Ρ‘Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ топикРис. 1. АрхитСктура Kafka – смСщСниС Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ²

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ удалСния Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΎΠΏΠΈΠΊΠ°Ρ… основан Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… свойствах:

cleanup.policy=delete – Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ удалСния Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… сообщСний;

retention.bytes – опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, послС ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ сообщСния;

retention.ms – опрСдСляСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ возраст сообщСния, послС ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

ВаТная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ всС ΡƒΠΏΡƒΡΠΊΠ°ΡŽΡ‚! Π‘Ρ€ΠΎΠΊΠ΅Ρ€ Kafka Ρ…Ρ€Π°Π½ΠΈΡ‚ сообщСния Π² сСгмСнтах. Они Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° всС сообщСния Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ сСгмСнтС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ критСриям retention policy.

Но Ссли ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ cleanup.policy=compact, Ρ‚ΠΎ стратСгия Π±ΡƒΠ΄Π΅Ρ‚ compacted topic. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΡƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π²Π°ΠΆΠ½Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹:

LogCleaner – ΠΏΡƒΠ» ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ сТатиС Π»ΠΎΠ³Π°;

LogTail – Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠ³Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сТатия;

LogHead – Ρ‡Π°ΡΡ‚ΡŒ Π»ΠΎΠ³Π°, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сТатия Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡŒ.

Π‘Π°ΠΌ процСсс Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

LogCleaner опрСдСляСт Π»ΠΎΠ³ с наибольшим ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ΠΌ logHead/logTail.

Он опрСдСляСт всС offset’Ρ‹ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π² logHead.

ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ самый старый сСгмСнт, удаляя сообщСния, ΠΊΠ»ΡŽΡ‡ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ дальшС Π² Π»ΠΎΠ³Π΅.

ΠŸΠΎΠ΄ΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ сСгмСнт Π½Π° сТатый.

Π’Π°ΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ настройки logCleaner:

log.cleanup.policy=compact – основноС свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ log compaction;

log.cleaner.max.compaction.lag.ms – врСмя ΠΆΠΈΠ·Π½ΠΈ сообщСния, ΠΊΠ»ΡŽΡ‡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сущСствуСт дальшС ΠΏΠΎ Π»ΠΎΠ³Ρƒ;

log.cleaner.threads – ΠΊΠΎΠ»-Π²ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² logCleaner.

Π­Ρ‚Π° стратСгия удаляСт Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ записи, Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ»ΡŽΡ‡ΠΈ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

Π”Π΅Ρ‚Π°Π»ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ удалСния Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚ΠΎΠΏΠΈΔΈΠ°Ρ… основан Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… свойствах:

cleanup.policy=delete – Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ удалСния Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… сообщСний;

retention.bytes – опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π·Π΄Π΅Π»Π°, послС ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ сообщСния;

retention.ms – опрСдСляСт ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ возраст сообщСния, послС ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° ΠΆΠΈΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΔΈΠ°ΔΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ log compaction.

Π‘ΔΈΠ°Ρ‡Π°Π² послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Apache Kafka (Π² ΠΌΠΎΡ‘ΠΌ случаС 2.7.0), ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅ΠΌ zookeeper ΠΈ Π±Ρ€ΠΎΔΈΠ΅Ρ€Π° с default-настройĸами:

Π—Π°Ρ‚Π΅ΠΌ создадим Ρ‚ΠΎΠΏΠΈΔΈ:

Π’ ΠΎΔΈΠ½Π΅ producer’Π° напишСм сообщСния:

Π’ ΠΎΔΈΠ½Π΅ consumer’a Π²Ρ‹ Π½Π°ΠΉΠ΄Ρ‘Ρ‚Π΅ всС Ρ‚Π΅ ΠΆΠ΅ сообщСния. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‡Π΅Ρ€Π΅Π· 60–90 сСкунд пСрСзапуститС consoleconsumer, ΠΈ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅:

Π‘ΠΆΠ°Ρ‚Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ рСсурсов памяти ΠΈ ЦП Π²Π°ΡˆΠΈΡ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ². Для ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ сТатия ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Π½ΡƒΠΆΠ½Π° ΠΊΠ°ΠΊ ΠΊΡƒΡ‡Π° (ΠΏΠ°ΠΌΡΡ‚ΡŒ), Ρ‚Π°ΠΊ ΠΈ Ρ†ΠΈΠΊΠ»Ρ‹ ЦП Π½Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°Ρ…, Π° Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ΅ сТатиС ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² ΠΏΠΎΠ΄Π²Π΅Ρ€Π³Π°Π΅Ρ‚ Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ² риску ΠΈΠ·-Π·Π° Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ роста Ρ€Π°Π·Π΄Π΅Π»Π°.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ log.cleaner.dedupe.buffer.size ΠΈ log.cleaner.threads Π½Π° своих Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°Ρ…, Π½ΠΎ ΠΈΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ эти значСния Π²Π»ΠΈΡΡŽΡ‚ Π½Π° использованиС ΠΊΡƒΡ‡ΠΈ. Если Π±Ρ€ΠΎΠΊΠ΅Ρ€ выдаст ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ OutOfMemoryError, ΠΎΠ½ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡΡ ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΡ‚ количСства ΠΎΡ‡ΠΈΡ‰Π°Π΅ΠΌΡ‹Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Ρ‚Π΅ΠΌΡ‹, Ρ‚Π°ΠΊ ΠΈ ΠΎΡ‚ скорости ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠ»ΡŽΡ‡Π° сообщСний Π² этих Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….

Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ ΠΆΡƒΡ€Π½Π°Π»Π° – Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для сцСнариСв ΠΊΠ΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ просто ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ послСднСС состояниС compacted topic’Π°.

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

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ взгляд Π½Π° Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π² Kafka

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΡΡ‚Π°Ρ‚ΡŒΠΈ Π½Π° английском
Kafka ΠΏΠΎΠ²ΡΡŽΠ΄Ρƒ. Π“Π΄Π΅ Π΅ΡΡ‚ΡŒ микросСрвисы ΠΈ распрСдСлСнныС вычислСния, Π° ΠΎΠ½ΠΈ сСйчас популярны, Ρ‚Π°ΠΌ ΠΏΠΎΡ‡Ρ‚ΠΈ навСрняка Π΅ΡΡ‚ΡŒ ΠΈ Kafka. Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π² Kafka Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ хранСния.

Π―, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, постарался Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ, Π½ΠΎ ΠΊΠΎΠΏΠ°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅ΠΌ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ, поэтому ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ прСдставлСниС ΠΎ Kafka Π½Π΅ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚. Π˜Π½Π°Ρ‡Π΅ Π½Π΅ всС Π±ΡƒΠ΄Π΅Ρ‚ понятно. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π½Π° свой страх ΠΈ риск.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ считаСтся, Ρ‡Ρ‚ΠΎ Kafka β€” это распрСдСлСнная ΠΈ рСплицированная ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний. Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния всС Π²Π΅Ρ€Π½ΠΎ, Π½ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ сообщСний Π½Π΅ всС ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: распрСдСлСнный ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ². Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° каТСтся Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ, вСдь ΠΌΡ‹ всС прСкрасно Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° диск. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π² этом случаС Π½Π° диск ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ сообщСния, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² Kafka.
ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ Π² Kafka ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Π²Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°: ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠΈ. ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ β€” это Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ хранСния сообщСний, Π° Ρ‚ΠΎΠΏΠΈΠΊΠΈ β€” Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… эти ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ находятся.

Π‘ основной Ρ‚Π΅ΠΎΡ€ΠΈΠ΅ΠΉ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈΡΡŒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

Π― создам Π² Kafka Ρ‚ΠΎΠΏΠΈΠΊ с трСмя партициями. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ Π·Π° ΠΌΠ½ΠΎΠΉ, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит ΠΊΠΎΠΌΠ°Π½Π΄Π° для локальной настройки Kafka Π² Windows.

Π’ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² Kafka создано Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°:

$ tree freblogg*
freblogg-0
|— 00000000000000000000.index
|— 00000000000000000000.log
|— 00000000000000000000.timeindex
`— leader-epoch-checkpoint
freblogg-1
|— 00000000000000000000.index
|— 00000000000000000000.log
|— 00000000000000000000.timeindex
`— leader-epoch-checkpoint
freblogg-2
|— 00000000000000000000.index
|— 00000000000000000000.log
|— 00000000000000000000.timeindex
`— leader-epoch-checkpoint

ΠœΡ‹ создали Π² Ρ‚ΠΎΠΏΠΈΠΊΠ΅ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΈ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ β€” свой ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС. Π•Ρ‰Π΅ Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² (index, log ΠΈ Ρ‚ Π΄.), Π½ΠΎ ΠΎ Π½ΠΈΡ… Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Kafka Ρ‚ΠΎΠΏΠΈΠΊ β€” это логичСскоС объСдинСниС, Π° партиция β€” фактичСская Π΅Π΄ΠΈΠ½ΠΈΡ†Π° хранСния. Π’ΠΎ, Ρ‡Ρ‚ΠΎ физичСски хранится Π½Π° дискС. Как устроСны ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ?

ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ

Π’ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ партиция β€” это нСизмСняСмая коллСкция (ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ) сообщСний. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ сообщСния Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ. И ΠΏΠΎΠ΄ Β«ΠΌΡ‹Β» я ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽ ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ΠΎΠ² Π² Kafka. ΠŸΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ сообщСния ΠΈΠ· Ρ‚ΠΎΠΏΠΈΠΊΠ°.

БСйчас ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ Π² Ρ‚ΠΎΠΏΠΈΠΊ ΠΏΠ°Ρ€Ρƒ сообщСний, Π½ΠΎ сначала ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ΠΏΠ°ΠΏΠΊΠ°Ρ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ„Π°ΠΉΠ»Ρ‹ index вмСстС вСсят 20 ΠœΠ‘, Π° Ρ„Π°ΠΉΠ» log ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ пустой. Π’ ΠΏΠ°ΠΏΠΊΠ°Ρ… freblogg-1 ΠΈ freblogg-2 Ρ‚ΠΎ ΠΆΠ΅ самоС.
Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ сообщСния Ρ‡Π΅Ρ€Π΅Π· console producer ΠΈ посмотрим, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚:

Π― ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ» Π΄Π²Π° сообщСния β€” сначала Π²Π²Π΅Π» стандартноС Β«Hello WorldΒ», Π° ΠΏΠΎΡ‚ΠΎΠΌ Π½Π°ΠΆΠ°Π» Π½Π° Enter, ΠΈ это Π²Ρ‚ΠΎΡ€ΠΎΠ΅ сообщСниС. Π•Ρ‰Π΅ Ρ€Π°Π· посмотрим Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²:

freblogg-1:
total 21M
— freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
— freblogg 197121 68 Aug 5 10:15 00000000000000000000.log
— freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
— freblogg 197121 11 Aug 5 10:15 leader-epoch-checkpoint

freblogg-2:
total 21M
— freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
— freblogg 197121 79 Aug 5 09:59 00000000000000000000.log
— freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
— freblogg 197121 11 Aug 5 09:59 leader-epoch-checkpoint

Π”Π²Π° сообщСния заняли Π΄Π²Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ log Π² Π½ΠΈΡ… Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ сообщСния Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ хранятся Π² Ρ„Π°ΠΉΠ»Π΅ xxxx.log. Π”Π°Π²Π°ΠΉΡ‚Π΅ заглянСм Π² Ρ„Π°ΠΉΠ» log ΠΈ убСдимся, Ρ‡Ρ‚ΠΎ сообщСниС ΠΈ ΠΏΡ€Π°Π²Π΄Π° Ρ‚Π°ΠΌ.

Π€Π°ΠΉΠ»Ρ‹ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ log Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Π½ΠΎ ΠΌΡ‹ всС ΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌ Π² ΠΊΠΎΠ½Ρ†Π΅ Β«Hello WorldΒ», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» обновился, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ сообщСниС Π² Ρ‚ΠΎΠΏΠΈΠΊ. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ сообщСниС ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ сообщСниС ΠΏΠΎΠΏΠ°Π»ΠΎ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ (freblogg-2), Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ β€” Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ (freblogg-1). Для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сообщСния Kafka Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ, Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ просто распрСдСляСт ΠΏΠΎ ΠΊΡ€ΡƒΠ³Ρƒ (round-robin). Если ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ сообщСниС, Kafka Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π΅Π³ΠΎ Π²ΠΎ freblogg-0 ΠΈ дальшС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ этого порядка. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈ сами Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ, ΡƒΠΊΠ°Π·Π°Π² ΠΊΠ»ΡŽΡ‡. Kafka Ρ…Ρ€Π°Π½ΠΈΡ‚ всС сообщСния с ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ.

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π½ΠΎΠ²ΠΎΠΌΡƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ присваиваСтся Id Π½Π° 1 большС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ. Π­Ρ‚ΠΎΡ‚ Id Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ смСщСниСм (offset). Π£ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сообщСния смСщСниС 0, Ρƒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ β€” 1 ΠΈ Ρ‚. Π΄., ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ всСгда Π½Π° 1 большС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ.

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ инструмСнт Kafka, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ это Π·Π° странныС символы Π² Ρ„Π°ΠΉΠ»Π΅ log. Нам ΠΎΠ½ΠΈ каТутся бСссмыслСнными, Π½ΠΎ для Kafka это ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сообщСния Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

umping logs\freblogg-2\00000000000000000000.log
Starting offset: 0

(Π― ΡƒΠ΄Π°Π»ΠΈΠ» ΠΈΠ· Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ лишнСС.)

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ смСщСниС, врСмя создания, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ»ΡŽΡ‡Π° ΠΈ значСния, Π° Π΅Ρ‰Π΅ само сообщСниС (payload).

Надо ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ партиция привязана ΠΊ Π±Ρ€ΠΎΠΊΠ΅Ρ€Ρƒ. Если Ρƒ нас, допустим, Ρ‚Ρ€ΠΈ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°, Π° ΠΏΠ°ΠΏΠΊΠ° freblogg-0 сущСствуСт Π² broker-1, Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°Ρ… Π΅Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚. Π£ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΎΠΏΠΈΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°Ρ…, Π½ΠΎ ΠΎΠ΄Π½Π° партиция всСгда сущСствуСт Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅ Kafka (Ссли установлСн коэффициСнт Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1, Π½ΠΎ ΠΎΠ± этом Ρ‡ΡƒΡ‚ΡŒ ΠΏΠΎΠ·ΠΆΠ΅).

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚Ρ‹

Π§Ρ‚ΠΎ это Π·Π° Ρ„Π°ΠΉΠ»Ρ‹ index ΠΈ log Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ? ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ‚, ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ†Π° хранСния Π² Kafka, Π½ΠΎ Π½Π΅ минимальная. КаТдая партиция Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° сСгмСнты, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ сообщСний. Kafka Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ всС сообщСния ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ (ΠΊΠ°ΠΊ Π² Ρ„Π°ΠΉΠ»Π΅ Π»ΠΎΠ³Π°), Π° раздСляСт ΠΈΡ… Π½Π° сСгмСнты. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ нСсколько прСимущСств. (РаздСляй ΠΈ властвуй, ΠΊΠ°ΠΊ говорится.)

Π“Π»Π°Π²Π½ΠΎΠ΅ β€” это ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ стираниС Π΄Π°Π½Π½Ρ‹Ρ…. Π― ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ», Ρ‡Ρ‚ΠΎ сами ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ сообщСниС ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, Π½ΠΎ Kafka ΠΌΠΎΠΆΠ΅Ρ‚ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π° основС ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ хранСния для Ρ‚ΠΎΠΏΠΈΠΊΠ°. Π£Π΄Π°Π»ΠΈΡ‚ΡŒ сСгмСнт ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Ρ‡Π°ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Π°, особСнно ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŽΡΠ΅Ρ€ отправляСт Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.

Нули (00000000000000000000) Π² Ρ„Π°ΠΉΠ»Π°Ρ… log ΠΈ index Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ β€” это имя сСгмСнта. Π£ Ρ„Π°ΠΉΠ»Π° сСгмСнта Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ segment.log, segment.index ΠΈ segment.timeindex.

Kafka всСгда записываСт сообщСния Π² Ρ„Π°ΠΉΠ»Ρ‹ сСгмСнтов Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Ρƒ нас всСгда Π΅ΡΡ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ сСгмСнт для записи. Когда Kafka достигаСт Π»ΠΈΠΌΠΈΡ‚Π° ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ сСгмСнта, создаСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» сСгмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ станСт Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ.

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ
Π’ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° сСгмСнта отраТаСтся смСщСниС ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сообщСния. На ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅ Π²Ρ‹ΡˆΠ΅ Π² сСгмСнтС 0 содСрТатся сообщСния со смСщСниСм ΠΎΡ‚ 0 Π΄ΠΎ 2, Π² сСгмСнтС 3 β€” ΠΎΡ‚ 3 Π΄ΠΎ 5, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ПослСдний сСгмСнт, ΡˆΠ΅ΡΡ‚ΠΎΠΉ, сСйчас Π°ΠΊΡ‚ΠΈΠ²Π΅Π½.

freblogg-1:
total 21M
— freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
— freblogg 197121 68 Aug 5 10:15 00000000000000000000.log
— freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
— freblogg 197121 11 Aug 5 10:15 leader-epoch-checkpoint

freblogg-2:
total 21M
— freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
— freblogg 197121 79 Aug 5 09:59 00000000000000000000.log
— freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
— freblogg 197121 11 Aug 5 09:59 leader-epoch-checkpoint

Π£ нас всСго ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ сСгмСнту Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, поэтому ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ 00000000000000000000. Π Π°Π· Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² сСгмСнтов Π½Π΅Ρ‚, сСгмСнт 00000000000000000000 ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ.

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

Допустим, ΠΌΡ‹ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΠ»ΠΈ Π² ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΡŽ freblogg-2 Ρ‚Ρ€ΠΈ сообщСния, ΠΈ ΠΎΠ½Π° выглядит Ρ‚Π°ΠΊ:
ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

Π’Ρ€ΠΈ сообщСния β€” это наш Π»ΠΈΠΌΠΈΡ‚. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ сообщСнии Kafka автоматичСски Π·Π°ΠΊΡ€ΠΎΠ΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ сСгмСнт, создаст Π½ΠΎΠ²Ρ‹ΠΉ, сдСлаСт Π΅Π³ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌ ΠΈ сохранит Π½ΠΎΠ²ΠΎΠ΅ сообщСниС Π² Ρ„Π°ΠΉΠ»Π΅ log этого сСгмСнта. (Π― Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ Π½ΡƒΠ»ΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ).

freblogg-2
|— 00.index
|— 00.log
|— 00.timeindex
|— 03.index
|— 03.log
|— 03.timeindex
`—

Π€Π°ΠΉΠ» index для Ρ„Π°ΠΉΠ»Π° log, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ я ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ» Π² ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΌ отступлСнии, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ сообщСниС со смСщСниСм 1, ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ index ΠΈ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” 79. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ полоТСнию 79 Π² Ρ„Π°ΠΉΠ»Π΅ log ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌ. Π­Ρ‚ΠΎ довольно эффСктивный способ β€” ΠΌΡ‹ быстро Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎΠ΅ смСщСниС Π² ΡƒΠΆΠ΅ отсортированном Ρ„Π°ΠΉΠ»Π΅ index с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ поиска.

ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² партициях

Π§Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ порядок чтСния сообщСний ΠΈΠ· ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ, Kafka Π΄Π°Π΅Ρ‚ доступ ΠΊ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Ρƒ (ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ²). Если партиция ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ сообщСния a, f ΠΈ k, ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΈΡ… Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС: a, f ΠΈ k. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, вСдь порядок потрСблСния сообщСний Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ Ρ‚ΠΎΠΏΠΈΠΊΠ° Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½, Ссли Ρƒ вас нСсколько ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ.

Если ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ большС, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π½Π΅ увСличится. НуТно большС ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ считывали Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ‚ΠΎΠΏΠΈΠΊΠ°, Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄Π²Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ β€” ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ. ΠŸΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ‚ΠΎΠΏΠΈΠΊΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°Ρ…, поэтому Π΄Π²Π° ΠΊΠΎΠ½ΡΡŽΠΌΠ΅Ρ€Π° Ρ‚ΠΎΠΏΠΈΠΊΠ° ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ€Π°Π·Π½Ρ‹Ρ… Π±Ρ€ΠΎΠΊΠ΅Ρ€ΠΎΠ².

Π’ΠΎΠΏΠΈΠΊΠΈ

НаконСц, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ‚ΠΎΠΏΠΈΠΊΠ°ΠΌ. ΠœΡ‹ ΡƒΠΆΠ΅ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ Π·Π½Π°Π΅ΠΌ ΠΎ Π½ΠΈΡ…. Π“Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ: Ρ‚ΠΎΠΏΠΈΠΊ β€” это просто логичСскоС объСдинСниС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ.

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

РСпликация

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ рСпликация? Боздавая Ρ‚ΠΎΠΏΠΈΠΊ Π² Kafka, ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ для Π½Π΅Π³ΠΎ коэффициСнт Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ β€” replication-factor. Допустим, Ρƒ нас Π΄Π²Π° Π±Ρ€ΠΎΠΊΠ΅Ρ€Π° ΠΈ ΠΌΡ‹ устанавливаСм replication-factor 2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Kafka попытаСтся всСгда ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ бэкап, ΠΈΠ»ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΡƒ, для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π² Ρ‚ΠΎΠΏΠΈΠΊΠ΅. Kafka распрСдСляСт ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ HDFS распрСдСляСт Π±Π»ΠΎΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ Π½ΠΎΠ΄Π°ΠΌ.

Допустим, для Ρ‚ΠΎΠΏΠΈΠΊΠ° freblogg ΠΌΡ‹ установили коэффициСнт Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ 2. ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ распрСдСлСниС ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ:

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

Π”Π°ΠΆΠ΅ Ссли рСплицированная партиция находится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π±Ρ€ΠΎΠΊΠ΅Ρ€Π΅, Kafka Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π΅Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΉ Π΅ΡΡ‚ΡŒ LEADER, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π»ΠΈΠ΄Π΅Ρ€, ΠΈ FOLLOWERS β€” Π²Π΅Π΄ΠΎΠΌΡ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Π·Π΅Ρ€Π²Π΅. Π’Π΅Π΄ΠΎΠΌΡ‹Π΅ пСриодичСски ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ ΠΈ ΠΆΠ΄ΡƒΡ‚ своСго Π·Π²Π΅Π·Π΄Π½ΠΎΠ³ΠΎ часа. Когда Π»ΠΈΠ΄Π΅Ρ€ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· строя, ΠΎΠ΄ΠΈΠ½ ΠΈΠ· in-sync Π²Π΅Π΄ΠΎΠΌΡ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ Π½ΠΎΠ²Ρ‹ΠΌ Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ, ΠΈ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· этой ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ.

Π›ΠΈΠ΄Π΅Ρ€ ΠΈ Π²Π΅Π΄ΠΎΠΌΡ‹ΠΉ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ всСгда находятся Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π±Ρ€ΠΎΠΊΠ΅Ρ€Π°Ρ…. Π”ΡƒΠΌΠ°ΡŽ, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

ΠœΡ‹ подошли ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ этой Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ. Если Π²Ρ‹ Π΄ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ Π΄ΠΎ этого мСста β€” ΠΏΠΎΠ·Π΄Ρ€Π°Π²Π»ΡΡŽ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ всС ΠΎ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Kafka. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ.

Π˜Ρ‚ΠΎΠ³ΠΈ

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

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

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

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

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

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

Apache Kafka – диспСтчСр сообщСний Π½Π° Java ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅. Π’ 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Β», Π½ΠΎ я сдСлаю свои. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‡ΠΈΠΊΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ Π² Π³Ρ€ΡƒΠΏΠΏΡ‹, это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π°Π·Π½Ρ‹ΠΌ прилоТСниям Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ сообщСния ΠΈΠ· Ρ‚Π΅ΠΌΡ‹ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ.

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

Π’ΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ распрСдСлСниС Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π½Π΅ всС сообщСния Π² Ρ‚Π΅ΠΌΠ΅ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠ΅ ΠΏΠΎΠΉΠ΄ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ΄Π½ΠΎΠ³ΠΎ потрСбитСля. И Ρ‚ΠΎΠ³Π΄Π° ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½Π° стратСгия, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ сообщСния ΠΏΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°ΠΌ. Π•ΡΡ‚ΡŒ нСсколько стратСгий: 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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

Для запуска своих ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ я сдСлал ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» β€” 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 всС сообщСния сохраняСт Π² ΠΆΡƒΡ€Π½Π°Π»Π΅ сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ хранСния (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Β». ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π»ΠΎΠ³Π°

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ 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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ. Π€ΠΎΡ‚ΠΎ ΠΊΠ°Ρ„ΠΊΠ° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ

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

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

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

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

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