Uittreksel. 5.3. Aggregasie en venster bedrywighede
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅ΡΠ°ΡΡΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ Kafka Streams. ΠΠΎΠΊΠ° ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ Kafka Streams:
- skepping van verwerkingstopologie;
- gebruik van staat in stroomtoepassings;
- die uitvoering van datastroomverbindings;
- verskille tussen gebeurtenisstrome (KStream) en opdateringstrome (KTable).
Π ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΌΡ ΡΠΎΠ±Π΅ΡΠ΅ΠΌ Π²ΡΠ΅ ΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΠ΅ΡΡ Ρ ΠΎΠΊΠΎΠ½Π½ΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ β Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ΅ΡΠ²ΡΠΌ Π½Π°ΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎΠ΅ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
5.3.1. Samevoeging van aandeelverkope volgens industrie
ΠΠ³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠ° β ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ. ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΠ»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΈΠ· Π΄Π°Π½Π½ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΠΈΡ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠ° ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²Π°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΡ ΠΊΠΎΡΡΡΠΌ Π²Π½ΡΡΡΠΈΠ΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠ΄Π΅ΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΡΠΎΠ΄Π°ΠΆ Π°ΠΊΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΡΡΠ°ΡΠ»ΡΡ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΏΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΏΡΠΎΠ΄Π°ΠΆ Π°ΠΊΡΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΎΡΡΠ°ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ.
ΠΠ»Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ°Π³ΠΎΠ² ΠΏΠΎ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Ρ Π΄Π°Π½Π½ΡΡ Π² Π½ΡΠΆΠ½ΡΠΉ Π²ΠΈΠ΄ (Π΅ΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ Π² ΠΎΠ±ΡΠΈΡ ΡΠ΅ΡΡΠ°Ρ ).
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠΏΠΈΠΊΠ°, ΠΏΡΠ±Π»ΠΈΠΊΡΡΡΠΈΠΉ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΡΠΎΡΠ³ΠΎΠ²Π»Π΅ Π°ΠΊΡΠΈΡΠΌΠΈ. ΠΠ°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° StockTransaction Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ShareVolume. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ StockTransaction ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ΄Π°ΠΆ, Π° Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠ΄Π°Π²Π°Π΅ΠΌΡΡ Π°ΠΊΡΠΈΠΉ.
- Π‘Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ShareVolume ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ Π°ΠΊΡΠΈΠΉ. ΠΠΎΡΠ»Π΅ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅ΡΠ½ΡΡΡ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ ΡΡΠΌΠΌ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² ΠΏΡΠΎΠ΄Π°ΠΆ Π°ΠΊΡΠΈΠΉ. Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ KStream.groupBy Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΠΈΠΏΠ° KGroupedStream. Π ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ KTable ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠ·Π²Π°Π² Π΄Π°Π»Π΅Π΅ ΠΌΠ΅ΡΠΎΠ΄ KGroupedStream.reduce.
Wat is die KGroupedStream-koppelvlak
Die KStream.groupBy- en KStream.groupByKey-metodes gee 'n KGroupedStream-instansie terug. KGroupedStream is 'n intermediΓͺre voorstelling van die stroom gebeurtenisse na groepering volgens sleutels. Dit is glad nie ontwerp om direk met hom te werk nie. In plaas daarvan word KGroupedStream gebruik vir samevoegingsbewerkings wat altyd 'n KTable tot gevolg het. En aangesien die resultaat van die samevoegingsoperasies 'n KTable is en hulle 'n staatswinkel gebruik, is dit moontlik dat nie alle opdaterings in die resultaat verder in die pyplyn gestuur word nie.
ΠΠ΅ΡΠΎΠ΄ KTable.groupBy Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ KGroupedTable β ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, ΠΏΠ΅ΡΠ΅Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎ ΠΊΠ»ΡΡΡ.
Π‘Π΄Π΅Π»Π°Π΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΡΡΠ² ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΠΈΡ. 5.9, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΡΠ΅Π³ΠΎ ΠΌΡ Π΄ΠΎΠ±ΠΈΠ»ΠΈΡΡ. ΠΡΠ° ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π²Π°ΠΌ ΡΠΆΠ΅ Ρ ΠΎΡΠΎΡΠΎ Π·Π½Π°ΠΊΠΎΠΌΠ°.
ΠΠ·Π³Π»ΡΠ½Π΅ΠΌ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π° ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΡΠΎΠΉ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.2).
Bogenoemde kode is opvallend vir sy beknoptheid en groot volume aksies wat in verskeie reΓ«ls uitgevoer word. Jy sal dalk iets nuuts in die eerste parameter van die builder.stream-metode opmerk: die waarde van die AutoOffsetReset.EARLIEST opgesomde tipe (daar is ook LATEST), wat met die Consumed.withOffsetResetPolicy-metode gestel word. Hierdie opgesomde tipe kan gebruik word om 'n offset-terugstellingstrategie vir elke KStream of KTable te spesifiseer, en geniet voorkeur bo die offset-terugstellinginstelling vanaf die konfigurasie.
GroupByKey en GroupBy
Π ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ KStream Π΅ΡΡΡ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ: GroupByKey ΠΈ GroupBy. ΠΠ±Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ KGroupedTable, ΡΠ°ΠΊ ΡΡΠΎ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ: Π² ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ ?
ΠΠ΅ΡΠΎΠ΄ GroupByKey ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΡΡΠΈ Π² KStream ΡΠΆΠ΅ Π½Π΅ΠΏΡΡΡΡΠ΅. Π Π³Π»Π°Π²Π½ΠΎΠ΅, ΡΠ»Π°Π³ Β«ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ» Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π»ΡΡ.
ΠΠ΅ΡΠΎΠ΄ GroupBy ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠ΅Π½ΡΠ»ΠΈ ΠΊΠ»ΡΡΠΈ Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠ°ΠΊ ΡΡΠΎ ΡΠ»Π°Π³ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² true. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° GroupBy ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ, Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Ρ. ΠΏ. ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌΡ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Opsomming: Jy moet GroupByKey gebruik, nie GroupBy nie, waar moontlik.
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ mapValues ΠΈ groupBy β ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ sum() (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ src/main/java/bbejeck/model/ShareVolume.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.3).
Die ShareVolume.sum-metode gee die subtotaal van die aandeelverkoopvolume terug, en die resultaat van die hele berekeningsketting is 'n KTable-objek . Nou verstaan ββjy watter rol KTable speel. Wanneer ShareVolume-voorwerpe aankom, word die nuutste bygewerkte opdatering in die ooreenstemmende KTable-voorwerp gestoor. Dit is belangrik om te onthou dat alle opdaterings in die vorige shareVolumeKTable weerspieΓ«l word, maar nie almal word verder gestuur nie.
ΠΠ°Π»Π΅Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ KTable ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ ΠΏΡΠΎΠ΄Π°Π²Π°Π΅ΠΌΡΡ Π°ΠΊΡΠΈΠΉ), ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΌΠ°ΠΌΠΈ ΠΏΡΠΎΠ΄Π°ΠΆ Π°ΠΊΡΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΎΡΡΠ°ΡΠ»Π΅ΠΉ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ. ΠΠ°ΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π±ΡΠ΄ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ groupBy Π΄Π»Ρ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ShareVolume ΠΏΠΎ ΠΎΡΡΠ°ΡΠ»ΡΠΌ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ.
- ΠΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΡΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ShareVolume. ΠΠ° ΡΡΠΎΡ ΡΠ°Π· ΠΎΠ±ΡΠ΅ΠΊΡ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. Π ΡΠ°ΠΊΠΎΠΉ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°ΠΌΠΈ ΠΏΡΠΎΠ΄Π°Π½Π½ΡΡ Π°ΠΊΡΠΈΠΉ.
- ΠΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΠΈΠ· ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΏΡΠ½ΠΊΡΠ° Π² ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²Π΅ΡΠ½ΡΡΡ ΠΏΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π°Π²Π°Π΅ΠΌΡΡ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Ρ Π°ΠΊΡΠΈΠΉ ΠΏΠΎ ΠΎΡΡΠ°ΡΠ»ΡΠΌ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ.
- Skryf die resultate in stringvorm by die onderwerp neer.
ΠΠ° ΡΠΈΡ. 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(), ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° Π΅Π³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅.
Soos u onthou, is KTable anders deurdat rekords met dieselfde sleutel as opdaterings beskou word. KTable vervang die ou inskrywing met die nuwe een. Aggregasie werk op 'n soortgelyke manier: die jongste rekords met dieselfde sleutel word saamgevoeg. Wanneer 'n inskrywing aankom, word dit by 'n instansie van die FixedSizePriorityQueue-klas gevoeg deur 'n adder te gebruik (die tweede parameter in die oproep na die saamgevoegde metode), maar as 'n ander inskrywing reeds bestaan ββmet dieselfde sleutel, dan word die ou inskrywing verwyder met die aftrekker (die derde parameter in die oproep na die totale metode).
Dit beteken alles dat ons aggregator, FixedSizePriorityQueue, glad nie alle waardes met een sleutel saamvoeg nie, maar 'n rollende som van N hoeveelhede van die mees verhandelde soorte aandele stoor. Elke inkomende inskrywing bevat die totale aantal aandele wat tot dusver verkoop is. KTable sal jou inligting gee oor watter aandele tans die meeste verkoop, deurlopende samevoeging van elke opdatering is nie nodig nie.
Ons het geleer om twee belangrike dinge te doen:
- groepeer waardes in KTable volgens hul gemeenskaplike sleutel;
- Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π°Π΄ ΡΡΠΈΠΌΠΈ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠ²Π΅ΡΡΠΊΠ° ΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
Π£ΠΌΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΌΡΡΠ»Π° Π΄Π°Π½Π½ΡΡ , Π΄Π²ΠΈΠΆΡΡΠΈΡ ΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Kafka Streams, ΠΈ Π²ΡΡΡΠ½Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ½ΠΈ Π½Π΅ΡΡΡ.
Ons het ook van die sleutelbegrippe wat vroeΓ«r in hierdie boek bespreek is, bymekaar gebring. In Hoofstuk 4 het ons die belangrikheid van foutverdraagsame, plaaslike staat in 'n stroomtoepassing bespreek. Die eerste voorbeeld in hierdie hoofstuk het gewys hoekom plaaslike staat so belangrik isβdit gee jou die vermoΓ« om tred te hou met watter inligting jy reeds gesien het. Plaaslike toegang vermy netwerkvertragings, wat die toepassing meer doeltreffend en foutverdraagsaam maak.
Wanneer u enige oprol- of samevoegingsbewerking uitvoer, moet u die naam van die staatswinkel spesifiseer. Die vou- en totale bewerkings gee 'n KTable-instansie terug, en die KTable gebruik 'n staatswinkel om ou resultate met nuwes te vervang. Soos u gesien het, word nie alle opdaterings verder in die pyplyn gestuur nie, en dit is belangrik, aangesien samevoegingsbewerkings ontwerp is om opsommende inligting te verkry. As jy nie die plaaslike staat toepas nie, sal KTable al die resultate van samevoeging en vermindering verder stuur.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠ°ΠΊ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ β ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΎΠΊΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ (windowing operations).
5.3.2. Vensterbedrywighede
Π ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ ΡΠΎ Β«ΡΠΊΠΎΠ»ΡΠ·ΡΡΠΈΠΌΠΈΒ» ΡΠ²Π΅ΡΡΠΊΠΎΠΉ ΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΡ ΡΠ²Π΅ΡΡΠΊΡ ΠΎΠ±ΡΠ΅ΠΌΠ° ΠΏΡΠΎΠ΄Π°ΠΆ Π°ΠΊΡΠΈΠΉ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΡΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π°Π²Π°Π΅ΠΌΡΡ Π½Π° Π±ΠΈΡΠΆΠ΅ Π°ΠΊΡΠΈΠΉ.
Soms is sulke voortdurende samevoeging en konvolusie van resultate nodig. En soms moet u slegs operasies oor 'n gegewe tydperk uitvoer. Byvoorbeeld, om te bereken hoeveel ruiltransaksies in die laaste 10 minute met die aandele van 'n spesifieke maatskappy gemaak is. Of hoeveel gebruikers die afgelope 15 minute op 'n nuwe banieradvertensie geklik het. 'n Toepassing kan sulke bewerkings herhaaldelik uitvoer, maar met resultate wat slegs verband hou met gespesifiseerde tydintervalle (tydvensters).
Tel ruiltransaksies deur koper
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π·Π°ΠΉΠΌΠ΅ΠΌΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΡΡΠ΅ΠΉΠ΄Π΅ΡΠ°ΠΌ β Π»ΠΈΠ±ΠΎ ΠΊΡΡΠΏΠ½ΡΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΠΌ, Π»ΠΈΠ±ΠΎ ΡΠΌΡΡΠ»Π΅Π½ΡΠΌ ΡΠΈΠ½Π°Π½ΡΠΈΡΡΠ°ΠΌ-ΠΎΠ΄ΠΈΠ½ΠΎΡΠΊΠ°ΠΌ.
Daar is twee moontlike redes vir hierdie dop. Een daarvan is die behoefte om te weet wat die markleiers koop/verkoop. As hierdie groot spelers en gesofistikeerde beleggers 'n geleentheid vir hulself sien, maak dit sin om hul strategie te volg. Die tweede rede is die begeerte om enige moontlike tekens van onwettige transaksies met behulp van binne-inligting raak te sien. Om dit te doen, sal jy die korrelasie van groot verkoopspieke met belangrike persvrystellings moet ontleed.
Hierdie opsporing bestaan ββuit die volgende stappe:
- skep 'n draad vir lees uit die voorraadtransaksie-onderwerp;
- Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠ° Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΏΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΏΠΎΠΊΡΠΏΠ°ΡΠ΅Π»Ρ ΠΈ Π±ΠΈΡΠΆΠ΅Π²ΠΎΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π°ΠΊΡΠΈΠΈ. ΠΡΠ·ΠΎΠ² ΠΌΠ΅ΡΠΎΠ΄Π° groupBy Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° KGroupedStream;
- Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ KGroupedStream.windowedBy ΠΏΠΎΡΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ , ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ° ΠΎΠΊΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π»ΠΈΠ±ΠΎ TimeWindowedKStream, Π»ΠΈΠ±ΠΎ SessionWindowedKStream;
- ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΊΠΎΠ½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ Π»ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ;
- Π·Π°ΠΏΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π² ΡΠΎΠΏΠΈΠΊ ΠΈΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄ ΠΈΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
Π’ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΡΠ°, Π½ΠΎ Π½Π°Π³Π»ΡΠ΄Π½Π°Ρ Π΅Π΅ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° Π½Π΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ. ΠΠ·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΡΠΈΡ. 5.11.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΊΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
Tipes vensters
Daar is drie tipes vensters in Kafka Streams:
- sessie;
- "tuimel" (tuimel);
- gly / "spring" (gly / huppel).
ΠΠ°ΠΊΠΎΠ΅ Π²ΡΠ±ΡΠ°ΡΡ β Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ Π±ΠΈΠ·Π½Π΅Ρ-ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. Β«ΠΡΠ²ΡΡΠΊΠ°ΡΡΠΈΠ΅ΡΡΒ» ΠΈ Β«ΠΏΡΡΠ³Π°ΡΡΠΈΠ΅Β» ΠΎΠΊΠ½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΡ ΡΠ²ΡΠ·Π°Π½Ρ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ β Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅Π°Π½ΡΠ° (-ΠΎΠ²) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΌ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΠ»Π°Π²Π½ΠΎΠ΅ β Π½Π΅ Π·Π°Π±ΡΠ²Π°ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΠΈΠΏΡ ΠΎΠΊΠΎΠ½ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° ΠΌΠ΅ΡΠΊΠ°Ρ Π΄Π°ΡΡ/Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π° Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π½Π°ΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΠΈΠ· ΡΠΈΠΏΠΎΠ² ΠΎΠΊΠΎΠ½. ΠΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² ΠΎΠΊΠΎΠ½ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ, ΠΊΡΠΎΠΌΠ΅ ΡΠΈΠΏΠ° ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
Sessie vensters
Π‘Π΅Π°Π½ΡΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π° ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ² ΠΎΠΊΠΎΠ½. ΠΠ½ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ Π½Π΅ ΡΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (ΠΈΠ»ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ ΡΠΎΠΉ ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ). Π‘Π΅Π°Π½ΡΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π° ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄Π°ΠΌΠΈ Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
Π ΠΈΡΡΠ½ΠΎΠΊ 5.12 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½. ΠΠ΅Π½ΡΡΠΈΠΉ ΡΠ΅Π°Π½Ρ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΈΠ²Π°ΡΡΡΡ Ρ ΡΠ΅Π°Π½ΡΠΎΠΌ ΡΠ»Π΅Π²Π° ΠΎΡ Π½Π΅Π³ΠΎ. Π ΡΠ΅Π°Π½Ρ ΡΠΏΡΠ°Π²Π° Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π° Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΎΠΌ Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. Π‘Π΅Π°Π½ΡΠΎΠ²ΡΠ΅ ΠΎΠΊΠ½Π° ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΌΠ΅ΡΠΊΠΈ Π΄Π°ΡΡ/Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΠ· Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΡΠ΅Π°Π½ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ Π·Π°ΠΏΠΈΡΡ.
Gebruik sessievensters om ruiltransaksies op te spoor
ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΡ . Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 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 ΡΠ΅ΠΊΡΠ½Π΄ ΠΎΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΈΠ»ΠΈ Π½Π°ΡΠ°Π»Π° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ΅Π°Π½ΡΠ° Π² ΡΠ΅ΠΊΡΡΠΈΠΉ (Π°ΠΊΡΠΈΠ²Π½ΡΠΉ) ΡΠ΅Π°Π½Ρ.
Vervolgens spesifiseer ons watter samevoegingsbewerking om in die sessievenster uit te voer - tel in hierdie geval. As die inkomende skrywe verder gaan as die ledige interval (aan weerskante van die datum/tydstempel), dan skep die toepassing 'n nuwe sessie. 'n Volhardingsinterval beteken om 'n sessie vir 'n sekere tyd lewendig te hou en laat data toe wat verder gaan as die sessie se ledige tydperk, maar steeds aangeheg kan word. Daarbenewens stem die begin en einde van die nuwe sessie as gevolg van die samesmelting ooreen met die vroegste en jongste datum-/tydstempels.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄Π° 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.
Hier is 'n paar belangrike dinge om in gedagte te hou uit hierdie afdeling:
- ΡΠ΅Π°Π½ΡΡ β Π½Π΅ ΠΎΠΊΠ½Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅Π°Π½ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ;
- ΠΌΠ΅ΡΠΊΠΈ Π΄Π°ΡΡ/Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π² Π΄Π°Π½Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΡΠ΅Π°Π½Ρ ΠΈΠ»ΠΈ Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
Vervolgens sal ons die volgende tipe venster bespreek - "tuimel" vensters.
"Tuimelende" vensters
Β«ΠΡΠ²ΡΡΠΊΠ°ΡΡΠΈΠ΅ΡΡΒ» (tumbling) ΠΎΠΊΠ½Π° Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΡ, ΠΏΠΎΠΏΠ°Π΄Π°ΡΡΠΈΠ΅ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π±Π΅, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π°Ρ Π²Π°ΡΡΠ²Π°ΡΡ Π²ΡΠ΅ Π±ΠΈΡΠΆΠ΅Π²ΡΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 20 ΡΠ΅ΠΊΡΠ½Π΄, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ Π²ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ Π·Π° ΡΡΠΎΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ 20-ΡΠ΅ΠΊΡΠ½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΎΠΊΠ½ΠΎ Β«ΠΊΡΠ²ΡΡΠΊΠ°Π΅ΡΡΡΒ» ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π½Π° Π½ΠΎΠ²ΡΠΉ 20-ΡΠ΅ΠΊΡΠ½Π΄Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΡ. Π ΠΈΡΡΠ½ΠΎΠΊ 5.14 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ.
ΠΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΈΠ΄Π΅ΡΡ, Π²ΡΠ΅ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠΈΠ΅ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 20 ΡΠ΅ΠΊΡΠ½Π΄ ΡΠΎΠ±ΡΡΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΠΎΠΊΠ½ΠΎ. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.6 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Β«ΠΊΡΠ²ΡΡΠΊΠ°ΡΡΠΈΡ ΡΡΒ» ΠΎΠΊΠΎΠ½ Π΄Π»Ρ Π·Π°Ρ Π²Π°ΡΠ° ΠΊΠ°ΠΆΠ΄ΡΠ΅ 20 ΡΠ΅ΠΊΡΠ½Π΄ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° TimeWindows.of ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Β«ΠΊΡΠ²ΡΡΠΊΠ°ΡΡΠ΅Π΅ΡΡΒ» ΠΎΠΊΠ½ΠΎ. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π΅Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° until(), Π²ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠ°Π²Π½ΡΠΉ 24 ΡΠ°ΡΠ°ΠΌ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΏΠΎΡΠ° ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌΡ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΎΠΊΠΎΠ½ β Β«ΠΏΡΡΠ³Π°ΡΡΠΈΠΌΒ» (hopping) ΠΎΠΊΠ½Π°ΠΌ.
Glyende ("springende") vensters
Π‘ΠΊΠΎΠ»ΡΠ·ΡΡΠΈΠ΅/Β«ΠΏΡΡΠ³Π°ΡΡΠΈΠ΅Β» (sliding/hopping) ΠΎΠΊΠ½Π° ΠΏΠΎΡ ΠΎΠΆΠΈ Π½Π° Β«ΠΊΡΠ²ΡΡΠΊΠ°ΡΡΠΈΠ΅ΡΡΒ», Π½ΠΎ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ. Π‘ΠΊΠΎΠ»ΡΠ·ΡΡΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π΅ ΠΆΠ΄ΡΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅Π΄Π°Π²Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ. ΠΠ½ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΠΌΠ΅Π½ΡΡΠ΅Π³ΠΎ ΡΠ΅ΠΌ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΊΠ½Π°.
Om die verskille tussen "tuimel" en "spring" vensters te illustreer, kom ons gaan terug na die voorbeeld van die tel van voorraadtransaksies. Ons doelwit is steeds om die aantal transaksies te tel, maar ons wil nie heeltyd wag voordat ons die teller opdateer nie. In plaas daarvan sal ons die teller met korter tussenposes opdateer. Ons sal byvoorbeeld steeds die aantal transaksies elke 20 sekondes tel, maar die teller elke 5 sekondes opdateer, soos in Fig. 5.15. In hierdie geval het ons drie resultaatvensters met oorvleuelende data.
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 5.7 ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΊΠΎΠ»ΡΠ·ΡΡΠΈΡ
ΠΎΠΊΠΎΠ½ (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).
Β«ΠΡΠ²ΡΡΠΊΠ°ΡΡΠ΅Π΅ΡΡΒ» ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Π² Β«ΠΏΡΡΠ³Π°ΡΡΠ΅Π΅Β» Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° advanceBy(). Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°Π²Π΅Π½ 15 ΠΌΠΈΠ½ΡΡΠ°ΠΌ.
ΠΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΠΊΠ°ΠΊ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π°Π³ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ, ΡΡΠΎΠ±Ρ Π²Ρ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΈ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ Π²Π΅ΡΠΈ:
- ΡΠ°Π·ΠΌΠ΅Ρ ΡΠ΅Π°Π½ΡΠΎΠ²ΡΡ ΠΎΠΊΠΎΠ½ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ;
- "Tumble" vensters gee 'n idee van gebeure binne 'n gegewe tydperk;
- Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Β«ΠΏΡΡΠ³Π°ΡΡΠΈΡ Β» ΠΎΠΊΠΎΠ½ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π°, Π½ΠΎ ΠΎΠ½ΠΈ ΡΠ°ΡΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π²ΠΎ Π²ΡΠ΅Ρ ΠΎΠΊΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΡΠ΅ΠΊΠ°ΡΡΠΈΠ΅ΡΡ Π·Π°ΠΏΠΈΡΠΈ.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ KTable ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² KStream Π΄Π»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ.
5.3.3. Verbind KStream en KTable-voorwerpe
Π Π³Π»Π°Π²Π΅ 4 ΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π°Π»ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² KStream. Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ Π½Π°ΡΡΠΈΡΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡ KTable ΠΈ KStream. ΠΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½Π΅. KStream β ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π° KTable β ΠΏΠΎΡΠΎΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π·Π°ΠΏΠΈΡΠ΅ΠΉ, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΊ ΠΏΠΎΡΠΎΠΊΡ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈΠ· KTable.
ΠΠΎΠ·ΡΠΌΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠΌ ΠΈΡ Ρ Π±ΠΈΡΠΆΠ΅Π²ΡΠΌΠΈ Π½ΠΎΠ²ΠΎΡΡΡΠΌΠΈ ΠΏΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΡΡΠ°ΡΠ»ΡΠΌ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ. ΠΠΎΡ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠΎΠ³ΠΎ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎΡΡ ΠΊΠΎΠ΄Π°.
- ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ KTable Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ Π² KStream Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΊΠ»ΡΡΠ° Π½Π° ΠΊΠ»ΡΡ, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΠΎΡΡΠ°ΡΠ»Ρ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π°ΠΊΡΠΈΠΉ.
- Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ KTable, ΡΠΈΡΠ°ΡΡΠΈΠΉ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΎΠΏΠΈΠΊΠ° Ρ Π±ΠΈΡΠΆΠ΅Π²ΡΠΌΠΈ Π½ΠΎΠ²ΠΎΡΡΡΠΌΠΈ. ΠΡΠΎΡ Π½ΠΎΠ²ΡΠΉ KTable Π±ΡΠ΄Π΅Ρ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎ ΠΎΡΡΠ°ΡΠ»ΡΠΌ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ.
- Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΉ ΠΏΠΎ ΠΎΡΡΠ°ΡΠ»ΡΠΌ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ.
Kom ons kyk nou hoe om hierdie aksieplan te implementeer.
Skakel KTable om na KStream
Om KTable na KStream om te skakel, moet jy die volgende doen.
- Roep die KTable.toStream() metode.
- Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° KStream.map Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ»ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΎΡΡΠ°ΡΠ»ΠΈ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Windowed ΠΎΠ±ΡΠ΅ΠΊΡ TransactionSummary.
ΠΡ ΡΠ²ΡΠΆΠ΅ΠΌ ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ΠΏΠΎΡΠΊΠΎΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ (ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.8).
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ KStream.map, ΡΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° KStream ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π² ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ.
ΠΡ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, Π΄Π°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ KTable Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π±ΠΈΡΠΆΠ΅Π²ΡΡ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ.
Skep 'n KTable vir voorraadnuus
Π ΡΡΠ°ΡΡΡΡ, Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° KTable Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° (ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.9).
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Serde ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΡΠΎΠΊΠΎΠ²ΡΠ΅ Serde. Π’Π°ΠΊΠΆΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ EARLIEST ΡΠ°Π±Π»ΠΈΡΠ° Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π°ΠΏΠΈΡΡΠΌΠΈ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅.
Nou kan ons aanbeweeg na die laaste stap β die verbinding.
Koppel nuusopdaterings met transaksietellingdata
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. ΠΡ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π»Π΅Π²ΡΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡΠ»ΡΡΠ°ΠΉ, Π΅ΡΠ»ΠΈ ΠΏΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΎΡΡΠ°ΡΠ»ΠΈ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΡΡΠΈ Π½Π΅Ρ Π±ΠΈΡΠΆΠ΅Π²ΡΡ Π½ΠΎΠ²ΠΎΡΡΠ΅ΠΉ (Π½ΡΠΆΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠ°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Π»ΠΈΡΡΠΈΠ½Π³ 5.10).
Hierdie leftJoin-operateur is redelik eenvoudig. Anders as die koppelings in Hoofstuk 4, word die JoinWindow-metode nie gebruik nie, want wanneer 'n KStream-KTable-koppeling gemaak word, is daar net een inskrywing in die KTable vir elke sleutel. So 'n verband is nie in tyd beperk nie: die inskrywing bestaan ββΓ³f in die KTable Γ³f dit bestaan ββnie. Sleutel wegneemetes: Deur KTable-voorwerpe te gebruik, kan jy 'n KStream verryk met minder gereeld bygewerkte verwysingsdata.
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΠΎΠ³Π°ΡΠ΅Π½ΠΈΡ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΈΠ· KStream.
5.3.4. GlobalKTable voorwerpe
Soos u verstaan, is daar 'n behoefte om die gebeurtenisstrome te verryk of konteks daarby te voeg. In Hoofstuk 4 het jy die verbinding van twee KStream-voorwerpe gesien, en in die vorige afdeling het jy die verbinding van KStream en KTable gesien. In al hierdie gevalle is dit nodig om die datastroom te herpartisioneer wanneer sleutels na 'n nuwe tipe of waarde gekarteer word. Soms word herpartisionering eksplisiet gedoen, en soms doen Kafka Streams dit outomaties. Die herpartisionering is nodig omdat die sleutels verander het en die rekords in die nuwe partisies moet beland of die koppeling sal nie moontlik wees nie (dit is bespreek in Hoofstuk 4, "Data Herpartisionering" in Afdeling 4.2.4).
Herpartisionering het 'n prys
Herpartisionering kom teen 'n koste - bykomende hulpbronkoste vir die skep van intermediΓͺre onderwerpe, die stoor van duplikaatdata in 'n ander onderwerp; dit beteken ook verhoogde latensie as gevolg van skryf na en lees van daardie onderwerp. Ook, as jy op meer as een aspek of dimensie wil aansluit, moet jy kettingverbinding maak, rekords met nuwe sleutels karteer en die herverdelingsproses weer laat loop.
Koppel aan kleiner datastelle
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΠ΅ΠΌ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ , Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π²Π΅Π»ΠΈΠΊ, ΡΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠ»Π½ΡΠ΅ ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡΠ·Π»ΠΎΠ². ΠΠ»Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΉ Π² Kafka Streams ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΠΊΠ»Π°ΡΡ GlobalKTable.
GlobalKTable-gevalle is uniek omdat die toepassing alle data na elk van die nodusse repliseer. En aangesien elkeen van die nodusse al die data het, is dit nie nodig om die gebeurtenisstroom deur die verwysingsdatasleutel te partisieer sodat dit vir alle partisies beskikbaar is nie. U kan ook sleutellose verbindings uitvoer deur GlobalKTable-voorwerpe te gebruik. Kom ons gaan terug na een van die vorige voorbeelde om hierdie moontlikheid te demonstreer.
Koppel KStream-voorwerpe aan GlobalKTable-voorwerpe
Π ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅ 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}
Die essensie het nie verander nie, maar hierdie resultate lyk meer verstaanbaar.
ΠΡΠ»ΠΈ ΡΡΠΈΡΠ°ΡΡ Π³Π»Π°Π²Ρ 4, Π²Ρ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠΎΠ² ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ. ΠΠ½ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π² ΡΠ°Π±Π». 5.2. ΠΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π»Ρ Π²Π΅ΡΡΠΈΠΈ 1.0.0 Kafka Streams; Π² Π±ΡΠ΄ΡΡΠΈΡ Π²ΡΠΏΡΡΠΊΠ°Ρ , Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΠ΅ΡΡΡ.
Ten slotte, laat ek jou herinner aan die belangrikste ding: jy kan gebeurtenisstrome (KStream) en strome (KTable) bywerk deur die plaaslike staat te koppel. Daarbenewens, as die grootte van die verwysingsdata nie te groot is nie, kan jy die GlobalKTable-objek gebruik. GlobalKTable repliseer alle partisies na elk van die nodusse van die Kafka Streams-toepassing, om sodoende te verseker dat alle data beskikbaar is, ongeag met watter partisie die sleutel ooreenstem.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Kafka Streams, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π±Π΅Π· ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠΎΠΏΠΈΠΊΠ° Kafka.
5.3.5. Versoekbare staat
ΠΡ ΡΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΡΡΠ°ΡΡΠΈΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ (Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ) ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Π»ΠΈ ΠΈΡ Π² ΡΠΎΠΏΠΈΠΊ (Π΄Π»Ρ ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠΎΠΌΡΡΠ»Π΅Π½Π½ΠΎΠΉ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ). ΠΡΠΈ Π·Π°ΠΏΠΈΡΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π² ΡΠΎΠΏΠΈΠΊ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Kafka Π΄Π»Ρ ΠΈΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ°.
Die lees van data uit hierdie onderwerpe kan as 'n soort gematerialiseerde sienings beskou word. Vir ons take kan ons die definisie van 'n gematerialiseerde siening van Wikipedia gebruik: "... 'n fisiese databasisobjek wat die resultate van 'n navraag bevat. Dit kan byvoorbeeld 'n plaaslike kopie van afgeleΓ« data wees, of 'n subset van die rye en/of kolomme van 'n tabel of aansluitingsresultaat, of 'n spiltabel wat deur samevoeging verkry isβ (https://en.wikipedia.org/wiki) /Materialized_view).
Kafka Streams ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ (interactive queries) ΠΊ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΡΡΠΎ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ ΡΡΠΈΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ. ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π·Π°ΠΏΡΠΎΡ ΠΊ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Π½ΠΎΡΠΈΡ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Β«ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡΒ». ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π΅ Π±ΠΎΡΡΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ½Π° Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΠΏΠ°Π½Π΅Π»ΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ Kafka. ΠΠΎΠ²ΡΡΠ°Π΅Ρ ΠΎΠ½Π° ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅:
- as gevolg van die ligging van die data, kan hulle vinnig verkry word;
- ΠΈΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π½Π΅ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅Π΅ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅.
Die belangrikste ding wat ek wil hΓͺ jy moet onthou, is dat jy die staat direk vanaf die aansoek kan navraag doen. Die moontlikhede wat dit vir jou bied, kan nie oorskat word nie. In plaas daarvan om data van Kafka af te verbruik en rekords in die databasis vir die toepassing te stoor, kan u die staatwinkels navraag doen met dieselfde resultaat. Om direk na staatwinkels te vra, beteken minder kode (geen verbruiker) en minder sagteware (geen behoefte aan 'n databasistabel om resultate te stoor nie).
Ons het baie inligting in hierdie hoofstuk behandel, so ons sal ons bespreking van interaktiewe navrae oor staatswinkels vir 'n oomblik stop. Maar moenie bekommerd wees nie: in Hoofstuk 9 sal ons 'n eenvoudige dashboard-toepassing met interaktiewe navrae skep. Dit sal sommige van die voorbeelde in hierdie en vorige hoofstukke gebruik om interaktiewe navrae te demonstreer en hoe om dit by Kafka Streams-toepassings te voeg.
Opsomming
- ΠΠ±ΡΠ΅ΠΊΡΡ KStream ΠΎΠ»ΠΈΡΠ΅ΡΠ²ΠΎΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ, ΡΡΠ°Π²Π½ΠΈΠΌΡΠ΅ ΡΠΎ Π²ΡΡΠ°Π²ΠΊΠ°ΠΌΠΈ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ±ΡΠ΅ΠΊΡΡ KTable ΠΎΠ»ΠΈΡΠ΅ΡΠ²ΠΎΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, ΠΎΠ½ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΡΡ ΠΎΠΆΠΈ Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . Π Π°Π·ΠΌΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° KTable Π½Π΅ ΡΠ°ΡΡΠ΅Ρ, ΡΡΠ°ΡΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π½ΠΎΠ²ΡΠΌΠΈ.
- KTable-objekte word benodig vir samevoegingsbewerkings.
- Venster laat jou toe om saamgestelde data in tydbakke af te breek.
- ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ GlobalKTable ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ Π² Π»ΡΠ±ΠΎΠΉ ΡΠΎΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ΅ΠΊΡΠΈΡΠΌ.
- Verbindings tussen KStream, KTable en GlobalKTable voorwerpe is moontlik.
Tot dusver het ons daarop gefokus om Kafka Streams-toepassings te bou deur die hoΓ«vlak DSL KStream te gebruik. Alhoewel die hoΓ«vlakbenadering jou toelaat om netjiese en bondige programme te skep, verteenwoordig die gebruik daarvan 'n sekere kompromie. Werk met DSL KStream beteken om kode meer bondig te maak ten koste van minder beheer. In die volgende hoofstuk kyk ons ββna die lae-vlak hanteerder node API en probeer ander afwegings. Programme sal langer word as wat dit tot dusver was, maar ons sal byna enige hanteerdernodus kan skep wat ons nodig mag hΓͺ.
β Meer besonderhede oor die boek kan gevind word by
β Vir Khabrozhiteli, 'n 25% afslag op die koepon - Kafka-strome
β ΠΠΎ ΡΠ°ΠΊΡΡ ΠΎΠΏΠ»Π°ΡΡ Π±ΡΠΌΠ°ΠΆΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° e-mail Π²ΡΡΡΠ»Π°Π΅ΡΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½Π°Ρ ΠΊΠ½ΠΈΠ³Π°.
Bron: will.com