ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅, Π₯Π°Π±ΡΠΎΠΆΠΈΡΠ΅Π»ΠΈ! Π’Π°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π° Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΈΡΠΊΠ° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π·Π° ΠΏΠΎ-Π΄ΠΎΠ±ΡΠΎ ΠΈΠ·ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Kafka ΠΈ Kafka Streams. ΠΠ΅ΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° Π·Π½Π°Π΅ΡΠ΅ ΠΈ ΡΠ°ΠΌΠ°ΡΠ° ΡΠ°ΠΌΠΊΠ° Kafka, Π½ΠΎ ΡΠΎΠ²Π° Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ: Π°Π· ΡΠ΅ Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π²ΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½ΡΠΆΠ½ΠΎ. ΠΠΏΠΈΡΠ½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° Kafka, ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΡΠΎ ΠΈ Π½ΠΎΠ²Π°ΡΠΈΡΠ΅, ΡΠ΅ ΡΡΠ²ΠΎΡΡ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Kafka Streams, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π°. Java ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Ρ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΈ Π½Π°ΠΏΡΠ΅Π΄Π½Π°Π»ΠΎ Π½ΠΈΠ²ΠΎ, Π²Π΅ΡΠ΅ ΡΠ²ΠΈΠΊΠ½Π°Π»ΠΈ Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ΡΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΠ΅ Π½Π°ΡΡΠ°Ρ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΡΠΌΠ΅Π½ΠΈΡΡΠ° ΡΠΈ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Kafka Streams. ΠΠ·Ρ
ΠΎΠ΄Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° ΠΊΠ½ΠΈΠ³Π°ΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Java 8 ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π½Π° Π»ΡΠΌΠ±Π΄Π°-ΠΈΠ·ΡΠ°Π·ΠΈ Π½Π° Java 8, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠΌΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ Ρ Π»ΡΠΌΠ±Π΄Π°-ΡΡΠ½ΠΊΡΠΈΠΈ (Π΄ΠΎΡΠΈ ΠΈ Π½Π° Π΄ΡΡΠ³ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅) ΡΠ΅ Π²ΠΈ Π±ΡΠ΄Π΅ ΠΎΡ ΠΏΠΎΠ»Π·Π°.
ΠΡΠΊΡΡ. 5.3. ΠΠ³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
Π ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΈΠ·ΡΡΠ°Π²Π°Π½Π΅ Π½Π° Π½Π°ΠΉ-ΠΎΠ±Π΅ΡΠ°Π²Π°ΡΠΈΡΠ΅ ΡΠ°ΡΡΠΈ Π½Π° Kafka Streams. ΠΠΎΡΠ΅Π³Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠΈ Π½Π° Kafka Streams:
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°;
- ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ;
- ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π° ΠΏΠΎΡΠΎΡΠΈ Π΄Π°Π½Π½ΠΈ;
- ΡΠ°Π·Π»ΠΈΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΡΡΠ±ΠΈΡΠΈΡ (KStream) ΠΈ ΠΏΠΎΡΠΎΡΠΈΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (KTable).
Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ΅ ΡΡΠ±Π΅ΡΠ΅ΠΌ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π·Π°Π΅Π΄Π½ΠΎ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅ Ρ ΠΎΠΊΠΎΠ½Π½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ β ΠΎΡΠ΅ Π΅Π΄Π½Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅Π»Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΡΡΠ²ΠΈΡΡ Π½ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠΎΡΡΠΎ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅.
5.3.1. ΠΠ³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈΡΠ΅ Π½Π° Π°ΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠ΅ΠΊΡΠΎΡΠΈ Π½Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ°
ΠΠ³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ΡΠΎ ΡΠ° ΠΆΠΈΠ·Π½Π΅Π½ΠΎΠ²Π°ΠΆΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠ·ΡΠ»Π΅Π΄Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»Π½ΠΈ Π·Π°ΠΏΠΈΡΠΊΠΈ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΎΠΊΠ°Π·Π²Π° Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ. ΠΠ° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ Π΄Π°Π½Π½ΠΈΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡ Π½ΠΎΡΠΎ Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½Π΅.
Π ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ Π²Π»Π΅Π·Π΅ΡΠ΅ Π² ΡΠΎΠ»ΡΡΠ° Π½Π° Π΄Π½Π΅Π²Π΅Π½ ΡΡΠ΅ΠΉΠ΄ΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ»Π΅Π΄ΠΈ ΠΎΠ±Π΅ΠΌΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° Π°ΠΊΡΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π² Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½ΠΈ ΡΠ΅ΠΊΡΠΎΡΠ°. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°Ρ ΠΏΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±Π° Π½Π° Π°ΠΊΡΠΈΠΈ Π² Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΎΡΠΈ.
ΠΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΡΠ° Π½ΡΠΆΠ½ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠΈ ΡΡΡΠΏΠΊΠΈ Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΡΠΎΡΠΌΠ°Ρ (Π°ΠΊΠΎ Π³ΠΎΠ²ΠΎΡΠΈΠΌ Π² ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ).
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° ΡΠ΅ΠΌΠ°, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π° Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΡΠ³ΠΎΠ²ΠΈΡΡΠ° Ρ Π°ΠΊΡΠΈΠΈ. Π©Π΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡ ΠΎΡ ΡΠΈΠΏ StockTransaction Π² ΠΎΠ±Π΅ΠΊΡ ΠΎΡ ΡΠΈΠΏ ShareVolume. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ ΠΎΠ±Π΅ΠΊΡΡΡ StockTransaction ΡΡΠ΄ΡΡΠΆΠ° ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈΡΠ΅, Π° Π½Π° Π½Π°Ρ Π½ΠΈ ΡΡΡΠ±Π²Π°Ρ ΡΠ°ΠΌΠΎ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°ΡΠ° ΠΏΡΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π°ΠΊΡΠΈΠΈ.
- ΠΡΡΠΏΠΈΡΠ°ΠΉΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ShareVolume ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ Π½Π° Π°ΠΊΡΠΈΠΈΡΠ΅. Π‘Π»Π΅Π΄ Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ΡΠΎ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅, ΡΠ΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈ Π΄ΠΎ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ ΡΡΠΌΠΈ Π½Π° ΠΎΠ±Π΅ΠΌΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈΡΠ΅ Π½Π° Π°ΠΊΡΠΈΠΈ. Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΡΡ KStream.groupBy Π²ΡΡΡΠ° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΡ ΡΠΈΠΏ KGroupedStream. Π Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΡ KTable ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄ΡΡ KGroupedStream.reduce.
ΠΠ°ΠΊΠ²ΠΎ Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡΡ KGroupedStream
ΠΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ KStream.groupBy ΠΈ KStream.groupByKey Π²ΡΡΡΠ°Ρ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ KGroupedStream. KGroupedStream Π΅ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ ΡΠ»Π΅Π΄ Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅. Π’ΠΎΠΉ Π½Π΅ Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° ΠΏΡΡΠΊΠ° ΡΠ°Π±ΠΎΡΠ°. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π°, KGroupedStream ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ, ΡΠΈΠΉΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ KTable. Π ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΠΏΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π΅ KTable ΠΈ Π² ΡΡΡ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ, Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π²ΡΠΈΡΠΊΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°.
ΠΠ΅ΡΠΎΠ΄ΡΡ KTable.groupBy Π²ΡΡΡΠ° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ KGroupedTable β ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΏΡΠ΅Π³ΡΡΠΏΠΈΡΠ°Π½ΠΈ ΠΏΠΎ ΠΊΠ»ΡΡ.
ΠΠ΅ΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΊΡΠ°ΡΠΊΠ° ΠΏΠ°ΡΠ·Π° ΠΈ Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π ΠΈΡ. 5.9, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊΠ²ΠΎ ΡΠΌΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π°Π»ΠΈ. Π’Π°Π·ΠΈ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Π±ΠΈ ΡΡΡΠ±Π²Π°Π»ΠΎ Π΄Π° Π²ΠΈ Π΅ Π΄ΠΎΠ±ΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½Π°.

