kafka offset ΡΡΠΎ Π·Π½Π°ΡΠΈΡ
Π ΡΡΡΠΊΠΈΠ΅ ΠΠ»ΠΎΠ³ΠΈ
ΠΠ°ΡΠΊΠ° ΠΎΡΡΠ΅ΡΠ½ΠΎΠ΅ (Offset) ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅
1. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅
ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·Π΄Π΅Π» Π² Kafka ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΠ΅ΡΠΈΠΈ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΡ ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΊ ΡΠ°Π·Π΄Π΅Π»Ρ. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅.
Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ.
Π’ΡΠΈ ΠΎΠ±ΡΠΈΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ:
| ΠΠ°ΠΊΡΠΈΠΌΡΠΌ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ | ΠΠ°ΠΆΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈΠ»ΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ |
| Π₯ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· | ΠΡΠΎ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΡΠ΅ΡΡΠ½Ρ. ΠΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ |
| ΠΠ° ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· | ΠΠ°ΠΆΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π° ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΡΠ΅ΡΡΠ½Ρ, ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·. |
The semantics of streaming systems are often captured in terms of how many times each record can be processed by the system. There are three types of guarantees that a system can provide under all possible operating conditions (despite failures, etc.)
2.Kafka offset Management with Spark Streaming
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² Zookeeper. Zookeeper Π±ΠΎΠ»Π΅Π΅ Π»Π΅Π³ΠΊΠΈΠΉ, ΡΠ΅ΠΌ HBASE ΠΈ Ρ. Π., Π ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ HA (Π²ΡΡΠΎΠΊΠ°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ), Π° ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ.
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π΄Π²ΡΡ ΡΡΠ°ΠΏΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ:
3. ΠΠΊΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΡΡΠ΅Ρ Kafka ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΌΡ: tp_kafka:
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Kafka:
Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² IDEA:
4. ΠΠ΅ΡΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ: Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Spark Streaming link ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° Kafka:
ΠΠΎ Π΅ΡΠ»ΠΈ Spark Streaming ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ:
ΠΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΠ΅, ΡΡΠΎ ΠΎΡΡΡΠ΅Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Π·Π΄Π΅ΡΡ ΡΠ½ΠΎΠ²Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ auto.offset.reset ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π½Π° Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅. (ΠΠΎ Π²Π΅ΡΡΠΈΠΈ kafka-0.10.1.X)
5. ΠΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ: ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΠΎ-ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΠΏΡΠ½ΠΊΡ
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΠ°ΠΏΠΊΡ / offset Π² HDFS:
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½ΡΡ ΡΠΎΡΠΊΡ:
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. IDEA ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ HDFS Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ :
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠ», ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ 100 ΡΡΡΠΊ Π±ΡΠ»ΠΈ ΠΈΠ·ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ²Π°Π½Ρ. ΠΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π° 100 ΡΡΡΠΊ, Π° Π·Π°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°:
ΠΡΠ»ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΎ, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π±ΡΠ»ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ 100 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ½ΡΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ°Π·Π° ΠΈ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΠ°ΠΊ ΡΠ°ΠΌΡΠ΅ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅.
ΠΠΎ Ρ checkpiont Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π΅ΡΠ»ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΠΊΠ° Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠ° ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ ΡΠΎΡΠΊΠ° Π½Π΅ Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ getOrCreate ().
6. Π’ΡΠ΅ΡΠΈΠΉ ΡΠΈΠΏ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ: ΡΡΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ 1: ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½Ρ
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΡΠ΅ΠΊΡ ΠΎΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ ΡΠ°ΠΊΠΎΠΉ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ 2: ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ (ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ)
1. Π’ΡΠ°Π½Π·Π°ΠΊΡΠΈΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅.
2. ΠΠΈΠ±ΠΎ Π²ΡΠ΅ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ , ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π»ΠΈΠ±ΠΎ Π²ΡΠ΅ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ.
3. ΠΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π»ΠΈΠ±ΠΎ Π²ΡΠ΅ Π²Π»ΠΈΡΡΡ Π½Π° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ , Π»ΠΈΠ±ΠΎ Π½ΠΈ ΠΎΠ΄Π½Ρ ΠΈΠ· Π½ΠΈΡ , ΡΠΎ Π΅ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΏΠ΅ΡΠ½ΠΎ Π»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡ, Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
4. Π‘ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅ ΠΎΡΡΠ°Π΅ΡΡΡ Π²Π΅ΡΠ½ΡΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΡΡΠΎΡ ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ.
Π‘ΠΎΡ ΡΠ°Π½ΠΈΡΠ΅ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ Π΅Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·.
7. auto.kafka.reset ΠΏΠΎΡΠ»Π΅ Π²Π΅ΡΡΠΈΠΈ Kafka-0.10.1.X:
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ ΡΠ°ΠΊ Π²Π°ΠΆΠ½Ρ Π΄Π»Ρ Kafka
Π ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π· ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΏΡΠΎ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ Π² Π±ΡΠΎΠΊΠ΅ΡΠ΅ Kafka. Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π² Kafka. Π§ΠΈΡΠ°ΠΉΡΠ΅ Π΄Π°Π»Π΅Π΅ ΠΏΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠΈΠΊΡΠ°ΡΠΈΠΉ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠΎΡΠΎΡΡΠΌ Π±ΡΠΎΠΊΠ΅Ρ Kafka ΠΌΠΎΠΆΠ΅Ρ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Big Data Π² ΡΠΎΠΏΠΈΠΊΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΡΠ°ΡΡΠΌ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π² Π±ΡΠΎΠΊΠ΅ΡΠ΅ Apache Kafka: ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Big Data
ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠΈΡ Π²ΠΈΠ΄ΠΎΠ² ΠΌΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π°Π»Π΅Π΅.
Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ
Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ β ΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π΅Π΅ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. Π ΡΠ»ΡΡΠ°Π΅ ΡΠ±ΠΎΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΈ ΡΠΈΠΊΡΠ°ΡΠΈΡ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°ΡΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ Java ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° commitSync() [2]:
ΠΠ· ΠΊΠΎΠ΄Π° Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° poll() ). ΠΠ΅ΡΠΎΠ΄ commitSync() Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ Π½Π΅ΠΏΠΎΠΏΡΠ°Π²ΠΈΠΌΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ° ΡΠΈΠΏΠ° CommitFailedException (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»Π½ΡΠΉ Π²ΡΡ ΠΎΠ΄ ΠΈΠ· ΡΡΡΠΎΡ Kafka-ΡΠ΅ΡΠ²Π΅ΡΠ°). ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΡΠ°ΠΊΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠ°, ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ Π½Π΅ΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°ΠΏΠΈΡΡΡΡΡ Π² ΠΆΡΡΠ½Π°Π» Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ (logging), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΡΠ°ΠΏΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ
ΠΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ (ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π·Π°ΠΏΡΠΎΡΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ) Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π±ΡΠΎΠΊΠ΅Ρ Kafka Π½Π΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡ ΡΡΠΏΠ΅ΡΠ½ΡΡ ΡΠΈΠΊΡΠ°ΡΠΈΡ. ΠΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ Π² Π΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΠΈΠΊΡΠ°ΡΠΈΡ. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ β ΡΡΠΎ ΡΠΈΠΊΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ (ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ) ΠΎΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ°ΠΊΡΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΠΎΡ Kafka-ΡΠ΅ΡΠ²Π΅ΡΠ°. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ Java ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΡΠΎΠΏΠΈΠΊΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° commitAsync() [2]:
ΠΠ»Π°Π²Π½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΉ ΡΠΈΠΊΡΠ°ΡΠΈΡΠΌΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΏΠΎΠΏΡΡΠΊΡ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½Π° Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ (Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΡΡΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Kafka). ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°Ρ ΡΠΈΠΊΡΠ°ΡΠΈΡ, Π² ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΉ ΡΠ±ΠΎΠΉ Kafka-ΡΠ΅ΡΠ²Π΅ΡΠ°), Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΏΠΎΠΏΡΡΠΊΡ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π·Π°ΠΏΠΈΡΠΈ, Π° ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅Ρ ΠΊ ΡΠΈΠΊΡΠ°ΡΠΈΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ (ΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅ΠΉ) Π·Π°ΠΏΠΈΡΠΈ [2].
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΠΊΡΠ°ΡΠΈΡΠΌΠΈ, Π±ΡΠΎΠΊΠ΅Ρ Kafka ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΡΠΌΠ° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Big Data Π² ΡΠΎΠΏΠΈΠΊΠ°Ρ , ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΡΡΠ°ΡΡΠΌ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ΄Π°Π»ΡΡΡ ΠΈΠ· ΡΠΎΠΏΠΈΠΊΠΎΠ² Π·Π°ΠΏΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Apache Kafka ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ Π±ΡΠΎΠΊΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π·Π°Π΄Π°ΡΠ°Ρ Data Science ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΠΏΠ΅ΡΠ΅Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΡ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² Π² Kafka.
ΠΡΠ²ΠΎΠΈΡΡ Apache Kafka Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Big Data ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ², ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΎΡΠΈΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡΡ Data Science Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΡΡΡΠ°Ρ ΠΏΠΎ Kafka Π² Π½Π°ΡΠ΅ΠΌ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΡΠ΅Π±Π½ΠΎΠΌ ΡΠ΅Π½ΡΡΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΠ’-ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² Π² ΠΠΎΡΠΊΠ²Π΅:
ΠΡΠ°ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ Apache Kafka
Apache Kafka β Π±ΡΠΎΠΊΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½ Producer-Consumer Ρ Ρ ΠΎΡΠΎΡΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠΌΠΈ ΠΊ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ Open Source ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΡΠΎΠ·Π΄Π°Π½Π½Π°Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ LinkedIn Π½Π° JVM ΡΡΠ΅ΠΊΠ΅ (Scala).
ΠΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΡ ΠΊΠ°ΠΊΡΡ-Π»ΠΈΠ±ΠΎ ΡΠΈΡΡΠ΅ΠΌΡ, Π²Ρ ΠΏΠΎΠ½Π΅Π²ΠΎΠ»Π΅ Π΄Π΅Π»Π°Π΅ΡΠ΅ Π΅Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ, Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ.
Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ CAP-ΡΠ΅ΠΎΡΠ΅ΠΌΠ°.
Π ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²: ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ, Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ, ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ ΠΊ ΡΠ±ΠΎΡΠΌ ΡΠ·Π»ΠΎΠ².
Π§ΡΠΎ ΡΡΠΎ Π·Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°:
ΠΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ (Consistency) ΠΠΎΠ²ΠΎΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΠΏΡΠΎΡΠΈΠ²ΠΎΡΠ΅ΡΠΈΠ²ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ. ΠΠ΅ Π±ΡΠ²Π°Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π² ΠΊΠΎΡΠ·ΠΈΠ½Ρ ΡΠΎΠ²Π°Ρ, Π° ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΡΡΠ΅ΡΠ° ΡΡΡΠ°Π½ΠΈΡΡ Π΅Π³ΠΎ ΡΠ°ΠΌ Π½Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅. ΠΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ (Availability) ΠΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΅ΡΠ²ΠΈΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π½Π° Π·Π°ΠΏΡΠΎΡΡ, Π° Π½Π΅ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½. Π£ΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ ΠΊ ΡΠ±ΠΎΡΠΌ ΡΠ΅ΡΠΈ (Partition tolerance) ΠΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½Π°Ρ ΠΏΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² ΡΠ°ΡΡΡΡΠ΅ Π½Π° ΡΠ»ΡΡΠ°ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ΅ΡΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π²Π½ΡΡΡΠΈ ΡΠ΅ΡΠΈ.
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ CAP-ΡΠ΅ΠΎΡΠ΅ΠΌΡ, Kafka ΠΈΠΌΠ΅Π΅Ρ CA*, Ρ.Π΅. Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ ΠΊ ΡΠ±ΠΎΡΠΌ Π² ΡΠ΅ΡΠΈ β ΠΏΠΎ ΠΎΡΠ·ΡΠ²Π°ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Kafka Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΡΡΠΎΠΉΡΠΈΠ²Π° ΠΊ netsplit (ΠΌΠΎΠΌΠ΅Π½ΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π°Ρ ΠΊΠ»Π°ΡΡΠ΅Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·Π²Π°Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ), Ρ ΠΎΡΡ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° ΡΡΠΎΡ ΡΡΡΡ ΠΌΡ Π½Π΅ Π½Π°ΡΠ»ΠΈ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π½ΠΈΠ·ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Kafka β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ Π»ΠΎΠ³-ΡΠ°ΠΉΠ». Π’ΠΎ Π΅ΡΡΡ, ΠΏΠΎ ΡΡΡΠΈ, ΡΠ°ΠΉΠ», ΡΠ°Π·Π±ΠΈΡΡΠΉ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠ΅ΠΉ (ΠΏΠ°ΡΡΠΈΡΠΈΠΉ) ΠΈ Β«ΡΠ°ΡΠΊΠ°ΡΠ°Π½Π½ΡΠΉΒ» Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ·Π»ΠΎΠ² ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΠ°ΠΏΠΈΡΡ Π² ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠ½Π΅Ρ. Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° Π½Π° ΡΠ°ΡΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΈ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°Ρ Topic (ΡΠ΅ΠΌΠ°) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Β«ΠΏΠΎΡΠ΅Π·Π°Π½Β» Π½Π° ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ°ΡΡΠ΅ΠΉ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ Topic Π½Π° ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ². ΠΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Consumer (ΡΠΈΡΠ°ΡΠ΅Π»Ρ). ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ ΡΠ°Π²Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΡΠ°ΡΡΠ΅ΠΉ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π±ΠΈΡ Π²Π°Ρ Topic.
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ ΡΠΎΠΏΠΈΠΊΠ° Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ ΠΎΡΠ΅ΡΡΠ΄Π½ΠΎΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΡΠ°ΡΠ΅Π»Ρ.
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΅ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠΊΠ²ΠΎΠ·Π½ΠΎΠΉ Π½ΠΎΠΌΠ΅Ρ Π²Π½ΡΡΡΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ. Π ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Kafka ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ offset. ΠΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΈΠ· ΠΏΠ°ΡΡΠΈΡΠΈΠΈ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠΌΠΌΠΈΡ ΠΎΡΡΡΠ΅ΡΠ°. ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ, Π΅ΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΡΠΏΠ°Π΄ΡΡ, ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ (Π½ΠΎΠ²ΡΠΉ ΡΠΈΡΠ°ΡΠ΅Π»Ρ) Π½Π°ΡΠ½ΡΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ°.
Π§ΠΈΡΠ°ΡΠ΅Π»ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Π² Π³ΡΡΠΏΠΏΡ, ΡΡΠΎ ΡΠ°ΠΊ ΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ β consumer group. ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ, Π³ΡΡΠΏΠΏΠ° ΠΏΠ΅ΡΠ΅Π±Π°Π»Π°Π½ΡΠΈΡΡΡΡΡ. ΠΡΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΡΠ΅Π½ΠΈΡ β ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ Π΅Π³ΠΎ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ.
Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ, Kafka ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ disk persistence, ΡΠΎΡ ΡΠ°Π½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° Π΄ΠΈΡΠΊ.
Π€ΠΎΡΠΌΠ°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ InSync. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΠ»Π΅ΠΉΠ²Ρ (Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Kafka ΡΡΠΎ ΡΠΎΠ»Π»ΠΎΠ²Π΅ΡΡ) ΡΠ°ΠΌΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΡΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΌΠ°ΡΡΠ΅ΡΠ° ΠΎ Π½ΠΎΠ²ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ . ΠΡΠΎ pull-ΠΌΠΎΠ΄Π΅Π»Ρ. Π‘ΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡΡ/Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ°ΠΌΠΈ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΠΊΠ°ΠΊΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ (acknowledgement) Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ. Kafka ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΡΠΈ ΡΠ΅ΠΆΠΈΠΌΠ°:
ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΠΉΡΠΈ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΠΎΡΠ΅ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΎΡΠΊΠ»ΠΈΠΊΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π§Π΅ΠΌ Π²ΡΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ, ΡΠ΅ΠΌ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π΄ΠΎΠ»ΡΡΠ΅ Π·Π°ΠΏΠΈΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Kafka Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡ, Π΄Π»Ρ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΠΌ. Π Π΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ Π² ΡΠΎΠΏΠΈΠΊΠ΅.
ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΡΠΎ disk persistence, ΡΠΎ ΠΎΠ½ Π²ΡΡΠ΅ΠΊΠ°Π΅Ρ ΠΈΠ· ΡΡΡΡΠΎΠΉΡΡΠ²Π° Kafka. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π»ΠΎΠ³, ΡΠΎ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π½Π° Π΄ΠΈΡΠΊ ΠΈ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΊΠ»ΡΡΠΈΡΡ, Π½ΠΎ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΡΡΡΠΈΡΡ ΡΡΡΠΊΡ, ΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄Π°ΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠ°Π΄Π°ΡΡ Π½Π° Π΄ΠΈΡΠΊ. Π§ΡΠΎ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΌΠ΅Π½ΡΡΠΈΡ Π²Π°ΡΠΈ Π³Π°ΡΠ°Π½ΡΠΈΠΈ Π½Π° ΠΏΠΎΡΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ.
ΠΠ»ΠΈΠ΅Π½ΡΡ Π΄Π»Ρ Kafka Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ TCP. Π ΠΊΠΎΡΠΎΠ±ΠΊΠ΅ Ρ Kafka Π»Π΅ΠΆΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π° Java (ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°ΠΌΠ° Kafka Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° Scala) ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° C.
ΠΡΠ²ΠΎΠ΄Ρ: Apache Kafka ΠΌΠ΅Π½Π΅Π΅ ΡΠ΄ΠΎΠ±Π½Π°, ΡΠ΅ΠΌ ΡΠΎΡ ΠΆΠ΅ RabbitMQ, Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠΎ Π²Π°ΡΠΈΠ°Π½Ρ Ρ Kafka ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π±ΠΎΠ»ΡΡΠ΅. Π ΡΠΎΠΌΡ ΠΆΠ΅ Ρ Kafka Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ scalability (ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ).
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π·Π°ΠΏΠΈΡΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² Kafka
Π ΠΏΡΠΎΡΠ»ΡΠΉ ΡΠ°Π· ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΏΡΠΎ ΡΠΈΠΊΠ» ΠΎΠΏΡΠΎΡΠ° Π² Big Data Π±ΡΠΎΠΊΠ΅ΡΠ΅ Apache Kafka. Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² Kafka. Π§ΠΈΡΠ°ΠΉΡΠ΅ Π΄Π°Π»Π΅Π΅ ΠΏΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠΎΠΊΠ΅ΡΡ Kafka ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π»ΡΠ±ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΎΠΏΠΈΠΊΠΎΠ² Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ.
ΠΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π² Apache Kafka: ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Big Data
ΠΠ°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ (current offset) Π² Kafka β ΡΡΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ (ΠΈΠ½Π΄Π΅ΠΊΡ), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π±ΡΠ»Π° ΡΠΎΠ·Π΄Π°Π½Π°. ΠΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΌΠΈΠ½ΡΡ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅. ΠΡΠΎΠΊΠ΅Ρ Kafka ΡΡΡΡΠΎΠ΅Π½ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²ΡΠΉ Π½ΠΎΠΌΠ΅Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΊΡΡΡΠΎΡ (ΠΌΠ΅ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ). ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ, ΡΠΊΠ°Π·ΡΠ²Π°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΊΡΡΡΠΎΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² Π΄Π°Π½Π½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΈ ΡΠΈΠΊΡΠΈΡΡΠ΅ΡΡΡ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ (Π·Π°ΠΏΠΈΡΠΈ) [1].

