ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Ρ ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ Π² ΠΠ²ΠΈΡΠΎ Π΄Π΅Π²ΡΡΡ ΠΌΠ΅ΡΡΡΠ΅Π² Π½Π°Π·Π°Π΄ Π²ΡΠ±ΡΠ°Π»ΠΈ Kafka, ΠΈ ΡΡΠΎ ΠΎΠ½Π° ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ. ΠΠΎΠ΄Π΅Π»ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ΅ΠΉΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ β Π±ΡΠΎΠΊΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π Π½Π°ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠΊ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ»ΡΡΡ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΎΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Kafka as a Service.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠ΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ Π½Π°Π·Π°Π΄ ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΡΡ ΠΎΠ΄ΠΈΡΡ ΠΎΡ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ, ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π² ΠΠ²ΠΈΡΠΎ ΡΠΆΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π½ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². ΠΠ½ΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°, ΡΠ²ΠΎΠΉ ΡΡΠ΅ΠΊ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° ΡΠ²ΠΎΡ ΡΠ°ΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΈ.
ΠΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² β ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ. Π‘Π΅ΡΠ²ΠΈΡ Π ΡΠ°ΡΡΠΎ Ρ ΠΎΡΠ΅Ρ ΡΠ·Π½Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠ΅ΡΠ²ΠΈΡ Π. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΠ²ΠΈΡ Π ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ΅ΡΠ²ΠΈΡΡ Π ΡΠ΅ΡΠ΅Π· ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ API. Π‘Π΅ΡΠ²ΠΈΡ Π Ρ ΠΎΡΠ΅Ρ Π·Π½Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π ΠΈ Π, Π° ΡΠ΅, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ Π ΠΈ Π. ΠΠΎΠ³Π΄Π° ΡΠ°ΠΊΠΈΡ Β«Π»ΡΠ±ΠΎΠΏΡΡΠ½ΡΡ Β» ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ, ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΉ ΠΊΠ»ΡΠ±ΠΎΠΊ.
ΠΡΠΈ ΡΡΠΎΠΌ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅ΡΠ²ΠΈΡ Π ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°ΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½. Π ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ΅ΡΠ²ΠΈΡΡ Π ΠΈ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΡΠΌ Π·Π°Π²ΡΠ·Π°Π½Π½ΡΠΌ Π½Π° Π½Π΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ? Π Π΅ΡΠ»ΠΈ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ², Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΎΡΠΊΠ°Π·Π° Π²ΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΅ΡΠ΅ Π²ΡΡΠ΅ (ΠΈ ΠΎΠ½Π° ΡΠ΅ΠΌ Π²ΡΡΠ΅, ΡΠ΅ΠΌ Π΄Π»ΠΈΠ½Π½Π΅Π΅ ΡΡΠ° ΡΠ΅ΠΏΠΎΡΠΊΠ°).
ΠΡΠ±ΠΎΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ
ΠΠΊΠ΅ΠΉ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΠ½ΡΡΠ½Ρ. Π£ΡΡΡΠ°Π½ΠΈΡΡ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΄Π΅Π»Π°Π² ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ. Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π·Π½Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎ ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠΉ ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΠΉ, Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ Π°Π²Π°ΡΠΈΠΉ ΠΊΠΎΠΏΠΈΡΡ Π² ΡΠ΅Π±Π΅ Π±ΡΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΏΠ΅ΡΠ²Π° ΠΏΠΎΠΉΠΌΠ΅ΠΌ, ΡΠ΅Π³ΠΎ ΠΌΡ ΠΎΡ Π½Π΅Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ:
- ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ΅ΡΡΡΡΡΡ;
- ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡΡΡ;
- ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΠΈ ΡΠΈΡΠ°ΡΡ Π½Π° Π³Π»ΡΠ±ΠΈΠ½Ρ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π½Π΅ΠΉ (ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΡΠΉ Π±ΡΡΠ΅Ρ);
- ΡΠ΅ΡΠ²ΠΈΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡΡΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ ΠΈΡ Π΄Π°Π½Π½ΡΠ΅;
- Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΌΠΎΠ³ΡΡ ΡΠΈΡΠ°ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π΄Π°Π½Π½ΡΠ΅;
- ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ, ΠΎΠ±ΡΠ΅ΠΌΠ½ΡΠΉ payload (event-carried state transfer);
- ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½Π° Π³Π°ΡΠ°Π½ΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΡ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΡ (Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 100k ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ).
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΡΠ°ΡΠΏΡΠΎΡΠ°Π»ΠΈΡΡ Ρ RabbitMQ (ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΌ Π½Π° Π²ΡΡΠΎΠΊΠΈΡ rps), PGQ ΠΎΡ SkyTools (Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΡΠΉ ΠΈ ΠΏΠ»ΠΎΡ ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΡΠΉ) ΠΈ NSQ (Π½Π΅ ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΡΠΉ). ΠΡΠ΅ ΡΡΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Ρ Π½Π°Ρ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π½ΠΎ ΠΏΠΎΠ΄ ΡΠ΅ΡΠ°Π΅ΠΌΡΡ Π·Π°Π΄Π°ΡΡ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠΎΠ΄ΠΎΡΠ»ΠΈ.
ΠΠ°Π»Π΅Π΅ ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° Π½ΠΎΠ²ΡΠ΅ Π΄Π»Ρ Π½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β Apache Kafka, Apache Pulsar ΠΈ NATS Streaming.
ΠΠ΅ΡΠ²ΡΠΌ ΠΎΡΠ±ΡΠΎΡΠΈΠ»ΠΈ Pulsar. ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΡΠΎ Kafka ΠΈ Pulsar β Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΡ ΠΎΠΆΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Pulsar ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ ΠΊΡΡΠΏΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΌΠΈ, Π½ΠΎΠ²Π΅Π΅ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΡΡ latency (Π² ΡΠ΅ΠΎΡΠΈΠΈ), ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΠ· ΡΡΠΈΡ Π΄Π²ΡΡ ΠΎΡΡΠ°Π²ΠΈΡΡ Kafka, ΠΊΠ°ΠΊ de facto ΡΡΠ°Π½Π΄Π°ΡΡ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ Π·Π°Π΄Π°Ρ. ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, ΠΌΡ Π²Π΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Apache Pulsar Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
Π Π²ΠΎΡ ΠΎΡΡΠ°Π»ΠΈΡΡ Π΄Π²Π° ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠ°: NATS Streaming ΠΈ Apache Kafka. ΠΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΈΠ·ΡΡΠΈΠ»ΠΈ ΠΎΠ±Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΈ ΠΎΠ±Π° ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΡΠ»ΠΈ ΠΏΠΎΠ΄ Π·Π°Π΄Π°ΡΡ. ΠΠΎ Π² ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΏΠΎΠ±ΠΎΡΠ»ΠΈΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΡΡΠΈ NATS Streaming (ΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², Tyler Treat, ΡΠ΅ΡΠΈΠ» ΡΠΉΡΠΈ ΠΈΠ· ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π½Π°ΡΠ°ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ β Liftbridge). ΠΡΠΈ ΡΡΠΎΠΌ Clustering ΡΠ΅ΠΆΠΈΠΌ NATS Streaming Π½Π΅ Π΄Π°Π²Π°Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΡΠΆΠ΅ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΠΎΡΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ partitioning ΡΠ΅ΠΆΠΈΠΌΠ° Π² 2017 Π³ΠΎΠ΄Ρ).
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, NATS Streaming β ΠΊΡΡΡΠ°Ρ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° Go ΠΈ ΠΈΠΌΠ΅ΡΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Cloud Native Computing Foundation. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Apache Kafka, Π΅ΠΉ Π½Π΅ Π½ΡΠΆΠ΅Π½ Zookeeper Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ,
Π Π²ΡΡ-ΡΠ°ΠΊΠΈ Π½Π° ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠΉ Π΄Π΅Π½Ρ Π½Π°ΡΠΈΠΌ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»Π΅ΠΌ ΡΡΠ°Π»Π° Apache Kafka. ΠΠ° Π½Π°ΡΠΈΡ
ΡΠ΅ΡΡΠ°Ρ
ΠΎΠ½Π° ΠΏΠΎΠΊΠ°Π·Π°Π»Π° ΡΠ΅Π±Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΠΎΠΉ (Π±ΠΎΠ»Π΅Π΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ 1 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ), Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ, Ρ
ΠΎΡΠΎΡΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΠΎΠΉ ΠΎΠΏΡΡΠΎΠΌ Π² ΠΏΡΠΎΠ΄Π΅ ΠΊΡΡΠΏΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΌΠΈ. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, Kafka ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΡΡΠΏΠ½ΡΡ
ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΡ
ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ (ΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Confluent Π²Π΅ΡΡΠΈΠ΅ΠΉ), Π° ΡΠ°ΠΊΠΆΠ΅ Kafka ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·Π²ΠΈΡΡΡ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠ±Π·ΠΎΡ Kafka
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ, ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΠΊΠ½ΠΈΠ³Ρ β Β«Kafka: The Definitive GuideΒ» (Π΅ΡΡΡ ΠΈ Π² ΡΡΡΡΠΊΠΎΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π΅, Π½ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠΌΠ°ΡΡ ΠΌΠΎΠ·Π³). Π Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Kafka ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»ΡΡΠ΅. Π‘Π°ΠΌΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΎΡ Apache ΠΈ Π±Π»ΠΎΠ³ ΠΎΡ Confluent ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ»ΠΈΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Ρ ΠΈ Π»Π΅Π³ΠΊΠΎ ΡΠΈΡΠ°ΡΡΡΡ.
ΠΡΠ°ΠΊ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Π° Kafka Ρ Π²ΡΡΠΎΡΡ ΠΏΡΠΈΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»Π΅ΡΠ°. ΠΠ°Π·ΠΎΠ²Π°Ρ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Kafka ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· producer, consumer, broker ΠΈ zookeeper.
Broker
ΠΠ° Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π±ΡΠΎΠΊΠ΅Ρ (broker). ΠΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅, ΠΈ Π±ΡΠΎΠΊΠ΅Ρ ΠΌΠ°Π»ΠΎ Π·Π½Π°Π΅Ρ ΠΏΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΈΠ· ΡΠ΅Π±Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ, ΠΈ ΠΊΠ°ΠΊΠΎΠ²Π° ΠΈΡ ΡΡΡΡΠΊΡΡΡΠ°.
ΠΠ°ΠΆΠ΄ΡΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ²ΠΎΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠΎΠΏΠΈΠΊΠ΅ (topic). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΡΠΎΠΏΠΈΠΊ item.created, Π° ΡΠΎΠ±ΡΡΠΈΠ΅ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ β Π² item.changed. Π’ΠΎΠΏΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΡΠΎΠΏΠΈΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠ°ΠΊ:
- ΠΎΠ±ΡΠ΅ΠΌ Ρ ΡΠ°Π½ΠΈΠΌΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ/ΠΈΠ»ΠΈ ΠΈΡ Π²ΠΎΠ·ΡΠ°ΡΡ (retention.bytes, retention.ms);
- ΡΠ°ΠΊΡΠΎΡ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ (replication factor);
- ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (max.message.bytes);
- ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π² ΡΠΎΠΏΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ (min.insync.replicas);
- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ failover Π½Π° Π½Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΡΡΡΠ°ΡΡΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΡ Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ΅ΡΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ (unclean.leader.election.enable);
- ΠΈ Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈΡ
(
https://kafka.apache.org/documentation/#topicconfigs ).
Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΎΠΏΠΈΠΊ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ°ΡΡΠΈΡΠΈΡ (partition). ΠΠΌΠ΅Π½Π½ΠΎ Π² ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Π² ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ. ΠΡΠ»ΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±ΡΠΎΠΊΠ΅ΡΠ°, ΡΠΎ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌ Π±ΡΠΎΠΊΠ΅ΡΠ°ΠΌ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ (Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ), ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΏΠΈΠΊ ΡΡΠ°Π·Ρ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ².
ΠΠ° Π΄ΠΈΡΠΊΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΎΠ², ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π²Π½ΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ Π³ΠΈΠ³Π°Π±Π°ΠΉΡΡ (ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· log.segment.bytes). ΠΠ°ΠΆΠ½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ β ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΏΠ°ΡΡΠΈΡΠΈΠΉ (ΠΏΡΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠΈ retention) ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ (Π½Π΅Π»ΡΠ·Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΈΠ· ΠΏΠ°ΡΡΠΈΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π»ΡΠΉ ΡΠ΅Π³ΠΌΠ΅Π½Ρ, ΠΏΡΠΈΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΡΠΉ).
Zookeeper
Zookeeper Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ»Ρ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠΎΡΠ°. ΠΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΡΠΊΠ°Π·Π°ΡΡ, ΠΆΠΈΠ²Ρ Π»ΠΈ Π±ΡΠΎΠΊΠ΅ΡΡ (ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΡΠΎ Π³Π»Π°Π·Π°ΠΌΠΈ zookeeper ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠ΅Π· zookeeper-shell ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ls /brokers/ids
), ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠΌ (get /controller
), Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π»ΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Π² ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΡΠΎ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΠΌΠΈ (get /brokers/topics/topic_name/partitions/partition_number/state
). Π’Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ zookeeper ΡΠΏΠ΅ΡΠ²Π° ΠΏΠΎΠΉΠ΄ΡΡ producer ΠΈ consumer, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ Π±ΡΠΎΠΊΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΎΠΏΠΈΠΊΠΈ ΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Ρ
ΡΠ°Π½ΡΡΡΡ. Π ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ ΡΠΎΠΏΠΈΠΊΠ° Π·Π°Π΄Π°Π½ replication factor Π±ΠΎΠ»ΡΡΠ΅ 1, zookeeper ΡΠΊΠ°ΠΆΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ Π»ΠΈΠ΄Π΅ΡΠ°ΠΌΠΈ (Π² Π½ΠΈΡ
Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ Π·Π°ΠΏΠΈΡΡ ΠΈ ΠΈΠ· Π½ΠΈΡ
ΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΠ΄ΡΠΈ ΡΡΠ΅Π½ΠΈΠ΅). Π ΡΠ»ΡΡΠ°Π΅ ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π±ΡΠΎΠΊΠ΅ΡΠ° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² zookeeper Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΠΈΡΠ°Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½ΠΎΠ²ΡΡ
Π»ΠΈΠ΄Π΅Ρ-ΠΏΠ°ΡΡΠΈΡΠΈΡΡ
(Ρ Π²Π΅ΡΡΠΈΠΈ 1.1.0 Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎ,
Π Π±ΠΎΠ»Π΅Π΅ ΡΡΠ°ΡΡΡ
Π²Π΅ΡΡΠΈΡΡ
Kafka zookeeper ΠΎΡΠ²Π΅ΡΠ°Π» ΠΈ Π·Π° Ρ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΠΎΠ², Π½ΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΎΠ½ΠΈ Ρ
ΡΠ°Π½ΡΡΡΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΎΠΏΠΈΠΊΠ΅ __consumer_offsets
Π½Π° Π±ΡΠΎΠΊΠ΅ΡΠ΅ (Ρ
ΠΎΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ zookeeper Π΄Π»Ρ ΡΡΠΈΡ
ΡΠ΅Π»Π΅ΠΉ).
Π‘Π°ΠΌΡΠΌ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ Π²Π°ΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΡΠΊΠ²Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°Π· ΠΏΠΎΡΠ΅ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Ρ zookeeper. Π ΡΠ°ΠΊΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΈ ΠΎΡΠΊΡΠ΄Π° Π½ΡΠΆΠ½ΠΎ ΡΠΈΡΠ°ΡΡ, Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ.
Producer
Producer β ΡΡΠΎ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΠΉ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ Π·Π°ΠΏΠΈΡΡ Π΄Π°Π½Π½ΡΡ Π² Apache Kafka. Producer Π²ΡΠ±ΠΈΡΠ°Π΅Ρ topic, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄ΡΡ Ρ ΡΠ°Π½ΠΈΡΡΡΡ Π΅Π³ΠΎ ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π² Π½Π΅Π³ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, producerβΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π² ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠΏΠΈΠΊΠΈ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠ°ΠΊ Β«ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΎΒ», Β«ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎΒ», Β«ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΄Π°Π»Π΅Π½ΠΎΒ» ΠΈ Ρ.Π΄. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠ±ΡΡΠΈΠ΅ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ°ΡΡ ΠΊΠ»ΡΡ-Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΠΎ ΠΏΠ°ΡΡΠΈΡΠΈΡΠΌ ΡΠΎΠΏΠΈΠΊΠ° round-robin`ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ»ΡΡ Π½Π΅ Π·Π°Π΄Π°Π½ (ΡΠ΅ΡΡΡ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΡΡΡ), ΠΈ ΡΠ΅ΡΠ΅Π· MurmurHash (ΠΊΠ»ΡΡ), Π΅ΡΠ»ΠΈ ΠΊΠ»ΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ (ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ).
ΠΠ΄Π΅ΡΡ ΡΡΠ°Π·Ρ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Kafka Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΠ±ΡΡΠΈΠΉ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ. ΠΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π²ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π² ΠΎΠ΄Π½Ρ ΠΏΠ°ΡΡΠΈΡΠΈΡ (ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ). Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ ΡΠΎΠ±ΡΡΠΈΡ.
Consumer
Consumer ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Apache Kafka. ΠΡΠ»ΠΈ Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ Π²ΡΡΠ΅, consumerβΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΌΠΎΠ΄Π΅ΡΠ°ΡΠΈΠΈ. ΠΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ Π½Π° ΡΠΎΠΏΠΈΠΊ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ, ΠΈ ΠΏΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΅Π³ΠΎ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΠΌ.
Apache Kafka Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ» consumer (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠΉ ΡΠΎΠΏΠΈΠΊ __consumer__offsets
), ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ ΡΡΠ΅Π½ΠΈΠΈ consumer Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π²Π°ΠΆΠ΄Ρ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΡΠΈΡ enable.auto.commit = true ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΠ΄Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ consumerβΠ° Π² ΡΠΎΠΏΠΈΠΊΠ΅ Π½Π° ΠΎΡΠΊΡΠΏ ΠΠ°ΡΠΊΠ΅, ΠΌΠΎΠΆΠ½ΠΎ
Π ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ consumer Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΎΠΊ Π½ΠΎΠ²ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ), ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ consumer, ΡΠ²ΡΠ·Π°Π² ΠΈΡ Π²ΠΌΠ΅ΡΡΠ΅ Π² consumer group. Consumer group Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅ consumer, Π½ΠΎ Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°ΠΌΠΈ Π³ΡΡΠΏΠΏΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΡΡΠ°ΡΡΠ½ΠΈΠΊΠΎΠ² Π²Π·ΡΡΡ ΡΠ²ΠΎΡ Π΄ΠΎΠ»Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΡ ΡΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π½ΠΈΡ.
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠ΄Π΅ΡΡ Π½Π΅ Π±ΡΠ΄Ρ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°, ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄Π΅Π»ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌΠΈ. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π½Π° 3 ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ (12 CPU, 384GB RAM, 15k SAS DISK, 10GBit/s Net), Π±ΡΠΎΠΊΠ΅ΡΡ ΠΈ zookeeper Π±ΡΠ»ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Π² lxc.
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
Π Ρ ΠΎΠ΄Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
- Π‘ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΠΈΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 1KB ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ 9 producerβΠ°ΠΌΠΈ β 1300000 ΡΠΎΠ±ΡΡΠΈΠΉ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ.
- Π‘ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ 1KB ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ 9 consumerβΠ°ΠΌΠΈ β 1500000 ΡΠΎΠ±ΡΡΠΈΠΉ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ.
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ
Π Ρ ΠΎΠ΄Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ (3 Π±ΡΠΎΠΊΠ΅ΡΠ°, 3 zookeeper).
- ΠΠ΅ΡΡΠ°ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈΠ»ΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. Π Π°Π±ΠΎΡΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π² ΡΡΠ°ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π½ΠΎ Π½Π° ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π±ΡΠΎΠΊΠ΅ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ°.
- ΠΠ΅ΡΡΠ°ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² Π² ΡΠ»ΡΡΠ°Π΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈΠ· ΡΡΠ΅Ρ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΈ min.isr = 2 ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π½Π° Π·Π°ΠΏΠΈΡΡ, Π½ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ min.isr = 1, ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΈ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅, ΠΈ Π½Π° Π·Π°ΠΏΠΈΡΡ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°Π½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠΎΡ ΡΠ°Π½Π½ΠΎΡΡΠΈ Π΄Π°Π½Π½ΡΡ .
- ΠΠ΅ΡΡΠ°ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Zookeeper Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈΠ»ΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. Π Π°Π±ΠΎΡΠ° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π² ΡΡΠ°ΡΠ½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅.
- ΠΠ΅ΡΡΠ°ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π²ΡΡ
ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Zookeeper ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ
ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Zookeeper. ΠΠ°Π½Π½ΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π²Π΅ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Zookeeper ΠΈΠ· 3 ΡΠ΅ΡΠ²Π΅ΡΠΎΠ². Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Zookeeper Π΄ΠΎ 5 ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ.
Kafka as a service
ΠΡ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ, ΡΡΠΎ Kafka β ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅ΡΠΈΡΡ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΠΌΠΈ Π·Π°Π΄Π°ΡΡ (ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠΎΠΊΠ΅ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π½Π°ΠΏΡΡΠΌΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ Kafka ΠΈ Π·Π°ΠΊΡΡΠ»ΠΈ Π΅Π΅ ΡΠ²Π΅ΡΡ Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ data-bus. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π»ΠΈ? ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΅ΡΡΡ ΡΠ΅Π»ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠΈΠ½.
-
Data-bus Π·Π°Π±ΡΠ°Π» Π½Π° ΡΠ΅Π±Ρ Π²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠ΅ΠΉ Ρ Kafka (ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° consumerβΠΎΠ² ΠΈ producerβΠΎΠ², ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, Π°Π»Π΅ΡΡΠΈΠ½Π³, Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Ρ.Π΄.). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π±ΡΠΎΠΊΠ΅ΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ.
-
Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Kafka.
-
Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π΄ΡΡΠ³ΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΡΠ»ΠΎΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΡ ΠΏΠΎΠΌΠ΅Π½ΡΠ΅ΠΌ Kafka Π½Π° Pulsar, ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½ΠΈΠΊΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΡ (Π²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ Π·Π½Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎ API data-bus).
-
Data-bus Π²Π·ΡΠ» Π½Π° ΡΠ΅Π±Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΡΡ Π΅ΠΌ ΡΠΎΠ±ΡΡΠΈΠΉ.
-
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ data-bus ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ.
-
ΠΠΎΠ΄ ΠΏΡΠΈΠΊΡΡΡΠΈΠ΅ΠΌ data-bus ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π±Π΅Π· Π΄Π°ΡΠ½ΡΠ°ΠΉΠΌΠ°, Π½Π΅Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π²Π΅ΡΡΠΈΠΈ Kafka, ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ Π²Π΅ΡΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ producerβΠΎΠ², consumerβΠΎΠ², Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΈ Ρ.Π΄.
-
Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π½Π°ΠΌ ΡΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ Π² Kafka (ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π°ΡΠ΄ΠΈΡ ΡΠΎΠΏΠΈΠΊΠΎΠ², ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° Π°Π½ΠΎΠΌΠ°Π»ΠΈΡΠΌΠΈ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ DLQ ΠΈ Ρ.Π΄.).
-
Data-bus ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ failover ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ Π² Π±ΡΠΎΠΊΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π² ΠΊΠΎΠ΄ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°. ΠΡΠΎ Π²ΡΡ. Π£ Π²Π°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΈΡΠ°ΡΡ, ΡΠΈΡΠ°ΡΡ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΡΠΊΠΎΠΉ ΠΊΠΎΠ΄Π°. ΠΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΊΡΡΡΠ° ΠΎΡ Π²Π°Ρ, Π½Π°ΡΡΠΆΡ ΡΠΎΡΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΠΊ ΡΠΈΠΏΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±Π°ΡΡΠ°. ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡ data-bus ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ Π² Kubernetes Π½ΡΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ² producerβΠΎΠ² ΠΈ consumerβΠΎΠ² ΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΠΈΠΌ Π½ΡΠΆΠ½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½ΠΎ Π²ΡΠ΅ ΡΡΠΎ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ΅ΡΠ΅Π±ΡΡΠ½ΠΎΠΉ ΠΏΡΠ»ΠΈ Π½Π΅ Π±ΡΠ²Π°Π΅Ρ, ΠΈ Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.
- Data-bus Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΡΠΈΠ»Π°ΠΌΠΈ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
- Data-bus ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠΈΡΠ»ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ ΠΈ Π±ΡΠΎΠΊΠ΅ΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π³ΠΎΠ»ΠΎΠΉ Kafka.
- ΠΠ΅ Π²ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ ΡΠΊΡΡΡΡ ΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ², Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» KSQL ΠΈΠ»ΠΈ Kafka Streams Π² data-bus Π½Π°ΠΌ Π½Π΅ Ρ ΠΎΡΠ΅ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌ Ρ ΠΎΠ΄ΠΈΡΡ Π½Π°ΠΏΡΡΠΌΡΡ.
Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ»ΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΠΈΠ»ΠΈ ΠΌΠΈΠ½ΡΡΡ, ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΊΡΡΡΡ Π±ΡΠΎΠΊΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ ΠΎΠΏΡΠ°Π²Π΄Π°Π»ΠΎΡΡ. ΠΠ° Π³ΠΎΠ΄ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ Ρ Π½Π°Ρ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΡΠ΅ΡΡΠ΅Π·Π½ΡΡ Π°Π²Π°ΡΠΈΠΉ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
P.S. Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ ΠΌΠΎΠ΅ΠΉ Π΄Π΅Π²ΡΡΠΊΠ΅, ΠΠΊΠ°ΡΠ΅ΡΠΈΠ½Π΅ ΠΠ±Π°Π»ΡΠ΅Π²ΠΎΠΉ, Π·Π° ΠΊΡΡΡΡΠ΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΊ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅. ΠΡΠ»ΠΈ ΠΎΠ½ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΈΡΡ,
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com