Π‘Π΅Π³Π° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΊΠΎΠ΄Π° Π·Π° ΡΠ°Π·ΠΈ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ (ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.2).

ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π΅ ΠΊΡΠ°ΡΡΠΊ ΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π΄Π°. Π ΠΏΡΡΠ²ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° builder.stream ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΡΠ΅ Π½Π΅ΡΠΎ Π½ΠΎΠ²ΠΎ Π·Π° Π²Π°Ρ: ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° Π½Π° ΠΈΠ·Π±ΡΠΎΠΈΠΌΠΈΡ ΡΠΈΠΏ AutoOffsetReset.EARLIEST (ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΠΈ LATEST), Π·Π°Π΄Π°Π΄Π΅Π½Π° Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Consumed.withOffsetResetPolicy. Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΈΠ·Π±ΡΠΎΠΈΠΌ ΡΠΈΠΏ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ Π·Π° Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΡΠ΅ΡΠΈΡΠ΅ Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ KStream ΠΈΠ»ΠΈ KTable, ΠΊΠΎΡΡΠΎ ΠΈΠΌΠ° ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π°Π΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° Π·Π° Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΡΠ΅ΡΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°.
GroupByKey ΠΈ GroupBy
Π ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° KStream ΠΈΠΌΠ° Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π·Π° Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠΈ: GroupByKey ΠΈ GroupBy. Π Π΄Π²Π°ΡΠ° Π²ΡΡΡΠ°Ρ KGroupedTable, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅Π½ Π²ΡΠΏΡΠΎΡ: ΠΊΠ°ΠΊΠ²Π° Π΅ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ ΠΈ ΠΊΠΎΠ³Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠΉ ΠΎΡ ΡΡΡ ?
ΠΠ΅ΡΠΎΠ΄ΡΡ GroupByKey ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ Π² KStream Π²Π΅ΡΠ΅ ΡΠ° Π½Π΅Π½ΡΠ»Π΅Π²ΠΈ. Π Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ, ΡΠ»Π°Π³ΡΡ "ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅" Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ Π±ΠΈΠ» Π·Π°Π΄Π°Π΄Π΅Π½.
ΠΠ΅ΡΠΎΠ΄ΡΡ GroupBy ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°, ΡΠ΅ ΡΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠ»ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ Π·Π° Π³ΡΡΠΏΠΈΡΠ°Π½Π΅, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ»Π°Π³ΡΡ Π·Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ Π½Π° true. ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ»Π΅Π΄ ΠΌΠ΅ΡΠΎΠ΄Π° GroupBy Π½Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ, Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ Ρ.Π½. ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅.
Π Π΅Π·ΡΠΌΠ΅: Π²ΠΈΠ½Π°Π³ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° GroupByKey, Π° Π½Π΅ GroupBy.
ΠΠ°ΠΊΠ²ΠΎ ΠΏΡΠ°Π²ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ mapValues ΠΈ groupBy Π΅ ΡΡΠ½ΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ΠΊΠ° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° sum() (ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/model/ShareVolume.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.3).

ΠΠ΅ΡΠΎΠ΄ΡΡ ShareVolume.sum Π²ΡΡΡΠ° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½Π°ΡΠ° ΡΡΠΌΠ° Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈΡΠ΅ Π½Π° Π°ΠΊΡΠΈΠΈ, Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ ΡΡΠ»Π°ΡΠ° Π²Π΅ΡΠΈΠ³Π° ΠΎΡ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° KTable. Π‘Π΅Π³Π° ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΠΊΠ°ΠΊΠ²Π° ΡΠΎΠ»Ρ ΠΈΠ³ΡΠ°Π΅ KTable. ΠΡΠΈ ΠΏΠΎΡΡΡΠΏΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ ShareVolume, Π² ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ KTable ΡΠ΅ Π·Π°ΠΏΠ°Π·Π²Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ Π°ΠΊΡΡΠ°Π»Π½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅. ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΡΠ΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ ΠΎΡΡΠ°Π·ΡΠ²Π°Ρ Π² ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²Π°ΡΠΈΡ shareVolumeKTable, Π½ΠΎ Π½Π΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π½Π°ΡΠ°ΡΡΠΊ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΎΠ·ΠΈ KTable ΠΈΠ·Π²ΡΡΡΠ²Π°ΠΌΠ΅ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ (ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΏΡΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π°ΠΊΡΠΈΠΈ), Π·Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΠ΅Ρ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΠ±Π΅ΠΌΠΈ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈ Π½Π° Π°ΠΊΡΠΈΠΈ Π²ΡΠ² Π²ΡΡΠΊΠ° ΠΈΠ½Π΄ΡΡΡΡΠΈΡ. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½ΠΈ ΠΏΡΠΈ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° ΠΏΡΠΈ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½Π°ΡΠ° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ.
- ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΠΎΡΠ΅ Π΅Π΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ groupBy Π·Π° Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ ShareVolume ΠΏΠΎ ΠΈΠ½Π΄ΡΡΡΡΠΈΠΈ.
- ΠΡΠΈΡΡΡΠΏΠ΅ΡΠ΅ ΠΊΡΠΌ ΡΡΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ ShareVolume. Π’ΠΎΠ·ΠΈ ΠΏΡΡ ΠΎΠ±Π΅ΠΊΡΡΡ Π·Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π΅ ΠΎΠΏΠ°ΡΠΊΠ° Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ. Π ΡΠ°ΠΊΠ°Π²Π° ΠΎΠΏΠ°ΡΠΊΠ° Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅ Π·Π°ΠΏΠ°Π·Π²Π°Ρ ΡΠ°ΠΌΠΎ ΠΏΠ΅ΡΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Ρ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΡΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π°ΠΊΡΠΈΠΈ.
- ΠΡΠΎΠ±ΡΠ°Π·Π΅ΡΠ΅ ΠΎΠΏΠ°ΡΠΊΠΈΡΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΠΎΡΠΊΠ° Π² ΡΡΡΠΈΠ½Π³ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΈ Π²ΡΡΠ½Π΅ΡΠ΅ ΠΏΠ΅ΡΡΠ΅ Π½Π°ΠΉ-ΠΏΡΠΎΠ΄Π°Π²Π°Π½ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΠΊΡΠΈΠΈ ΠΏΠΎ ΠΈΠ½Π΄ΡΡΡΡΠΈΠΈ.
- ΠΠ°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Π² ΡΡΡΠΈΠ½Π³ ΡΠΎΡΠΌΠ°Ρ Π² ΡΠ΅ΠΌΠ°ΡΠ°.
ΠΠ° ΡΠΈΡ. 5.10 Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π³ΡΠ°ΡΠΈΠΊ Π½Π° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, Π²ΡΠΎΡΠΈΡΡ ΠΊΡΡΠ³ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΏΡΠΎΡΡ.

Π‘Π΅Π³Π°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΠ½ΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ Π²ΡΠΎΡΠΈ ΠΊΡΡΠ³ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΠΈΠ·Ρ
ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄ (ΡΠ΅ Π³ΠΎ Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.4).
Π ΡΠΎΠ·ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΈΠΌΠ° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° fixedQueue. Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ - Π°Π΄Π°ΠΏΡΠ΅Ρ Π·Π° java.util.TreeSet, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° N-ΡΠ΅ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΏΠΎ ΡΠ΅Π΄Π° Π½Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΡΠΎ ΠΏΡΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π°ΠΊΡΠΈΠΈ.