Π Π°Π±ΠΎΡΠ° Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ: Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎΠΌ ΡΠ±ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ±ΠΎΠ΅ Π²ΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ Π±ΡΠ΄ΡΡ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎ, ΠΈ ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ Π² Π½Π΅ΠΉ ΠΏΠΎΡΠ²ΡΡΡΡ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΡ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π·Π°ΠΏΠΈΡΡΠΌ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ (ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠ°Π·Π΄Π΅Π»Π° ΠΎΡ Π½Π΅Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠ° Π°ΠΊΡΠΈΠ²Π½ΠΎΠΌΡ) ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, Π·Π°Π½ΠΎΠ²ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΠΎΠΈΡΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° seek() [1]:
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ, Π±ΡΠΎΠΊΠ΅Ρ Apache Kafka Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΠΎΠ»Π³ΠΎΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Big Data Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Ρ. ΠΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Apache Kafka ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΎΡ Π±ΡΠΎΠΊΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π² Π·Π°Π΄Π°ΡΠ°Ρ Data Science ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΡ Π² Kafka.
ΠΡΠ²ΠΎΠΈΡΡ Apache Kafka Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Big Data ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ², ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΏΡΠΎΡΠΈΡ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΡΡ ΠΎΠ±Π»Π°ΡΡΡΡ Data Science Π²Ρ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΊΡΡΡΠ°Ρ ΠΏΠΎ Kafka Π² Π½Π°ΡΠ΅ΠΌ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΡΠ΅Π±Π½ΠΎΠΌ ΡΠ΅Π½ΡΡΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΠ’-ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² Π² ΠΠΎΡΠΊΠ²Π΅:
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π±ΡΠΎΠΊΠ΅ΡΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠΊΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ 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 Π΄Π»Ρ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Figure 3-1. ΠΠ°ΡΡΠΈΡΠΈΠΈ Kafka
ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠ΄ΡΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠΎΠΏΠΈΠΊ Kafka, ΠΎΠ½ ΡΠ΅ΡΠ°Π΅Ρ, Π² ΠΊΠ°ΠΊΡΡ ΠΏΠ°ΡΡΠΈΡΠΈΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.
Π§ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
ΠΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΎΡΠ΅Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΌ Π³ΡΡΠΏΠΏΠ° ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ² (consumer group), ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ (offset) ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΠΏΠ°ΡΡΠΈΡΠΈΠΈ. Π‘ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ β ΡΡΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΡ Ρ Π²ΠΎΠ·ΡΠ°ΡΡΠ°ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ 0 Π² Π½Π°ΡΠ°Π»Π΅ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ. ΠΡΠ° Π³ΡΡΠΏΠΏΠ° ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π² API ΡΠ΅ΡΠ΅Π· ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ group_id, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΌΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ΅.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΈΡΡΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π°Π΄ΡΠ΅ΡΠ°ΡΠ° ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ±ΡΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ², ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π³ΡΡΠΏΠΏΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ².
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠΎΠ½ΡΡΠΌΠ΅ΡΡ ΠΈ Π³ΡΡΠΏΠΏΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ²
ΠΠ°Π²Π°ΠΉΡΠ΅ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠΏΡΠ°Π²Π½ΠΎΠΉ ΡΠΎΡΠΊΠΈ ΡΠΎΠΏΠΈΠΊ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠ΅ΠΉ (Figure 3-2).
Figure 3-2. ΠΠΎΠ½ΡΡΠΌΠ΅Ρ ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· ΠΏΠ°ΡΡΠΈΡΠΈΠΈ
ΠΠΎΠ³Π΄Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠΎ ΡΠ²ΠΎΠΈΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ group_id ΠΊ ΡΡΠΎΠΌΡ ΡΠΎΠΏΠΈΠΊΡ, Π΅ΠΌΡ Π½Π°Π·Π½Π°ΡΠ°Π΅ΡΡΡ ΠΏΠ°ΡΡΠΈΡΠΈΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ. ΠΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Π² ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°ΠΌΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ (ΡΠ°ΠΌΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅) ΠΈΠ»ΠΈ ΡΠ°ΠΌΡΡ ΡΠ°Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ (ΡΠ°ΠΌΠΎΠ΅ ΡΡΠ°ΡΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅). ΠΠΎΠ½ΡΡΠΌΠ΅Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ (polls) ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠΎΠΏΠΈΠΊΠ°, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΈΡ
ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΆΡΡΠ½Π°Π»Π°.
ΠΠΎΠ·ΠΈΡΠΈΡ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠΈΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² Kafka ΠΈ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΠΎΠΏΠΈΠΊΠ΅ _consumer_offsets. ΠΡΠΎΡΠΈΡΠ°Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅ ΡΠ΄Π°Π»ΡΡΡΡΡ, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π±ΡΠΎΠΊΠ΅ΡΠ°, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠΎΡΠ°ΡΡ (rewind) ΡΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΆΠ΅ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
ΠΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΡΠΎΡΠΎΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΌΠ΅Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄ΡΡΠ³ΠΎΠΉ group_id, ΠΎΠ½ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²ΡΠΎΡΡΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ (Figure 3-3). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΠΏΠΈΠΊ Kafka Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΡΠΌΠ΅Ρ ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΎΠΏΠΈΠΊ ΠΈΠ·Π΄Π°ΡΠ΅Π»Ρ-ΠΏΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊ (pub-sub), Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ², Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎΠΌ, ΡΡΠΎ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·.
Figure 3-3. ΠΠ²Π° ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ° Π² ΡΠ°Π·Π½ΡΡ
Π³ΡΡΠΏΠΏΠ°Ρ
ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ² ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ
ΠΠΎΠ½ΡΡΠΌΠ΅ΡΡ Π² Π³ΡΡΠΏΠΏΠ΅ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ²
ΠΠΎΠ³Π΄Π° ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ° ΡΠΈΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΏΠ°ΡΡΠΈΡΠΈΠΈ, ΠΎΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.
ΠΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ² Π±ΡΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Ρ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ group_id ΠΊ ΡΠΎΠΏΠΈΠΊΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠ΅ΠΉ, ΡΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ»ΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ, Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ ΠΈ Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (Figure 3-4).
Figure 3-4. ΠΠ²Π° ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ° Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ Π³ΡΡΠΏΠΏΠ΅ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ² ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ
ΠΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ² ΠΏΡΠ΅Π²ΡΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΠΏΠ°ΡΡΠΈΡΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΡ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½Π° Β«Π°ΠΊΡΠΈΠ²Π½ΠΎ-ΠΏΠ°ΡΡΠΈΠ²Π½Π°ΡΒ» (ΠΈΠ»ΠΈ Β«Π³ΠΎΡΡΡΠ°Ρ-ΡΠ΅ΠΏΠ»Π°ΡΒ») ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΡ Π²Π°ΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ², Ρ ΠΎΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ² (Β«Π°ΠΊΡΠΈΠ²Π½ΠΎ-Π°ΠΊΡΠΈΠ²Π½Π°ΡΒ» ΠΈΠ»ΠΈ Β«Π³ΠΎΡΡΡΠ°Ρ-Π³ΠΎΡΡΡΠ°ΡΒ») Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠΏΠΈΡΠ½Π°, ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π²ΡΡΠ΅, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΠΎΠ±ΡΡΠ½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ JMS. Π ΡΡΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Π±ΡΠ΄ΡΡ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ°ΠΌΠΈ.
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ², ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ ΡΡΠΎ Π»ΠΈΠ±ΠΎ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ Π΄Π»Ρ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΡΠ΅Π½ΠΈΡ, Π»ΠΈΠ±ΠΎ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΏΠ°ΡΡΠΈΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ°, ΡΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π² Kafka?
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ°, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ Π² ΠΏΡΠ» ΠΏΠΎΡΠΎΠΊΠΎΠ². Π₯ΠΎΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ² ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ° ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ·-Π·Π° ΡΠ±ΠΎΡ ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΎΠ±ΡΡΠΈΡ, ΡΠΎ Π²ΡΡΠΈΡΠΊΠ° ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅ΡΡΡ.
ΠΠ°Π½ΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Kafka ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΠ»ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ°ΡΡΠΈΡΠΈΠΉ.
ΠΠ°ΡΡΠΈΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ°ΡΡΠΈΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡ ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΏΠΈΠΊΠ° Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π±ΡΠΎΠΊΠ΅ΡΠ°. Π§ΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠΏΠΈΠΊ Ρ Π΄Π²ΡΠΌΡ ΠΏΠ°ΡΡΠΈΡΠΈΡΠΌΠΈ ΠΈ Π½Π° ΡΡΠΎΡ ΡΠΎΠΏΠΈΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΡΠΌΠ΅Ρ (Figure 3-5).
Figure 3-5. ΠΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΡΠΌΠ΅Ρ ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΏΠ°ΡΡΠΈΡΠΈΠΉ
Π ΡΡΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΡ Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΡΠΌΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π΅Π³ΠΎ group_id Π² ΠΎΠ±ΠΎΠΈΡ
ΠΏΠ°ΡΡΠΈΡΠΈΡΡ
, ΠΈ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΎΠ±Π΅ΠΈΡ
ΠΏΠ°ΡΡΠΈΡΠΈΠΉ.
ΠΠΎΠ³Π΄Π° Π² ΡΡΠΎΡ ΡΠΎΠΏΠΈΠΊ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΌΠ΅Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ group_id, Kafka ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠ°Π΅Ρ (reallocate) ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΏΠ°ΡΡΠΈΡΠΈΠΉ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π½Π° Π²ΡΠΎΡΠΎΠΉ ΠΊΠΎΠ½ΡΡΠΌΠ΅Ρ. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΡΠΈΠΈ ΡΠΎΠΏΠΈΠΊΠ° (Figure 3-6).
Π§ΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π² 20 ΠΏΠΎΡΠΎΠΊΠΎΠ², Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ 20 ΠΏΠ°ΡΡΠΈΡΠΈΠΉ. ΠΡΠ»ΠΈ ΠΏΠ°ΡΡΠΈΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅, Ρ Π²Π°Ρ ΠΎΡΡΠ°Π½ΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ Π½Π°Π΄ ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΡΠ°Π½Π΅Π΅ Π² ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΡΠΌΠ΅ΡΠΎΠ².
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 ΠΏΠ΅ΡΠ΅ΠΎΡΠΌΡΡΠ»ΠΈΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ Π±ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΉ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅ΠΉ, ΡΠ΅ΠΌ Ρ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π±ΡΠΎΠΊΠ΅ΡΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΡ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ, ΠΈ ΠΊΡΠ°ΡΠΊΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ. Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ±ΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΈ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΡ Π·Π°Π²Π΅ΡΡΠΈΠΌ Π³Π»Π°Π²Ρ, ΠΎΠ±ΡΠΈΡΠΎΠ²Π°Π², ΠΊΠ°ΠΊ ΡΠ°ΡΡΡΠΆΠ΄Π°ΡΡ ΠΎ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΡ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² ΡΠ΅Π»ΠΎΠΌ, ΡΡΠΎΠ±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΈΡ ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡΡ Π΄Π»Ρ Π²Π°ΡΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.













