ΠΠ΄ΡΠ°Π²Π΅ΠΉΡΠ΅, Π₯Π°Π±ΡΠΎΠΆΠΈΡΠ΅Π»ΠΈ! Π’Π°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π° Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΡΡΠ° Π·Π° Π²ΡΠ΅ΠΊΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΠΉΡΠΎ ΠΈΡΠΊΠ° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Π΅ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. Π Π°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΡΠ΅ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΡΡΠΈ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ 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 ΠΏΠΎ ΠΎΠ±ΡΠΈΡ ΠΈΠΌ ΠΊΠ»ΡΡ;
- ΠΈΠ·Π²ΡΡΡΠ²Π°ΠΌΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΡΠΎ ΡΠ²ΠΈΠ²Π°Π½Π΅ ΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅ Π²ΡΡΡ Ρ ΡΠ΅Π·ΠΈ Π³ΡΡΠΏΠΈΡΠ°Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ.
Π£ΠΌΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΠΌΠ΅ ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΅ Π²Π°ΠΆΠ½ΠΎ Π·Π° ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΌΠΈΡΡΠ»Π° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΡΠΈ ΠΏΡΠ΅Π· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Kafka Streams, ΠΈ Π·Π° ΡΠ°Π·ΠΊΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ Π½ΠΎΡΡΡ.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΡΠ²ΡΡΠ·Π°Ρ ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΡ ΠΊΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ, ΠΎΠ±ΡΡΠΆΠ΄Π°Π½ΠΈ ΠΏΠΎ-ΡΠ°Π½ΠΎ Π² ΡΠ°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π°. Π Π³Π»Π°Π²Π° 4 ΡΠ°Π·Π³Π»Π΅Π΄Π°Ρ ΠΌΠ΅ ΠΊΠΎΠ»ΠΊΠΎ Π²Π°ΠΆΠ½ΠΎ Π΅ Π·Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΏΡΠΈ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡ. ΠΡΡΠ²ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡ ΡΠ°Π·ΠΈ Π³Π»Π°Π²Π° ΠΏΠΎΠΊΠ°Π·Π° Π·Π°ΡΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π²Π°ΠΆΠ½ΠΎ β ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ Π²Π΅ΡΠ΅ ΡΡΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ. ΠΠΎΠΊΠ°Π»Π½ΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΈΠ·Π±ΡΠ³Π²Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ Π·Π°Π±Π°Π²ΡΠ½ΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ°Π²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎ-ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΎ ΠΈ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ.
ΠΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π²ΡΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π° ΡΠ²ΠΈΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° ΡΠ²ΠΈΠ²Π°Π½Π΅ ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π²ΡΡΡΠ°Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° KTable, Π° KTable ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ, Π·Π° Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Ρ Π½ΠΎΠ²ΠΈ. ΠΠ°ΠΊΡΠΎ Π²ΠΈΠ΄ΡΡ ΡΠ΅, Π½Π΅ Π²ΡΠΈΡΠΊΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°Ρ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ°, ΠΈ ΡΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ ΡΠ° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ Π·Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠΊΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, KTable ΡΠ΅ ΠΈΠ·ΠΏΡΠ°ΡΠ° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π½Π° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡΡΠ° ΠΈ ΡΠ²ΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π°ΠΏΡΠ΅Π΄.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΡΠΎ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ, Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» β ΡΠ°ΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ (windowing operations).
5.3.2. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ
Π ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ Π·Π°ΠΏΠΎΠ·Π½Π°Ρ ΠΌΠ΅ Ρ "ΠΏΠ»ΡΠ·Π³Π°ΡΠΈ" ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° ΡΠ²ΠΈΠ²Π°Π½Π΅ ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΡΠ²ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈΡΠ΅ Π½Π° Π°ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π½Π° ΠΏΠ΅ΡΡΠ΅ Π½Π°ΠΉ-ΠΏΡΠΎΠ΄Π°Π²Π°Π½ΠΈ Π°ΠΊΡΠΈΠΈ Π½Π° Π±ΠΎΡΡΠ°ΡΠ°.
ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎΡΠΎ Π°Π³ΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ²ΠΈΠ²Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. Π ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ Π±ΠΎΡΡΠΎΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π°ΠΊΡΠΈΠΈ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΡΠ° ΠΈΠ·Π²ΡΡΡΠ΅Π½ΠΈ ΠΏΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 10 ΠΌΠΈΠ½ΡΡΠΈ. ΠΠ»ΠΈ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΡΠ° ΠΊΠ»ΠΈΠΊΠ½Π°Π»ΠΈ Π²ΡΡΡ Ρ Π½ΠΎΠ²ΠΈΡ ΡΠ΅ΠΊΠ»Π°ΠΌΠ½ΠΈΡ Π±Π°Π½Π΅Ρ ΠΏΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ 15 ΠΌΠΈΠ½ΡΡΠΈ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ, Π½ΠΎ Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ, ΠΎΡΠ½Π°ΡΡΡΠΈ ΡΠ΅ ΡΠ°ΠΌΠΎ Π·Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»ΠΈ (Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ).
ΠΡΠΎΠ΅Π½Π΅ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΏΠΎ ΠΊΡΠΏΡΠ²Π°Ρ
Π ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ ΡΠ΅ Π·Π°Π½ΠΈΠΌΠ°Π²Π°ΠΌΠ΅ Ρ ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ΅ΠΉΠ΄ΡΡΠΈ β ΠΈΠ»ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈΠ»ΠΈ ΡΠΌΠ½ΠΈ ΡΠΈΠ½Π°Π½ΡΠΈΠ΅ΡΠΈ-Π΅Π΄ΠΈΠ½Π°ΡΠΈ.
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π΄Π²Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅. ΠΠ΄Π½Π°ΡΠ° ΠΎΡ ΡΡΡ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π΄Π° Π·Π½Π°Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΊΡΠΏΡΠ²Π°Ρ/ΠΏΡΠΎΠ΄Π°Π²Π°Ρ Π»ΠΈΠ΄Π΅ΡΠΈΡΠ΅ Π½Π° ΠΏΠ°Π·Π°ΡΠ°. ΠΠΊΠΎ ΡΠ΅Π·ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈΠ³ΡΠ°ΡΠΈ ΠΈ ΠΎΠΏΠΈΡΠ½ΠΈ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΡΠΈ Π²ΠΈΠΆΠ΄Π°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΈΠΌΠ° ΡΠΌΠΈΡΡΠ» Π΄Π° ΡΠ»Π΅Π΄Π²Π°ΠΌΠ΅ ΡΡΡ Π½Π°ΡΠ° ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ. ΠΡΠΎΡΠ°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π΅ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Ρ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΠΏΡΠΈΠ·Π½Π°ΡΠΈ Π½Π° Π½Π΅Π·Π°ΠΊΠΎΠ½Π½ΠΈ ΡΠ΄Π΅Π»ΠΊΠΈ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π²ΡΡΡΠ΅ΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΠ° ΡΠΎΠ²Π° ΡΠ΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΊΠΎΡΠ΅Π»Π°ΡΠΈΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π³ΠΎΠ»Π΅ΠΌΠΈΡΠ΅ ΠΈΠ·Π±Π»ΠΈΡΠΈ Π½Π° ΠΏΡΠΎΠ΄Π°ΠΆΠ±ΠΈ ΠΈ Π²Π°ΠΆΠ½ΠΈ ΠΏΡΠ΅ΡΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ.
Π’Π°ΠΊΠΎΠ²Π° Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ Π΅ΡΠ°ΠΏΠΈ ΠΊΠ°ΡΠΎ:
- ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠΎΠΊ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΎΡ ΡΠ΅ΠΌΠ°ΡΠ° stock-transactions;
- Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π²Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΊΡΠΏΡΠ²Π°ΡΠ° ΠΈ Π±ΠΎΡΡΠΎΠ² ΡΠΈΠΌΠ²ΠΎΠ» Π½Π° Π°ΠΊΡΠΈΡ. ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π° groupBy Π²ΡΡΡΠ° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ Π½Π° ΠΊΠ»Π°ΡΠ° KGroupedStream;
- Π²ΡΡΠ½Π°ΡΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄ KGroupedStream.windowedBy ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ½ΠΎ Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΡΠΈΠΏΠ° Π½Π° ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ°, ΡΠ΅ Π²ΡΡΡΠ° ΠΈΠ»ΠΈ TimeWindowedKStream, ΠΈΠ»ΠΈ SessionWindowedKStream;
- Π±ΡΠΎΠ΅Π½Π΅ Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡΠ° Π½Π° Π°Π³ΡΠ΅Π³ΠΈΡΠ°Π½Π΅. ΠΡΠΎΠ·ΠΎΡΠ΅ΡΠ½ΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΠΎΡ Π΄Π°Π½Π½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ Π΄Π°Π»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ Π·Π°ΠΏΠΈΡ ΡΠ΅ Π²Π·ΠΈΠΌΠ° Π² ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΠΏΡΠΈ Π±ΡΠΎΠ΅Π½Π΅ΡΠΎ;
- Π·Π°ΠΏΠΈΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ Π² ΡΠ΅ΠΌΠ°ΡΠ° ΠΈΠ»ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ ΠΈΠΌ Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°.
Π’ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΡΠ° Π½Π° ΡΠΎΠ²Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅ ΠΏΡΠΎΡΡΠ°, Π½ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° ΠΉ Π½Π΅ Π±ΠΈ Π±ΠΈΠ»Π° ΠΈΠ·Π»ΠΈΡΠ½Π°. ΠΠ΅ΠΊΠ° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π½Π° ΡΠΈΡ. 5.11.
ΠΠΎ-Π½Π°ΡΠ°ΡΡΠΊ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ·ΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΊΠΎΠ΄.

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

ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅ΡΠΈΠΉΠ½ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅ Π½Π° Π±ΠΎΡΡΠΎΠ²ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ
ΠΠ΅ΠΊΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅ΡΠΈΠΉΠ½ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ, Π·Π° Π΄Π° ΡΠ»ΠΎΠ²ΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π±ΠΎΡΡΠΎΠ²ΠΈΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ΅ΡΠΈΠΉΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³ 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.
ΠΡ ΡΠ°Π·ΠΊΠ°Π·Π°Π½ΠΎΡΠΎ Π² ΡΠ°Π·ΠΈ ΡΠ΅ΠΊΡΠΈΡ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠ»ΡΡΠΎΠ²ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ:
- ΡΠ΅ΡΠΈΠΈΡΠ΅ Π½Π΅ ΡΠ° Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΈ. ΠΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΡΠΈΡΡΠ° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΎΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π² Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»;
- Π²ΡΠ΅ΠΌΠ΅Π²ΠΈΡΠ΅ ΠΏΠ΅ΡΠ°ΡΠΈ Π² Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ Π΄Π°Π»ΠΈ ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ ΠΏΠΎΠΏΠ°Π΄Π° Π² ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ° ΡΠ΅ΡΠΈΡ ΠΈΠ»ΠΈ Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π½Π° Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅.
Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ Π²ΠΈΠ΄ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ β βΠΏΡΠ΅Π²ΡΡΡΠ°ΡΠΈβ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ.
βΠΡΠ΅Π²ΡΡΡΠ°ΡΠΈβ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ
"Π’ΡΠΌΠ±Π»ΠΈΡΡΡΠΈ" (tumbling) ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΡΠ»Π°Π²ΡΡ ΡΡΠ±ΠΈΡΠΈΡ, ΠΏΠΎΠΏΠ°Π΄Π°ΡΠΈ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π». ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅ΡΠ΅ ΡΠΈ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ»Π°Π²ΡΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π±ΠΎΡΡΠΎΠ²ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π° Π΄Π°Π΄Π΅Π½Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π½Π° Π²ΡΠ΅ΠΊΠΈ 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 Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΡΠ΅ ΠΊΠ»ΡΡΠ° Ρ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΡΠ΅ ΠΎΡ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Windowed ΠΎΠ±Π΅ΠΊΡΠ° TransactionSummary.
Π©Π΅ ΡΠ²ΡΡΠΆΠ΅ΠΌ ΡΠ΅Π·ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½ (ΠΊΠΎΠ΄ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π½Π°ΠΌΠ΅ΡΠ΅Π½ Π² ΡΠ°ΠΉΠ»Π° 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 Π΅ Π°Π±ΡΡΡΠ°Ρ
ΠΈΡΠ°Π½ Π² ΠΎΠ±Π΅ΠΊΡ-ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡ Π²ΠΌΠ΅ΡΡΠΎ Π²Π³ΡΠ°Π΄Π΅Π½Π° Π»ΡΠΌΠ±Π΄Π° ΠΈΠ·ΡΠ°Π·.
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΡ Π΅ΡΠ°ΠΏ Π΅ ΠΎΠ±ΡΠ²ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π²Π° Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π½Π° GlobalKTable (ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ Π² ΡΠ°ΠΉΠ»Π° src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.12).

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

ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π² ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄ ΠΈΠΌΠ° Π΄Π²Π΅ ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ, ΡΠ΅ ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π²Π΅ΡΠΈΠ³Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΠΎΡΠ΄Π΅Π»Π½ΠΎ Π½ΠΈΡΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΈΠΌ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π Π΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Ρ Π² ΠΊΡΠ°Ρ Π½Π° ΡΡΠ»Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
ΠΠΎΠ³Π°ΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π³ΠΎΡΠ΅ΠΏΠΎΡΠΎΡΠ΅Π½Π°ΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡ Π²ΠΈΠ΄:
{customer='ΠΠ°ΡΠ½ΠΈ, Π‘ΠΌΠΈΡ' 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
β Π‘Π»Π΅Π΄ ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ»Π°ΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ΅ΡΠ°ΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ΠΊΠ½ΠΈΠ³Π°ΡΠ°, Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½Π°ΡΠ° ΠΊΠ½ΠΈΠ³Π° ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΡΠ°ΡΠ΅Π½Π° Π½Π° ΠΈΠΌΠ΅ΠΉΠ».
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