ΠΠΈΠ΅ Π²Π΅ΡΠ΅ ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Ρ
ΡΠ΅ Ρ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡΡΠ° groupBy ΠΈ mapValues, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΡΠΏΠΈΡΠ°ΠΌΠ΅ Π½Π° ΡΡΡ
(ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° KTable.toStream, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ΡΡ KTable.print ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° ΠΎΡΡΠ°ΡΡΠ»). ΠΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΡΠ΅ Π²ΠΈΠΆΠ΄Π°Π»ΠΈ KTable Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° aggregate(), ΡΠ°ΠΊΠ° ΡΠ΅ ΡΠ΅ ΠΎΡΠ΄Π΅Π»ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΎΠ±ΡΡΠΆΠ΄Π°Π½Π΅ΡΠΎ ΠΌΡ.
ΠΠ°ΠΊΡΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, KTable ΡΠ΅ ΠΎΡΠ»ΠΈΡΠ°Π²Π° Ρ ΡΠΎΠ²Π°, ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Ρ Π΅Π΄Π½Π°ΠΊΠ²ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΡΠ΅ ΡΡΠΈΡΠ°Ρ Π·Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. KTable Π·Π°ΠΌΠ΅ΡΡΠ²Π° ΡΡΠ°ΡΠ°ΡΠ° Π·Π°ΠΏΠΈΡΡ Ρ Π½ΠΎΠ²Π°. ΠΠ³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ΡΠΎ ΡΡΠ°Π²Π° ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π°ΡΠΈΠ½: Π°Π³ΡΠ΅Π³ΠΈΡΠ°Ρ ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Ρ Π΅Π΄ΠΈΠ½ ΠΊΠ»ΡΡ. ΠΡΠΈ ΠΏΠΎΡΡΡΠΏΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°ΠΏΠΈΡ, ΡΠΎΠΉ ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ Π² ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»Π°ΡΠ° FixedSizePriorityQueue Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠΌΠΈΡΠ°ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ (Π²ΡΠΎΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° aggregate), Π½ΠΎ Π°ΠΊΠΎ Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π΄ΡΡΠ³Π° Π·Π°ΠΏΠΈΡΡ Ρ ΡΠΎΠ·ΠΈ ΠΊΠ»ΡΡ, ΡΡΠ°ΡΠ°ΡΠ° Π·Π°ΠΏΠΈΡΡ ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ·Π²Π°ΠΆΠ΄Π°ΡΠΈΡ (ΡΡΠ΅ΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° aggregate).
Π’ΠΎΠ²Π° Π²ΡΠΈΡΠΊΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½Π°ΡΠΈΡΡ Π°Π³ΡΠ΅Π³Π°ΡΠΎΡ, FixedSizePriorityQueue, ΠΈΠ·ΠΎΠ±ΡΠΎ Π½Π΅ Π°Π³ΡΠ΅Π³ΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Ρ Π΅Π΄ΠΈΠ½ ΠΊΠ»ΡΡ, Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π΄Π²ΠΈΠΆΠ΅ΡΠ° ΡΠ΅ ΡΡΠΌΠ° Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°ΡΠ° N Π½Π°ΠΉ-ΠΏΡΠΎΠ΄Π°Π²Π°Π½ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ Π°ΠΊΡΠΈΠΈ. ΠΡΠ² Π²ΡΡΠΊΠ° ΠΏΠΎΡΡΡΠΏΠΈΠ»Π° Π·Π°ΠΏΠΈΡΠΊΠ° ΠΈΠΌΠ° ΠΎΠ±ΡΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ΄Π°Π΄Π΅Π½ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π°ΠΊΡΠΈΠΈ. KTable ΡΠ΅ Π²ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΎΠ²Π°, ΠΊΠΎΠΈ Π°ΠΊΡΠΈΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠ΄Π°Π²Π°Ρ Π½Π°ΠΉ-ΠΌΠ½ΠΎΠ³ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ°, Π° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΡΠΊΠ° ΠΎΡ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ.
ΠΠ°ΡΡΠΈΡ ΠΌΠ΅ ΡΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ Π΄Π²Π΅ Π²Π°ΠΆΠ½ΠΈ Π½Π΅ΡΠ°:
- Π³ΡΡΠΏΠΈΡΠ°ΠΌΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π² KTable ΠΏΠΎ ΠΎΠ±ΡΠΈΡ ΠΊΠ»ΡΡ;
- ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΡΠ²ΠΈΠ²Π°Π½Π΅ ΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½e Π²ΡΡΡ Ρ ΡΠ΅Π·ΠΈ Π³ΡΡΠΏΠΈΡΠ°Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ.
Π£ΠΌΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΌΠΈΡΡΠ»Π° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΡΠΈ ΠΏΡΠ΅Π· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Kafka Streams, ΠΈ Π·Π° ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ Π½ΠΎΡΡΡ.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ²ΡΡΠ·Π°Ρ ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΠΊΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ, ΠΎΠ±ΡΡΠΆΠ΄Π°Π½ΠΈ ΠΏΠΎ-ΡΠ°Π½ΠΎ Π² ΡΠ°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π°. Π Π³Π»Π°Π²Π° 4 ΡΠ°Π·ΠΊΠ°Π·Π°Ρ ΠΌΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ Π΅ Π·Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΠΎ, Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅. ΠΡΡΠ²ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ ΡΠ°Π·ΠΈ Π³Π»Π°Π²Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ° Π·Π°ΡΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΎ β ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ. ΠΠΎΠΊΠ°Π»Π½ΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡΠ΅ Π·Π°Π±Π°Π²ΡΠ½ΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎ ΠΈ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π° ΡΠ²ΠΈΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΡΠ²ΠΈΠ²Π°Π½Π΅ ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π²ΡΡΡΠ°Ρ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ Π½Π° KTable, Π° KTable ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ, Π·Π° Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Ρ Π½ΠΎΠ²ΠΈ. ΠΠ°ΠΊΡΠΎ Π²ΠΈΠ΄ΡΡ ΡΠ΅, Π½Π΅ Π²ΡΠΈΡΠΊΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ Π½Π°ΡΠ°ΡΡΠΊ ΠΏΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΡΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΊΡΠ°ΠΉΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠΊΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, KTable ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π½Π°ΠΏΡΠ΅Π΄ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡΡΠ° ΠΈ ΡΠ²ΠΈΠ²Π°Π½Π΅ΡΠΎ.
Π‘Π»Π΅Π΄Π²Π°ΡΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅, Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΡΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ, Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅ β ΡΠ°ΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΎΠΊΠΎΠ½Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
5.3.2. ΠΠΊΠΎΠ½Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ
Π ΠΏΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° ΡΠ΅ΠΊΡΠΈΡ ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Ρ ΠΌΠ΅ Ρ Β«ΠΏΠ»ΡΠ·Π³Π°ΡΠΈΒ» ΡΠ΅ ΡΠ²ΠΈΠ²Π°Π½ΠΈΡ ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΈ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΡΠ²ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈΡΠ΅ Π½Π° Π°ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π½Π° ΠΏΠ΅ΡΡΠ΅ Π½Π°ΠΉ-ΠΏΡΠΎΠ΄Π°Π²Π°Π½ΠΈ Π½Π° Π±ΠΎΡΡΠ°ΡΠ° Π°ΠΊΡΠΈΠΈ.
ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΈ ΠΈ ΡΠ²ΠΈΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ. Π ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ Π±ΠΎΡΡΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π°ΠΊΡΠΈΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΡΠ° ΠΈΠ·Π²ΡΡΡΠ΅Π½ΠΈ ΠΏΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 10 ΠΌΠΈΠ½ΡΡΠΈ. ΠΠ»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ° ΠΊΠ»ΠΈΠΊΠ½Π°Π»ΠΈ Π½Π° Π½ΠΎΠ²ΠΈΡ ΡΠ΅ΠΊΠ»Π°ΠΌeΠ½ Π±Π°Π½Π΅Ρ ΠΏΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 15 ΠΌΠΈΠ½ΡΡΠΈ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ, Π½ΠΎ Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ, ΠΎΡΠ½Π°ΡΡΡΠΈ ΡΠ΅ ΡΠ°ΠΌΠΎ Π·Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈ (Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ).
ΠΡΠΎΠ΅Π½Π΅ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎ ΠΊΡΠΏΡΠ²Π°Ρ
Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌ Ρ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΡΠ³ΠΎΠ²ΡΠΈ β ΠΈΠ»ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΠ»ΠΈ ΡΠΌΠ½ΠΈ ΡΠΈΠ½Π°Π½ΡΠΈΡΡΠΈ-ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΠΈ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π΄Π²Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅. ΠΠ΄Π½Π°ΡΠ° ΠΎΡ ΡΡΡ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΊΡΠΏΡΠ²Π°Ρ/ΠΏΡΠΎΠ΄Π°Π²Π°Ρ Π»ΠΈΠ΄Π΅ΡΠΈΡΠ΅ Π½Π° ΠΏΠ°Π·Π°ΡΠ°. ΠΠΊΠΎ ΡΠ΅Π·ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈΠ³ΡΠ°ΡΠΈ ΠΈ ΠΎΠΏΠΈΡΠ½ΠΈ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΡΠΈ Π²ΠΈΠΆΠ΄Π°Ρ ΠΏΡΠ΅Π΄ ΡΠ΅Π±Π΅ ΡΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ. ΠΡΠΎΡΠ°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Ρ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΏΡΠΈΠ·Π½Π°ΡΠΈ Π½Π° Π½Π΅Π·Π°ΠΊΠΎΠ½Π½ΠΈ ΡΠ΄Π΅Π»ΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Π²ΡΡΡΠ΅ΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ° ΡΠΎΠ²Π° ΡΠ΅ Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΊΠΎΡΠ΅Π»Π°ΡΠΈΡΡΠ° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΡΠΊΠΎΠΊΠΎΠ²Π΅ Π² ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈΡΠ΅ Ρ Π²Π°ΠΆΠ½ΠΈ ΠΏΡΠ΅ΡΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ.
Π’Π°ΠΊΠΎΠ²Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π΅ΡΠ°ΠΏΠΈ:
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠΎΠΊ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠ° stock-transactions;
- Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΊΡΠΏΡΠ²Π°ΡΠ° ΠΈ Π±ΠΎΡΡΠΎΠ² ΡΠΈΠΌΠ²ΠΎΠ» Π½Π° Π°ΠΊΡΠΈΡΡΠ°. ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° groupBy Π²ΡΡΡΠ° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΎΡ ΠΊΠ»Π°ΡΠ° KGroupedStream;
- Π²ΡΡΠ½Π°ΡΠΈΡΡ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° KGroupedStream.windowedBy ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Ρ Π²ΡΠ΅ΠΌΠ΅Π²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΈΠΏΠ° Π½Π° ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° ΡΠ΅ Π²ΡΡΡΠ° ΠΈΠ»ΠΈ TimeWindowedKStream, ΠΈΠ»ΠΈ SessionWindowedKStream;
- Π±ΡΠΎΠ΅Π½Π΅ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅. ΠΠΊΠΎΠ½Π½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π·Π°ΠΏΠΈΡ Π΅ Π²Π·Π΅Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π² Π±ΡΠΎΠ΅Π½Π΅ΡΠΎ;
- Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Π² ΡΠ΅ΠΌΠ° ΠΈΠ»ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΠΈΠΌ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°.
Π’ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ ΠΏΡΠΎΡΡΠ°, Π½ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Ρ Π½ΡΠΌΠ° Π΄Π° Π½Π°Π²ΡΠ΅Π΄ΠΈ. ΠΠ΅ΠΊΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π½Π° ΡΠΈΡ. 5.11.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠΊΠΎΠ½Π½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΊΠΎΠ΄.

