ΠΡΡΡΠ²ΠΎΠΊ. 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<String, ShareVolume>. Π’Π΅ΠΏΠ΅ΡΡ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΠΊΠ°ΠΊΡΡ ΡΠΎΠ»Ρ ΠΈΠ³ΡΠ°Π΅Ρ 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 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½. ΠΠ΅Π½ΡΡΠΈΠΉ ΡΠ΅Π°Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΈΠ²Π°ΡΡΡΡ Ρ ΡΠ΅Π°Π½ΡΠΎΠΌ ΡΠ»Π΅Π²Π° ΠΎΡ Π½Π΅Π³ΠΎ. Π ΡΠ΅Π°Π½Ρ ΡΠΏΡΠ°Π²Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π° Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠΌ Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. Π‘Π΅Π°Π½ΡΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π° ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΠΊΠΈ Π΄Π°ΡΡ/Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΠ· Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΡΠ΅Π°Π½ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ Π·Π°ΠΏΠΈΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡ . Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 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='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