Π’ΠΈΠΏΠΎΠ²Π΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ
Π Kafka Streams ΠΈΠΌΠ° ΡΡΠΈ ΡΠΈΠΏΠ° ΠΏΡΠΎΠ·ΠΎΡΡΠΈ:
- ΡΠ΅Π°Π½ΡΠΎΠ²ΠΈ;
- βΠΊΡΠ²ΡΡΠΊΠ°ΡΡΠΈΠ΅ΡΡβ (tumbling);
- ΡΠΊΠΎΠ»Π·ΡΡΠΈ/βΠΏΡΡΠ³Π°ΡΡΠΈΠ΅β (sliding/hopping).
ΠΠΎΠ΅ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ β Π·Π°Π²ΠΈΡΠΈ ΠΎΡ Π±ΠΈΠ·Π½Π΅Ρ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ°. βΠΡΠ²ΡΡΠΊΠ°ΡΡΠΈΠ΅ΡΡβ ΠΈ βΠΏΡΡΠ³Π°ΡΡΠΈΠ΅β ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° Π½Π° ΡΠ΅Π°Π½ΡΠΎΠ²ΠΈΡΠ΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ β ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΡΠΈΡΡΠ° (-ΠΈΡΠ΅) ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΈΠ·ΡΡΠ»ΠΎ ΠΎΡ ΡΠΎΠ²Π°, ΠΊΠΎΠ»ΠΊΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ΅ Π΄ΡΡΠΆΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ. ΠΠ°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ Π΅ Π΄Π° Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΌΠ΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΡΠ΅ Π±Π°Π·ΠΈΡΠ°Ρ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π²ΠΈΡΠ΅ ΠΌΠ°ΡΠΊΠΈ Π½Π° Π·Π°ΠΏΠΈΡΠΈΡΠ΅, Π° Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΡΠ°ΡΠ° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Ρ Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ. Π¦Π΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ ΡΠ°ΠΌΠΎ Π² ΠΏΡΡΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ; Π·Π° Π΄ΡΡΠ³ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π½ΠΈΡΠΎ, ΠΎΡΠ²Π΅Π½ ΡΠΈΠΏΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Ρ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ.
Π‘Π΅Π°Π½ΡΠΎΠ²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ
Π‘Π΅Π°Π½ΡΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π²ΠΈΠ΄ΠΎΠ²Π΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ. Π’Π΅ ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π½Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅, Π° ΠΎΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ (ΠΈΠ»ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΡΠ½ΠΎΡΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΡΠ»Π΅Π΄ΠΈΡΠ΅). Π‘Π΅Π°Π½ΡΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΡΠ΅ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ°Π²Π°Ρ ΠΏΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈ Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.
Π€ΠΈΠ³ΡΡΠ° 5.12 ΠΈΠ»ΡΡΡΡΠΈΡΠ° ΠΏΠΎΠ½ΡΡΠΈΠ΅ΡΠΎ Π·Π° ΡΠ΅Π°Π½ΡΠΎΠ²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ. ΠΠΎ-ΠΌΠ°Π»ΠΊΠΈΡΡ ΡΠ΅Π°Π½Ρ ΡΠ΅ ΡΠ΅ ΡΠ»Π΅Π΅ Ρ ΡΠ΅Π°Π½ΡΠ° ΠΎΡΠ»ΡΠ²ΠΎ. Π ΡΠ΅Π°Π½ΡΡΡ ΠΎΡΠ΄ΡΡΠ½ΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΡΠ΄Π΅Π»Π΅Π½, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ»Π΅Π΄Π²Π° ΡΠ»Π΅Π΄ Π΄ΡΠ»ΡΠ³ ΠΏΠ΅ΡΠΈΠΎΠ΄ Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. Π‘Π΅Π°Π½ΡΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΡΠ° ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅, Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ/Π΄Π°ΡΠ° ΠΌΠ°ΡΠΊΠ΅ΡΠΈ ΠΎΡ Π·Π°ΠΏΠΈΡΠΈΡΠ΅, Π·Π° Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Ρ ΠΊΠΎΠΉ ΡΠ΅Π°Π½Ρ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Π·Π°ΠΏΠΈΡΠ°.

ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅Π°Π½ΡΠΎΠ²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅Π°Π½ΡΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ, Π·Π° Π΄Π° ΡΠ»ΠΎΠ²ΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π±ΠΎΡΡΠΎΠ²ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ΅Π°Π½ΡΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π° 5.5 (ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΡ ΡΠ°Π·ΠΈ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Π²Π΅ΡΠ΅ ΡΡΠ΅ ΡΡΠ΅ΡΠ°Π»ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° Π³ΠΈ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΡΠΊ. ΠΠΎ ΠΈΠΌΠ° ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΠ΅Π³Π° ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ.
ΠΡΠΈ Π²ΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ groupBy ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½ΡΠΊΠ°ΠΊΠ²Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΎΠ½Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ (Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅, ΡΠ²ΠΈΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ ΠΏΡΠ΅Π±ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°). ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ ΠΈΠ»ΠΈ Π°ΠΊΡΠΌΡΠ»ΠΈΡΠ°ΡΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΎΠ½Π½ΠΎ Ρ Π½Π°ΡΠ°ΡΡΠ²Π°ΡΠΈ ΡΡΠΌΠΈ, ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠΈΠΎΠ½Π½ΠΎ, ΠΏΡΠΈ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π²Π·ΠΈΠΌΠ°Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Π² Π·Π°Π΄Π°Π΄Π΅Π½ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ.
ΠΠΎΠ΄ΡΡ ΠΎΡ Π»ΠΈΡΡΠΈΠ½Π³Π° 5.5 ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠ΅Π±ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅ Π² ΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π½Π° ΡΠ΅Π°Π½ΡΠΎΠ²ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ. ΠΠ° ΡΠΈΠ³ΡΡΠ° 5.13 ΡΠ΅Π·ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΡΡΠΏΠΊΠ° ΠΏΠΎ ΡΡΡΠΏΠΊΠ°.
Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ windowedBy(SessionWindows.with(twentySeconds).until(fifteenMinutes)) ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΡΠ΅Π°Π½ΡΠΎΠ²ΠΎ ΠΏΡΠΎΠ·ΠΎΡΡΠ΅ Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΡ 20 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΡ 15 ΠΌΠΈΠ½ΡΡΠΈ. ΠΠ½ΡΠ΅ΡΠ²Π°Π»ΡΡ Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΎΡ 20 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π° Π²ΡΡΠΊΠ° Π·Π°ΠΏΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΏΠΎΡΡΡΠΏΠΈ Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° 20 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ ΡΠ»Π΅Π΄ Π·Π°Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ ΠΈΠ»ΠΈ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ΅ΠΊΡΡΠΈΡ ΡΠ΅Π°Π½Ρ Π² ΡΠ΅ΠΊΡΡΠΈΡ (Π°ΠΊΡΠΈΠ²Π΅Π½) ΡΠ΅Π°Π½Ρ.

Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΡΠΎΡΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ Π² ΡΠ΅ΡΠΈΠΉΠ½ΠΈΡ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ β Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ count. ΠΠΊΠΎ Π²Ρ
ΠΎΠ΄ΡΡΠΈΡΡ Π·Π°ΠΏΠΈΡ ΠΈΠ·Π»Π΅Π·Π΅ ΠΈΠ·Π²ΡΠ½ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ (ΠΎΡ ΠΊΠΎΡΡΠΎ ΠΈ Π΄Π° Π΅ ΡΡΡΠ°Π½Π° Π½Π° Π²ΡΠ΅ΠΌΠ΅Π²Π°ΡΠ° ΠΌΠ°ΡΠΊΠ°), ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° ΡΠ΅ΡΠΈΡ. ΠΠ½ΡΠ΅ΡΠ²Π°Π»ΡΡ Π½Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠΈΡΡΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π·Π°ΠΊΡΡΠ½Π΅Π»ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·Π»ΠΈΠ·Π°Ρ ΠΈΠ·Π²ΡΠ½ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΡΠ΅ΡΠΈΡΡΠ°, Π½ΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΠΈ ΠΊΡΠ°ΡΡ Π½Π° Π½ΠΎΠ²Π°ΡΠ° ΡΠ΅ΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π° Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠ»ΠΈΠ²Π°Π½ΠΈΡ, ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π½Π° Π½Π°ΠΉ-ΡΠ°Π½Π½Π°ΡΠ° ΠΈ Π½Π°ΠΉ-ΠΊΡΡΠ½Π°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π²Π° ΠΌΠ°ΡΠΊΠ°.
ΠΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π·Π°ΠΏΠΈΡΠ° ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° count, Π·Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΡΡ ΡΠ΅ΡΠΈΠΈΡΠ΅ (ΡΠ°Π±Π». 5.1).

ΠΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΡΠΏΠ²Π°Ρ Π·Π°ΠΏΠΈΡΠΈ, ΡΡΡΡΠΈΠΌ Π²Π΅ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΡΠ΅ΡΠΈΠΈ Ρ ΠΊΠ»ΡΡΠ°, ΡΠΈΠΉΡΠΎ ΠΊΡΠ°ΠΉ Π΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΎΡ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π²Π° ΠΌΠ°ΡΠΊΠ° β ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π΅ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΠΎΡ ΡΠ΅ΠΊΡΡΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π²Π° ΠΌΠ°ΡΠΊΠ° + ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. Π‘ ΡΠΎΠ²Π° ΠΈΠΌΠ°ΠΌΠ΅ ΡΠ΅ΡΠΈΡΠΈ Π·Π°ΠΏΠΈΡΠ° ΠΎΡ ΡΠ°Π±Π». 5.1, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ»ΠΈΠ²Π°Ρ Π² Π΅Π΄Π½Π° ΡΠ΅ΡΠΈΡ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½.
1. ΠΡΡΠ²ΠΈ ΠΏΠΎΡΡΡΠΏΠ²Π° Π·Π°ΠΏΠΈΡ 1, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠ°Π»ΠΎ Π΅ ΡΠ°Π²Π½ΠΎ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΊΡΠ°ΠΉ ΠΈ Π΅ 00:00:00.
2. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΠΎΡΡΡΠΏΠ²Π° Π·Π°ΠΏΠΈΡ 2 ΠΈ ΡΡΡΡΠΈΠΌ ΡΠ΅ΡΠΈΠΈ, Π·Π°Π²ΡΡΡΠ²Π°ΡΠΈ Π½Π΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΎΡ 23:59:55 ΠΈ Π·Π°ΠΏΠΎΡΠ²Π°ΡΠΈ Π½Π΅ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΠΎΡ 00:00:35. ΠΠ°ΠΌΠΈΡΠ°ΠΌΠ΅ Π·Π°ΠΏΠΈΡ 1 ΠΈ ΡΠ»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅ΡΠΈΠΈΡΠ΅ 1 ΠΈ 2. ΠΠ·Π΅ΠΌΠ°ΠΌΠ΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° Π½Π°ΡΠ°Π»ΠΎ Π½Π° ΡΠ΅ΡΠΈΡ 1 (ΠΏΠΎ-ΡΠ°Π½Π½ΠΎΡΠΎ) ΠΈ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΊΡΠ°ΠΉ Π½Π° ΡΠ΅ΡΠΈΡ 2 (ΠΏΠΎ-ΠΊΡΡΠ½ΠΎΡΠΎ), ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π°ΡΠ°ΡΠ° Π½ΠΎΠ²Π° ΡΠ΅ΡΠΈΡ Π·Π°ΠΏΠΎΡΠ²Π° Π² 00:00:00 ΠΈ Π·Π°Π²ΡΡΡΠ²Π° Π² 00:00:15.
3. ΠΠΎΡΡΡΠΏΠ²Π° Π·Π°ΠΏΠΈΡ 3, ΡΡΡΡΠΈΠΌ ΡΠ΅ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ 00:00:30 ΠΈ 00:01:10 ΠΈ Π½Π΅ Π½Π°ΠΌΠΈΡΠ°ΠΌΠ΅ Π½ΠΈΡΠΎ Π΅Π΄Π½Π°. ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ Π²ΡΠΎΡΠ° ΡΠ΅ΡΠΈΡ Π·Π° ΠΊΠ»ΡΡ 123-345-654,FFBE, ΠΊΠΎΡΡΠΎ Π·Π°ΠΏΠΎΡΠ²Π° ΠΈ Π·Π°Π²ΡΡΡΠ²Π° Π² 00:00:50.
4. ΠΠΎΡΡΡΠΏΠ²Π° Π·Π°ΠΏΠΈΡ 4 ΠΈ ΡΡΡΡΠΈΠΌ ΡΠ΅ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ 23:59:45 ΠΈ 00:00:25. Π’ΠΎΠ·ΠΈ ΠΏΡΡ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ ΠΈ Π΄Π²Π΅ΡΠ΅ ΡΠ΅ΡΠΈΠΈ β 1 ΠΈ 2. ΠΡΠΈΡΠΊΠΈ ΡΡΠΈ ΡΠ΅ΡΠΈΠΈ ΡΠ΅ ΡΠ»ΠΈΠ²Π°Ρ Π² Π΅Π΄Π½Π°, Ρ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π½Π°ΡΠ°Π»ΠΎ 00:00:00 ΠΈ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΡΠ°ΠΉ 00:00:15.
ΠΡ ΡΠ°Π·ΠΊΠ°Π·Π°Π½ΠΎΡΠΎ Π² ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π», ΡΠ»Π΅Π΄Π²Π° Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π°ΠΆΠ½ΠΈ Π½ΡΠ°Π½ΡΠΈ:
- ΡΠ΅ΡΠΈΠΈΡΠ΅ Π½Π΅ ΡΠ° ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½ ΡΠ°Π·ΠΌΠ΅Ρ. ΠΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΡΠΈΡΡΠ° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»;
- Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΠΌΠ°ΡΠΊΠ΅ΡΠΈ Π² Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π΄Π°Π»ΠΈ ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ ΠΏΠΎΠΏΠ°Π΄Π° Π² ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° ΡΠ΅ΡΠΈΡ ΠΈΠ»ΠΈ Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ Π²ΠΈΠ΄ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ β βΠΏΡΠ΅Π²ΡΡΡΠ°ΡΠΈ ΡΠ΅β ΠΏΡΠΎΠ·ΠΎΡΡΠΈ.
βΠΡΠ΅Π²ΡΡΡΠ°ΡΠΈ ΡΠ΅β ΠΏΡΠΎΠ·ΠΎΡΡΠΈ
Β«Π’ΡΠΌΠ±Π»ΠΈΡΠ°ΡΠΈΒ» (ΠΊΡΠ²ΠΈΡΠ°ΡΠΈ) ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΡΠ»Π°Π²ΡΡ ΡΡΠ±ΠΈΡΠΈΡ, ΠΏΠΎΠΏΠ°Π΄Π°ΡΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΎΡ Π²ΡΠ΅ΠΌΠ΅. ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅ΡΠ΅ ΡΠΈ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ»Π°Π²ΡΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π±ΠΎΡΡΠΎΠ²ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π° Π΄Π°Π΄Π΅Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π½Π° Π²ΡΠ΅ΠΊΠΈ 20 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΡΠ±ΠΈΡΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ±ΠΈΡΠΈΡ Π·Π° ΡΠΎΠ·ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄. Π ΠΊΡΠ°Ρ Π½Π° 20-ΡΠ΅ΠΊΡΠ½Π΄Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΡΡ Β«ΡΠ΅ ΡΡΠΌΠ±Π»ΠΈΡΠ°Β» ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΊΡΠΌ Π½ΠΎΠ² 20-ΡΠ΅ΠΊΡΠ½Π΄Π΅Π½ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π½Π° Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅. Π ΠΈΡΡΠ½ΠΎΠΊ 5.14 ΠΈΠ»ΡΡΡΡΠΈΡΠ° ΡΠ°Π·ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡ.

ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, Π²ΡΠΈΡΠΊΠΈ ΡΡΠ±ΠΈΡΠΈΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 20 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΡΠ° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π² ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ°. Π ΠΊΡΠ°Ρ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ² ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ.
Π Π»ΠΈΡΡΠΈΠ½Π³Π° 5.6 Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ ΠΊΠΎΠ΄, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Β«ΡΡΠΌΠ±Π»ΠΈΡΠ°ΡΠΈΒ» ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π·Π° ΡΠ»Π°Π²ΡΠ½Π΅ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π° Π²ΡΠ΅ΠΊΠΈ 20 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ (ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΌΠ°Π»ΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π² ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° TimeWindows.of, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Β«ΡΡΠΌΠ±Π»ΠΈΡΠ°ΡΒ» ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ. Π ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π½ΡΠΌΠ° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° until(), ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΡΡ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΡΠ°Π²Π΅Π½ Π½Π° 24 ΡΠ°ΡΠ°.
ΠΠ°ΠΊΡΠ°Ρ Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΠΏΡΠΎΠ·ΠΎΡΡΠΈ β Β«ΡΠΊΠ°ΡΠ°ΡΠΈΒ» (hopping) ΠΏΡΠΎΠ·ΠΎΡΡΠΈ.
Π‘ΠΊΠΎΠ»ΡΠ·ΡΡΠΈ (Β«ΡΠΊΠ°ΡΠ°ΡΠΈΒ») ΠΏΡΠΎΠ·ΠΎΡΡΠΈ
Π‘ΠΊΠΎΠ»ΡΠ·ΡΡΠΈΡΠ΅/Β«ΡΠΊΠ°ΡΠ°ΡΠΈΡΠ΅Β» (sliding/hopping) ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΡΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° Β«ΡΡΠΌΠ±Π»ΠΈΡΠ°ΡΠΈΡΠ΅Β», Π½ΠΎ Ρ ΠΌΠ°Π»ΠΊΠ° ΡΠ°Π·Π»ΠΈΠΊΠ°. Π‘ΠΊΠΎΠ»ΡΠ·ΡΡΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π½Π΅ ΠΈΠ·ΡΠ°ΠΊΠ²Π°Ρ ΠΏΡΠΈΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π²ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π», ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π°Ρ Π½ΠΎΠ² ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π½Π΅Π΄Π°Π²Π½ΠΈ ΡΡΠ±ΠΈΡΠΈΡ. Π’Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Π½ΠΎΠ²ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π½Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅, ΠΏΠΎ-ΠΊΡΠ°ΡΡΠΊ ΠΎΡ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ°.
ΠΠ° Π΄Π° ΠΈΠ»ΡΡΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·Π»ΠΈΠΊΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Β«ΡΡΠΌΠ±Π»ΠΈΡΠ°ΡΠΈΡΠ΅Β» ΠΈ Β«ΡΠΊΠ°ΡΠ°ΡΠΈΡΠ΅Β» ΠΏΡΠΎΠ·ΠΎΡΡΠΈ, ΡΠ΅ ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ Π±ΡΠΎΠ΅Π½Π΅ΡΠΎ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. ΠΠ°ΡΠ°ΡΠ° ΡΠ΅Π» Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ Π΄Π° ΠΏΡΠ΅Π±ΡΠΎΠΈΠΌ Π±ΡΠΎΡ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅, Π½ΠΎ Π½Π΅ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ°ΠΊΠ°ΠΌΠ΅ ΡΠ΅Π»ΠΈΡ ΠΏΠ΅ΡΠΈΠΎΠ΄, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ Π±ΡΠΎΡΡΠ°. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ Π±ΡΠΎΡΡΠ° Π½Π° ΠΏΠΎ-ΠΊΡΠ°ΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΠΌ Π΄Π° Π±ΡΠΎΠΈΠΌ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅ Π½Π° Π²ΡΠ΅ΠΊΠΈ 20 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, Π½ΠΎ ΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ Π±ΡΠΎΡΡΠ° Π½Π° Π²ΡΠ΅ΠΊΠΈ 5 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΠΊΠ°ΠΊΡΠΎ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 5.15. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠΈ ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ° Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Ρ ΠΏΡΠΈΠΏΠΎΠΊΡΠΈΠ²Π°ΡΠΈ ΡΠ΅ Π΄Π°Π½Π½ΠΈ.

Π Π»ΠΈΡΡΠΈΠ½Π³Π° 5.7 Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ ΠΊΠΎΠ΄ Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠΊΠΎΠ»ΡΠ·ΡΡΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ (ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

ΠΠ³Π»Π΅Π΄Π°Π»Π½ΠΎΡΠΎ" ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΎ Π² "ΡΠΊΠ°ΡΠ°ΡΠΎ" ΡΡΠ΅Π· Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° advanceBy(). Π Π΄Π°Π΄Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΡΡ Π·Π° Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π΅ 15 ΠΌΠΈΠ½ΡΡΠΈ.
Π ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π» Π²ΠΈΠ΄ΡΡ ΡΠ΅ ΠΊΠ°ΠΊ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ΡΠΎ Ρ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, Π±ΠΈΡ ΠΈΡΠΊΠ°Π» Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΠΈ Π½Π΅ΡΠ° ΠΎΡ ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π»:
- ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ΅ΡΠΈΠΉΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π½Π΅ ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ°Π²Π° ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ, Π° ΠΎΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅;
- "ΠΎΠ³Π»Π΅Π΄Π°Π»Π½ΠΈΡΠ΅" ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΠ±ΠΈΡΠΈΡ Π² Π·Π°Π΄Π°Π΄Π΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅;
- Π΄ΡΠ»ΠΆΠΈΠ½Π°ΡΠ° Π½Π° "ΡΠΊΠ°ΡΠ°ΡΠΈΡΠ΅" ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π΅ ΡΠΈΠΊΡΠΈΡΠ°Π½Π°, Π½ΠΎ ΡΠ΅ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΠ΅ΡΡΠΎ ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΏΡΠ΅ΡΠΈΡΠ°ΡΠΈ ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ Π½Π°ΡΡΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌΠ΅ KTable ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² KStream Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅.
5.3.3. Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ KStream ΠΈ KTable
Π Π³Π»Π°Π²Π° 4 ΠΎΠ±ΡΡΠ΄ΠΈΡ ΠΌΠ΅ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡΠ° KStream. Π‘Π΅Π³Π° ΡΠ΅ Π½Π°ΡΡΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΠ²ΡΡΠ·Π²Π°ΠΌΠ΅ KTable ΠΈ KStream. Π’ΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎ ΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΏΡΠΎΡΡΠ° ΠΏΡΠΈΡΠΈΠ½Π°. KStream Π΅ ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ, Π° KTable β ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π·Π°ΠΏΠΈΡΠΈ, Π½ΠΎ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΊΡΠΌ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ Π·Π°ΠΏΠΈΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡ KTable.
ΠΠ΅ΠΊΠ° Π²Π·Π΅ΠΌΠ΅ΠΌ Π΄Π°Π½Π½ΠΈ Π·Π° Π±ΡΠΎΡ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΈ Π΄Π° Π³ΠΈ ΡΠ²ΡΡΠΆΠ΅ΠΌ Ρ Π±ΠΎΡΡΠΎΠ²ΠΈ Π½ΠΎΠ²ΠΈΠ½ΠΈ ΠΏΠΎ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΠΈΠ½Π΄ΡΡΡΡΠΈΠΈ. ΠΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅, Π·Π° Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΡΠ΅ ΡΠΎΠ²Π° Ρ Π²Π΅ΡΠ΅ Π½Π°Π»ΠΈΡΠ½ΠΈΡ ΠΊΠΎΠ΄.
- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΉΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠ° KTable Ρ Π΄Π°Π½Π½ΠΈ Π·Π° Π±ΡΠΎΡ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π² KStream, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π·Π°ΠΌΠ΅Π½Π΅ΡΠ΅ ΠΊΠ»ΡΡΠ° Ρ ΠΊΠ»ΡΡ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π°Ρ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ°, ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΡΠΈΠΌΠ²ΠΎΠ» Π½Π° Π°ΠΊΡΠΈΠΈΡΠ΅.
- Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΠΎΠ±Π΅ΠΊΡ KTable, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠ° Ρ Π±ΠΎΡΡΠΎΠ²ΠΈ Π½ΠΎΠ²ΠΈΠ½ΠΈ. Π’ΠΎΠ·ΠΈ Π½ΠΎΠ² KTable ΡΠ΅ Π±ΡΠ΄Π΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠ·ΠΈΡΠ°Π½ ΠΏΠΎ ΠΈΠ½Π΄ΡΡΡΡΠΈΠΈ.
- Π‘Π²ΡΡΠΆΠ΅ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈΡΠ΅ Π½Π° Π½ΠΎΠ²ΠΈΠ½ΠΈΡΠ΅ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π·Π° Π±ΡΠΎΡ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎ ΠΈΠ½Π΄ΡΡΡΡΠΈΠΈ.
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ·ΠΈ ΠΏΠ»Π°Π½ Π·Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° KTable Π² KStream
ΠΠ° Π΄Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΡΠ΅ KTable Π² KStream, ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΎΡΠΎ.
- ΠΠ·Π²ΠΈΠΊΠ°ΠΉΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° KTable.toStream().
- Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° KStream.map Π·Π°ΠΌΠ΅Π½Π΅ΡΠ΅ ΠΊΠ»ΡΡΠ° Ρ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·Π²Π»Π΅ΡΠ΅ΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠ° TransactionSummary ΠΎΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Windowed.
ΠΠΈΠ΅ ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ΠΌ ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΡΠ»Π΅Π΄Π½Π°ΡΠ° Π²Π΅ΡΠΈΠ³Π° (ΠΊΠΎΠ΄ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.8).

Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ KStream.map, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΡΠ½Π°ΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ KStream ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅.
ΠΠ°Π²ΡΡΡΠΈΡ ΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΎΠ±Π΅ΠΊΡ KTable Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈ Π½ΠΎΠ²ΠΈΠ½ΠΈ.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° KTable Π·Π° Π±ΠΎΡΡΠΎΠ²ΠΈ Π½ΠΎΠ²ΠΈΠ½ΠΈ
ΠΠ° ΡΠ°ΡΡΠΈΠ΅, Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±Π΅ΠΊΡ KTable Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° ΡΠ΅Π΄ ΠΊΠΎΠ΄ (ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.9).

Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠΊΠ°Π·Π²Π°ΠΌΠ΅ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Serde, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΡΠΎΠΊΠΎΠ²ΠΈ Serde. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ·Π±ΡΠΎΡΠ²Π°Π½Π΅ΡΠΎ EARLIEST, ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΡΠ΅ Π·Π°ΠΏΡΠ»Π²Π° Ρ Π·Π°ΠΏΠΈΡΠΈ Π² ΡΠ°ΠΌΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ.
Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΡΡΡΠΏΠΊΠ° β ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΡΠΎ.
Π‘ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° Π½ΠΎΠ²ΠΈΠ½ΠΈΡΠ΅ Ρ Π΄Π°Π½Π½ΠΈ Π·Π° Π±ΡΠΎΡ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈΡΠ΅
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΡΡΡΠ΄Π½ΠΎΡΡΠΈ. Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π»ΡΠ²ΠΎ ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, Π² ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ Π½ΡΠΌΠ° Π±ΠΎΡΡΠΎΠ²ΠΈ Π½ΠΎΠ²ΠΈΠ½ΠΈ Π·Π° ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΠΈΠ½Π΄ΡΡΡΡΠΈΡ (Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.10).

Π’Π°Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ leftJoin Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΡΠ° Π² Π³Π»Π°Π²Π° 4, ΠΌΠ΅ΡΠΎΠ΄ΡΡ JoinWindow Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΡΠΎ KStream-KTable Π·Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΠ»ΡΡ Π² KTable ΠΏΡΠΈΡΡΡΡΠ²Π° ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎ Π·Π°ΠΏΠΈΡ. Π’Π°ΠΊΠΎΠ²Π° ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ Π²ΡΠ² Π²ΡΠ΅ΠΌΠ΅ΡΠΎ: Π·Π°ΠΏΠΈΡΡΡ ΠΈΠ»ΠΈ Π΅ Π² KTable, ΠΈΠ»ΠΈ Π³ΠΎ Π½ΡΠΌΠ°. ΠΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΈΠ·Π²ΠΎΠ΄: Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ KTable ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠ±ΠΎΠ³Π°ΡΠΈΠΌ KStream Ρ ΠΏΠΎ-ΡΡΠ΄ΠΊΠΎ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ.
Π ΡΠ΅Π³Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎ-Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΠΎΠ±ΠΎΠ³Π°ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ±ΠΈΡΠΈΡΡΠ° ΠΎΡ KStream.
5.3.4. ΠΠ±Π΅ΠΊΡΠΈ GlobalKTable
ΠΠ°ΠΊΡΠΎ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅, ΠΈΠΌΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΠΎΠ±ΠΎΠ³Π°ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΊΡΠΌ ΡΡΡ . Π Π³Π»Π°Π²Π° 4 Π²ΠΈΠ΄ΡΡ ΡΠ΅ ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π° Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡΠ° KStream, Π° Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΡΠ°Π·Π΄Π΅Π» β ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ KStream ΠΈ KTable. ΠΡΠ² Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ΅ ΠΎΡΡΠ°Π·ΡΠ²Π°Ρ Π½Π° Π½ΠΎΠ² ΡΠΈΠΏ ΠΈΠ»ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΈΠ·ΡΠΈΡΠ½ΠΎ, Π° ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° Kafka Streams Π³ΠΎ ΠΏΡΠ°Π²ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ. ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ ΡΠ° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΈ Π·Π°ΠΏΠΈΡΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π°Ρ Π² Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΈ, ΠΈΠ½Π°ΡΠ΅ ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ (ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΎΠ±ΡΡΠ΄Π΅Π½ΠΎ Π² Π³Π»Π°Π²Π° 4, Π² ΡΠΎΡΠΊΠ°ΡΠ° βΠΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅β ΠΎΡ ΠΏΠΎΠ΄Π³Π»Π°Π²Π° 4.2.4).
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ ΠΈΠΌΠ° ΡΠ²ΠΎΡ ΡΠ΅Π½Π°
ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ β Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈ Π·Π° ΡΠ΅ΡΡΡΡΠΈ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ ΡΠ΅ΠΌΠΈ, Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π΄ΡΠ±Π»ΠΈΡΠ°Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π² ΠΎΡΠ΅ Π΅Π΄Π½Π° ΡΠ΅ΠΌΠ°; ΡΠΎ ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ Π·Π°ΠΏΠΈΡ ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ ΠΎΡ ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ°. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π΅Π΄ΠΈΠ½ Π°ΡΠΏΠ΅ΠΊΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Ρ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ Π² ΠΏΠΎΡΠ΅Π΄ΠΈΡΠ°, Π΄Π° ΡΠ΅ ΠΎΡΠΎΠ±ΡΠ°Π·ΡΡ Π·Π°ΠΏΠΈΡΠΈΡΠ΅ Ρ Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅.
Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΈ Π½Π°Π±ΠΎΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ
Π Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΎΠ±Π΅ΠΌΡΡ Π½Π° ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, Ρ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠ° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ ΠΌΠ°Π»ΡΠΊ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠ»Π½ΠΈΡΠ΅ ΠΈΠΌ ΠΊΠΎΠΏΠΈΡ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΠ±Π΅ΡΠ°Ρ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ Π²ΡΠ·Π»ΠΈΡΠ΅. ΠΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ Π² Kafka Streams Π΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½ ΠΊΠ»Π°Ρ GlobalKTable.
ΠΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈΡΠ΅ Π½Π° GlobalKTable ΡΠ° ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ Π²ΡΠ·Π»ΠΈΡΠ΅. Π ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ Π²ΡΠ·Π»ΠΈΡΠ΅ ΠΏΡΠΈΡΡΡΡΠ²Π°Ρ Π²ΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ, Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΡΠ΅ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΠΏΠΎΡΠΎΠΊΡΡ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ ΠΏΠΎ ΠΊΠ»ΡΡΠ° Π½Π° ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ, Π·Π° Π΄Π° Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΠΊΡΠΈΠΈ. Π§ΡΠ΅Π· ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ GlobalKTable ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΈ Π±Π΅Π·ΠΊΠ»ΡΡΠΎΠ²ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ. ΠΠ΅ΠΊΠ° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ, Π·Π° Π΄Π° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ.
Π‘Π²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ KStream Ρ ΠΎΠ±Π΅ΠΊΡΠΈ GlobalKTable
Π ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π» 5.3.2 ΠΈΠ·Π²ΡΡΡΠΈΡ ΠΌΠ΅ ΠΎΠΊΠΎΠ½Π½ΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ°Π·ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ Π° ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°ΠΊΠ°:
{customerId='074-09-3705', stockTicker='GUTM'}, 17
{customerId='037-34-5184', stockTicker='CORK'}, 16ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ΅Π·ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π° Π½Π° ΠΏΠΎΡΡΠ°Π²Π΅Π½Π°ΡΠ° ΡΠ΅Π», Π±ΠΈ Π±ΠΈΠ»ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, Π°ΠΊΠΎ ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π΅ ΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΠΏΡΠ»Π½ΠΎΡΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°. ΠΠ° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΡΠ°, ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ°Ρ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ, Π½ΠΎ Π·Π° ΡΠΎΠ²Π° ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΡΡ Π΄Π²Π΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅. Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° GlobalKTable ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΠΌ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠ° ΡΠ΅Π»ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡΠ° countStream ΠΎΡ Π»ΠΈΡΡΠΈΠ½Π³Π° 5.11 (ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/GlobalKTableExample.java), ΠΊΠ°ΡΠΎ Π³ΠΎ ΡΠ²ΡΡΠΆΠ΅ΠΌ Ρ Π΄Π²Π° ΠΎΠ±Π΅ΠΊΡΠ° GlobalKTable.

ΠΠ΅ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΡ
ΠΌΠ΅ ΡΠΎΠ²Π° ΠΏΠΎ-ΡΠ°Π½ΠΎ, ΡΠ°ΠΊΠ° ΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΠ²ΡΠ°ΡΡΠΌ. ΠΠΎ ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Ρ, ΡΠ΅ ΠΊΠΎΠ΄ΡΡ Π²ΡΠ² ΡΡΠ½ΠΊΡΠΈΡΡΠ° toStream().map Π΅ Π°Π±ΡΡΡΠ°Ρ
ΠΈΡΠ°Π½ Π² ΠΎΠ±Π΅ΠΊΡ-ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ Π²Π³ΡΠ°Π΄Π΅Π½Π° lambda-ΠΈΠ·ΡΠ°Π· Π·Π° ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡ.
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ° Π΅ ΠΎΠ±ΡΠ²ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π²Π° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π½Π° GlobalKTable (ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.12).

ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ΅ΠΌΠΈΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ·Π±ΡΠΎΠΈΠΌΠΈ ΡΠΈΠΏΠΎΠ²Π΅.
Π‘Π΅Π³Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΡ ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ, ΠΎΡΡΠ°Π²Π° Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄Π° Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ (ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.13).

ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π² ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΈΠΌΠ° Π΄Π²Π΅ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ, ΡΠ΅ ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Π² Π²Π΅ΡΠΈΠ³Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ Π² ΠΊΡΠ°Ρ Π½Π° ΡΡΠ»Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π³ΠΎΡΠ΅ΠΏΠΎΡΠΎΡΠ΅Π½Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΠΈΠ΄:
{customer='Barney, Smith' company="Exxon", transactions= 17}Π‘ΡΡΠ½ΠΎΡΡΡΠ° Π½Π΅ ΡΠ΅ Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ»Π°, Π½ΠΎ ΡΠ΅Π·ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΏΠΎ-ΡΡΠ½ΠΎ.
ΠΠΊΠΎ ΠΌΠΈΡΠ»ΠΈΡΠ΅ ΠΈ Π·Π° Π³Π»Π°Π²Π° 4, Π²Π΅ΡΠ΅ ΡΡΠ΅ Π²ΠΈΠΆΠ΄Π°Π»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΈΠΏΠ° ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. Π’Π΅ ΡΠ° ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ Π² ΡΠ°Π±Π». 5.2. Π’Π°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΡΡΠ°Π·ΡΠ²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, Π°ΠΊΡΡΠ°Π»Π½ΠΈ Π·Π° Π²Π΅ΡΡΠΈΡ 1.0.0 Π½Π° Kafka Streams; Π² Π±ΡΠ΄Π΅ΡΠΈ ΠΈΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΡΡΡΠΏΡΡ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ.

Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΠΎΠΌΠ½ΡΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ²ΡΡΠ·Π²Π°ΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ (KStream) ΠΈ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ (KTable) Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π°ΠΊΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π΅ Π΅ ΡΠ²ΡΡΠ΄Π΅ Π³ΠΎΠ»ΡΠΌ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠ° GlobalKTable. GlobalKTable ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈΡΠ° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΠΊΡΠΈΠΈ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΎΡ Π²ΡΠ·Π»ΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Kafka Streams, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΠΉΠΊΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π΄Π°Π½Π½ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ΅ΠΊΡΠΈΡΡΠ°, ΠΊΡΠΌ ΠΊΠΎΡΡΠΎ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° ΠΊΠ»ΡΡΡΡ.
ΠΠΎ-Π½Π°ΡΠ°ΡΡΠΊ ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° Kafka Streams, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π±Π΅Π· ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠ° Π² Kafka.
5.3.5. ΠΠΎΡΡΡΠΏΠ½ΠΎ Π·Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅
ΠΠ΅ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ, ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ ΠΌΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Π² ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° (Π·Π° ΡΠ΅Π»ΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°) ΠΈΠ»ΠΈ Π³ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Ρ ΠΌΠ΅ Π² ΡΠ΅ΠΌΠ° (Π·Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½ΠΈ ΡΠ΅Π»ΠΈ). ΠΡΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Π² ΡΠ΅ΠΌΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΎΡ Π½Π° Kafka, Π·Π° Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°ΡΠ΅.
Π§Π΅ΡΠ΅Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ΅Π·ΠΈ ΡΠ΅ΠΌΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΠΈΡΠ° Π·Π° ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ (materialized views). ΠΠ° Π½Π°ΡΠΈΡΠ΅ Π½ΡΠΆΠ΄ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡ ΠΈΠ·Π³Π»Π΅Π΄ ΠΎΡ Β«Π£ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡΒ»: Β«β¦ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°ΡΠ²ΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π»ΠΎΠΊΠ°Π»Π½Π° ΠΊΠΎΠΏΠΈΡ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΡ ΡΠ΅Π΄ΠΎΠ²Π΅ ΠΈ/ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, ΠΈΠ»ΠΈ ΡΠ²ΠΎΠ΄Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π° ΡΡΠ΅Π· Π°Π³ΡΠ΅Π³Π°ΡΠΈΡΒ» (https://en.wikipedia.org/wiki/Materialized_view).
Kafka Streams ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ (interactive queries) ΠΊΡΠΌ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π΄Π°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ. ΠΠ°ΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΊΡΠΌ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΅ Ρ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Β«ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅Β». Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π΅ ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΡΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π΅ΡΡΠ³Π»Π°ΡΡΠ²Π°Π½ΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ.
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΈ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΅ ΠΎΡ Π³ΠΎΠ»ΡΠΌΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°Π±Π»Π°, Π±Π΅Π· Π½ΡΠΆΠ΄Π°ΡΠ° ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Π½Π° Kafka. Π’Ρ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π° ΠΈ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ½ΠΎΠ²ΠΎ Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π°ΡΠ΅ Π΄Π°Π½Π½ΠΈ:
- Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΡΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π±ΡΡΠ·ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΡΡΡ ;
- ΠΈΠ·ΠΊΠ»ΡΡΠ²Π° ΡΠ΅ Π΄ΡΠ±Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ Π½Π΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π²ΡΠ² Π²ΡΠ½ΡΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
ΠΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΈΡΠΊΠ°ΠΌ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΠ΅: ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠΎΠ²Π° Π²ΠΈ Π΄Π°Π²Π°. ΠΠΌΠ΅ΡΡΠΎ Π΄Π° ΠΊΠΎΠ½ΡΡΠΌΠΈΡΠ°ΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ Kafka ΠΈ Π΄Π° Π·Π°ΠΏΠΈΡΠ²Π°ΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Ρ ΡΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ. ΠΠΈΡΠ΅ΠΊΡΠ½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΡ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π°Ρ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ΄ (ΠΎΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π») ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠΎΡΡΡΠ΅Ρ (ΠΎΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠ° Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅).
Π Π½Π°ΡΡΠΎΡΡΠ°ΡΠ° Π³Π»Π°Π²Π° ΠΎΠ±Ρ Π²Π°Π½Π°Ρ ΠΌΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ ΠΎΠ±Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π·Π°ΡΠΎΠ²Π° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΠ²Π°ΠΌΠ΅ Π΄ΠΈΡΠΊΡΡΠΈΡΡΠ° Π·Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΊΡΠΌ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΡΠ° Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΡΡΠ°. ΠΠΎ Π½Π΅ ΡΠ΅ ΠΏΡΠΈΡΠ΅ΡΠ½ΡΠ²Π°ΠΉΡΠ΅: Π² Π³Π»Π°Π²Π° 9 ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠ°Π±Π»Π° Ρ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ. ΠΠ° Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΡΡΡ Π½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Kafka Streams ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΠΈ ΠΈ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ Π³Π»Π°Π²ΠΈ.
Π Π΅Π·ΡΠΌΠ΅
- ΠΠ±Π΅ΠΊΡΠΈΡΠ΅ KStream ΠΎΠ»ΠΈΡΠ΅ΡΠ²ΠΎΡΡΠ²Π°Ρ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ ΡΡΠ±ΠΈΡΠΈΡ, ΡΡΠ°Π²Π½ΠΈΠΌΠΈ Ρ Π²ΠΌΡΠΊΠ²Π°Π½ΠΈΡ Π² Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠΠ±Π΅ΠΊΡΠΈΡΠ΅ KTable ΠΎΠ»ΠΈΡΠ΅ΡΠ²ΠΎΡΡΠ²Π°Ρ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ, ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΡΠ²Π°Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π² Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. Π Π°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ° KTable Π½Π΅ Π½Π°ΡΠ°ΡΡΠ²Π°, ΡΡΠ°ΡΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡ Ρ Π½ΠΎΠ²ΠΈ.
- ΠΠ±Π΅ΠΊΡΠΈΡΠ΅ KTable ΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ.
- Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΎΠΊΠΎΠ½Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»ΡΡ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ.
- ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ GlobalKTable ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ Π²ΡΡΠΊΠ° ΡΠΎΡΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ.
- ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΡΠ° ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ KStream, KTable ΠΈ GlobalKTable.
ΠΠΎ ΡΠ΅Π³Π° ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ°Ρ ΠΌΠ΅ Π²ΡΡΡ Ρ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Kafka Streams Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π²ΠΈΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΈΡ DSL KStream. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π²ΠΈΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΈΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΈ ΠΈ ΠΊΡΠ°ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΌΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡ. Π Π°Π±ΠΎΡΠ°ΡΠ° Ρ DSL KStream ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΡΠ°ΡΠΊΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ΄Π° Π·Π° ΡΠΌΠ΅ΡΠΊΠ° Π½Π° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ΅ΠΏΠ΅Π½ΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ». Π ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π³Π»Π°Π²Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΈΡ API Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈΡΠ΅ Π²ΡΠ·Π»ΠΈ ΠΈ ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ ΡΠ΅ ΡΡΠ°Π½Π°Ρ ΠΏΠΎ-Π΄ΡΠ»Π³ΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΄ΠΎΡΠ΅Π³Π°, Π½ΠΎ ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ΠΊΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ Π²ΡΠ·Π΅Π», ΠΎΡ ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π°.
β ΠΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Ρ ΠΊΠ½ΠΈΠ³Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ΡΠ΅ Π½Π°
β ΠΠ° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π° Π₯Π°Π±ΡΠΎΠΊ, ΠΎΡΡΡΡΠΏΠΊΠ° ΠΎΡ 25% Ρ ΠΊΡΠΏΠΎΠ½ β Kafka Streams
β ΠΡΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΠ»Π°ΡΠ°Π½Π΅ΡΠΎ Π·Π° Ρ
Π°ΡΡΠΈΠ΅Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠ½ΠΈΠ³Π°ΡΠ°, Π½Π° e-mail ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½Π° Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½Π° ΠΊΠ½ΠΈΠ³Π°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
