áá±á¬ááºáá¯ááºáá»ááºá á .áá á á¯á ááºážááŒááºážááŸáá·áº áááºážááá¯ážáááºááŒááºážáá¯ááºáááºážáá»á¬áž
á€ááá¹áááœááºá Kafka Stream á á¡áá¬ážá¡áá¬á¡ááŸááá¯á¶áž á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáá±á·áá¬ááẠáááºáááºáá¯ááºáá±á¬ááºáá«áááºá ááá¯á¡áá»áááºá¡áá áá»áœááºá¯ááºááá¯á·ááẠKafka Stream á á¡á±á¬ááºáá±á¬áºááŒáá« ááá¹ááá»á¬ážááᯠááœáŸááºážááŒá¯á¶áá¬ážáá«áááºá
- processing topology áááºáá®ážááŒááºážá
- streaming application áá»á¬ážááœáẠstate ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
- áá±áá¬á á®ážááŒá±á¬ááºážáá»áááºáááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááŒááºážá
- ááœá²á á®ážááŒá±á¬ááºážáá»á¬áž (KStream) ááŸáá·áº á¡ááºááááºá á®ážááŒá±á¬ááºážáá»á¬áž (KTable) á¡ááŒá¬áž ááœá¬ááŒá¬ážáá»ááºáá»á¬ážá
á¡á±á¬ááºáá«ááá°áá¬áá»á¬ážááœáẠáá»áœááºá¯ááºááá¯á·ááẠá€á¡áá¬á¡á¬ážáá¯á¶ážááᯠáá±á«ááºážá ááºážáá«áááºá streaming applications áá»á¬ážááá±á¬ááºáááºáá±á¬ááºážááá·áºá¡ááºá¹áá«áááºááŒá áºááá·áº windowing á¡ááŒá±á¬ááºážááá¯áááºážáááºáá±á·áá¬ááááá·áºáááºá áá»áœááºá¯ááºááá¯á·á ááááá¯á¶áž á¥ááá¬ááẠááá¯ážááŸááºážáá±á¬ á á¯á ááºážááŸá¯ááŒá áºáááá·áºáááºá
á .á.áá áá¯ááºáááºážááá¹áá¡ááá¯áẠá áá±á¬á·ááŸááºáá¬áá±á¬ááºážáá»ááŸá¯ áá±á«ááºážá ááºááŒááºážá
áá±áᬠstreaming ááŒáá·áºá¡áá¯ááºáá¯ááºáá±á¬á¡áá« á á¯á ááºážááŒááºážááŸáá·áº á¡á¯ááºá á¯ááœá²á·ááŒááºážááá¯á·ááẠáááŸááááŒá áºááá¯á¡ááºáá±á¬áááááá¬áá»á¬ážááŒá áºáááºá áááºážááá¯á·áááŸááá±á¬ ááŸááºáááºážáá»á¬ážááᯠáá áºáŠážáá»ááºáž á á áºáá±ážááŒááºážááŸá¬ áááŒá¬áá ááá¯á¶áá±á¬ááºáá«á áá±áá¬áá»á¬ážá០áá±á¬ááºáááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá¯ááºáá°áááºá áááºážááá¯á·ááᯠá¡á¯ááºá á¯ááœá²á·ááŒá®áž áá±á«ááºážá ááºááẠááá¯á¡ááºáááºá
á€á¥ááá¬ááœááºá áá¯ááºáááºážá¡áá»á¬ážá¡ááŒá¬ážááŸá áá¯áá¹ááá®áá»á¬ážá á áá±á¬á·ááŸááºáá¬áá»á¬ážá á¡áá±á¬ááºážááá¬áááᯠááŒá±áá¬áá¶ááẠááá¯á¡ááºáá±á¬ áá áºáá±á·áá¯ááºáááºá áááºá á¯á¶ááᯠáááºáááºáááºáááºááŒá áºáááºá á¡áá°ážáááŒáá·áºá áá¯ááºáááºážáá áºáá¯á á®ááœáẠááŸááºáá¬á¡áá»á¬ážáá¯á¶ážáá±á¬ááºážáá»ááá·áº áá¯áá¹ááá®áá«ážáá¯ááᯠáááºá áááºáááºá á¬ážáá«áááºá
ááá¯ááá¯á·áá±á¬ á á¯á ááºážááŸá¯ááẠáá±áá¬ááᯠá¡ááá¯ááŸááá±á¬ áá¯á¶á á¶ááá¯á· áá¬áá¬ááŒááºááá¯ááẠá¡á±á¬ááºáá« á¡ááá·áºáá»á¬ážá áœá¬ ááá¯á¡ááºáááá·áºááẠ(áá±áá°áá» á¡áá¯á¶ážá¡ááŸá¯ááºážáá»á¬ážááŒáá·áº ááŒá±á¬ááá¯ááŒááºáž)á
- áá¯ááºááŒááºážá áá±á¬á·ááŸááºáá¬áá±á¬ááºážáááºáá±ážá¡áá»ááºá¡áááºááᯠáá¯ááºááŒááºááá·áº áá±á«ááºážá ááºá¡ááŒá±áá¶áááºážááŒá áºááᯠáááºáá®ážáá«á StockTransaction á¡áá»áá¯ážá¡á á¬áž á¡áá¬ááá¹áá¯áá áºáá¯ááᯠShareVolume á¡áá»áá¯ážá¡á á¬ážá á¡áá¬áá áºáá¯ááá¯á· ááŒá±áá¯á¶ááœá²ááá«áááºá á¡áááá¡áá»ááºááŸá¬ StockTransaction á¡áá¬ááá¹áá¯ááœáẠá¡áá±á¬ááºážáááºáá¬áá±áá¬áá«ááŸááááºá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á·áá±á¬ááºážáá»áá±ááá·áº ááŸááºáá¬á¡áá±á¡ááœááºááŸáá·áºáááºáááºááá·áº á¡áá»ááºá¡áááºáᬠááá¯á¡ááºáá«áááºá
- á áá±á¬á·áááºá¹áá±áááŒáá·áº ShareVolume áá±áá¬á¡á¯ááºá á¯á áááºá¹áá±áááŒáá·áº á¡á¯ááºá á¯ááœá²á·ááŒá®ážáááºááŸáá·áº áááºááẠá€áá±áá¬ááᯠá áá±á¬á·á¡áá±á¬ááºážááá¬áá á á¯á á¯áá±á«ááºážááœá²áá»á¬ážá¡ááŒá áºááá¯á· ááŒáá¯áá»ááá¯ááºáá«áááºá KStream.groupBy method ááẠKGroupedStream á¡áá»áá¯ážá¡á á¬áž á á¶ááá°áá¬áá áºáá¯ááᯠááŒááºáá±ážááŒá±á¬ááºáž ááŸááºáá¬ážááá¯ááºáá«áááºá KGroupedStream.reduce áááºážáááºážááᯠáááºáá¶áá±á«áºááá¯ááŒááºážááŒáá·áº KTable instance ááᯠáááºáááá¯ááºááẠá
KGroupedStream á¡ááºáá¬áá±á·á áºááá¯áá¬áá¬áá²
KStream.groupBy ááŸáá·áº KStream.groupByKey áááºážáááºážáá»á¬ážááẠKGroupedStream á á¥ááá¬ááᯠááŒááºáá±ážáááºá KGroupedStream ááẠáá±á¬á·áá»á¬ážááŒáá·áº á¡á¯ááºá á¯ááœá²á·ááŒá®ážáá±á¬áẠá¡ááŒá áºá¡áá»ááºáá»á¬ážá á¡áááºá¡áááºááá¯ááºá á¬ážááŒá¯ááŸá¯áá áºáá¯ááŒá áºáááºá áááºážááŸáá·áº ááá¯ááºááá¯ááºáá¯ááºáá±á¬ááºááẠáá¯á¶ážá ááááºááœááºáá«á áááºážá¡á á¬ážá KGroupedStream ááᯠKTable ááœáẠá¡ááŒá²ááŒá áºáá±á«áºá á±ááá·áº áá±á«ááºážá ááºáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠá¡áá¯á¶ážááŒá¯áá«áááºá áá±á«ááºážá ááºážááŒááºážáá¯ááºáááºážáá»á¬ážáááááºááẠKTable áá áºáá¯ááŒá áºááŒá®áž áááºážááá¯á·ááẠááá¯ááºáá¶áá±á¬áºá ááá¯ážááá¯á¡áá¯á¶ážááŒá¯áá±á¬ááŒá±á¬áá·áºá ááááºá¡áá±ááŒáá·áº á¡ááºááááºá¡á¬ážáá¯á¶ážááᯠááá¯ááºááá¯ááºážá¡á±á¬ááºááá¯á· áááºáá¶áá±ážááá¯á·ááŒááºážáá»áá¯ážáááŒá áºááá¯ááºáá«á
KTable.groupBy method ááẠá¡áá¬ážáá° KGroupedTable ááᯠááŒááºáá±ážááẠ- áá±á¬á·ááŒáá·áº ááŒááºáááºá á¯ááœá²á·áá¬ážáá±á¬ á¡ááºááááºá á®ážááŒá±á¬ááºážá á¡áááºá¡áááºááá¯ááºá á¬ážááŒá¯ááŸá¯ááŒá áºáááºá
áááá±á¬áẠá¡áá¬ážáá°ááŒá®áž áá¯á¶áá±ážááᯠááŒáá·áºááŒáá¡á±á¬ááºá 5.9á áááºážááẠáá»áœááºá¯ááºááá¯á·á¡á±á¬ááºááŒááºáá¬ážáááºááᯠááŒááááºá ဠtopology ááẠááá·áºá¡ááœáẠá¡ááœááºáááºážááŸá®ážááŒá®ážáá¬ážááŒá áºááá·áºáááºá
ááᯠဠtopology á¡ááœáẠáá¯ááºááᯠááŒáá·áºááŒáá«á
áá¯á· (áááºážááᯠááá¯áẠsrc/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Listing 5.2) ááœáẠááœá±á·ááá¯ááºáá«áááºá
áá±ážáá¬ážáá±á¬áá¯ááºááᯠáááºážá á¡ááá¯áá±á¬ááºááŸáá·áº á
á¬ááŒá±á¬ááºážáá»á¬ážá
áœá¬ááœáẠáá¯ááºáá±á¬ááºááá·áº ááá¬áááŒá®ážáá¬ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŒáá·áº ááœá²ááŒá¬ážáá¬ážáááºá builder.stream áááºážáááºážá ááááá±á¬ááºááœáẠá¡áá
áºáá
áºáá¯áá¯ááᯠáááºáááááŒá¯ááááá¯ááºáááº- enum á¡áá»áá¯ážá¡á
á¬áž AutoOffsetReset.EARLIEST (áá±á¬ááºáá¯á¶ážáá±á«áºáá
áºáá¯áááºáž ááŸááááº)á Consumed.withOffsetResetPolicy áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯á áááºááŸááºáá¬ážáá±á¬ áááºááá¯ážáá
áºáá¯á KStream ááá¯á·ááá¯áẠKTable áá
áºáá¯á
á®á¡ááœáẠá¡á±á¬á·ááºáááºááŒááºáááºáááºááŸááºááŸá¯áá»á°áá¬ááᯠáááºááŸááºááẠá€á
á¬áááºážáá±á¬ááºáá°ááŸá¯á¡áá»áá¯ážá¡á
á¬ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž ááœá²á·á
ááºážááŸá¯á
áá
áºá០á¡á±á¬á·ááºáááºááŒááºáááºáááºááŸááºááŒááºážááœá±ážáá»ááºááŸá¯ááẠáŠážá
á¬ážáá±ážáá¯ááºáá±á¬ááºááá¯ááºáááºá
GroupByKey ááŸáá·áº GroupBy
KStream á¡ááºáá¬áá±á·á áºááœáẠááŸááºáááºážáá»á¬ážááᯠá¡á¯ááºá á¯ááœá²á·ááẠáááºážáááºážááŸá áºáᯠááŸááááº- GroupByKey ááŸáá·áº GroupByá ááŸá áºáá¯áá¯á¶ážááẠKGroupedTable ááᯠááŒááºáá±ážáááºá ááá¯á·ááŒá±á¬áá·áº áááºážááá¯á·ááŒá¬ážá ááœá¬ááŒá¬ážáá»ááºááŸá¬ á¡áááºá¡áá¬ááŸáá·áº áááºááá·áºá¡áá»áááºááᯠá¡áá¯á¶ážááŒá¯ááááºááᯠáááºáááá»ááºáá±áá±áááá·áºáááºá
KStream ááŸá áá±á¬á·áá»á¬ážááẠááá¬ááá¯ááºááá·áºá¡áá« GroupByKey áááºážáááºážááᯠá¡áá¯á¶ážááŒá¯áááºá á¡áá±ážá¡ááŒá®ážáá¯á¶ážááŸá¬á "ááŒááºáááºááœá²áá±ááẠááá¯á¡ááºáááº" á¡áá¶ááᯠáááºáá±á¬á¡áá«á០ááááºááŸááºáá¬ážáá±á
GroupBy method ááẠáááºááẠá¡á¯ááºá á¯ááœá²á·ááŒááºážáá±á¬á·áá»á¬ážááᯠááŒá±á¬ááºážáá¬ážáááºáᯠáá°ááááºá ááá¯á·ááŒá±á¬áá·áº ááŒááºáááºááœá²ááŒááºážá¡áá¶ááᯠá¡ááŸááºáᯠáááºááŸááºáá¬ážáááºá GroupBy method ááŒá®ážáá±á¬áẠáá»áááºáááºááŸá¯áá»á¬ážá á á¯á ááºážááŸá¯áá»á¬ážá á áááºááá¯á·ááᯠáá¯ááºáá±á¬ááºááŒááºážááŒáá·áº á¡ááá¯á¡áá»á±á¬áẠááŒááºáááºááœá²áá±ááŒááºážááᯠááŒá áºáá±á«áºá á±áá«áááºá
á¡ááŸá áºáá»á¯ááº- ááŒá áºááá¯ááºááá·áºá¡áá«ááá¯ááºážá GroupBy ááẠGroupByKey ááá¯áá¯á¶ážááá·áºáááºá
mapValues ââââáá²á· groupBymethod ââááœá±áá¬áá¯ááºáááºááá¯áᬠááŸááºážáá«áááºá áá«ááŒá±á¬áá·áº sum() method (src/main/java/bbejeck/model/ShareVolume.java) (Listing 5.3) ááá¯ááŒáá·áºáá¡á±á¬ááºá
ShareVolume.sum áááºážáááºážááẠá
áá±á¬á·á¡áá±á¬ááºážááá¬áá á
á¯á
á¯áá±á«ááºážáááºáááºáá±ááá·áºááá¬áááᯠááŒááºáá±ážáááºá ááœááºáá»ááºááŸá¯ááœááºážáááºáá
áºáá¯áá¯á¶ážáááááºááẠKTable á¡áá¬ááá¹áá¯áá
áºáá¯ááŒá
áºáááºá . ááᯠKTable á á¡áááºážááá¹áááᯠáááºáá¬ážáááºáá«ááŒá®á ShareVolume á¡áá¬ááá¹áá¯áá»á¬áž áá±á¬ááºááŸááá¬áá±á¬á¡áá«á áááºááá¯ááºáᬠKTable á¡áá¬ááá¹áá¯ááẠáá±á¬ááºáá¯á¶áž áááºááŸá á¡ááºááááºááᯠááááºážáááºážáá¬ážáááºá á¡ááºááááºá¡á¬ážáá¯á¶ážááᯠáááẠshareVolumeKTable ááœáẠáááºáááºáá±ááŒá±á¬ááºáž ááŸááºáá¬ážáá¬ážááẠá¡áá±ážááŒá®ážáá±á¬áºáááºáž á¡á¬ážáá¯á¶ážááᯠáááºáá¶áá±ážááá¯á·áááºááá¯ááºáá«á
ááá¯á·áá±á¬áẠáá¯ááºáááºážáá áºáá¯á á®ááœáẠá¡á á¯ááŸááºáá¬á¡áá»á¬ážáá¯á¶ážáá±á¬ááºážáááºááá·áº áá¯áá¹ááá®áá«ážáá¯ááá¯á·áá±á¬ááºááŸáááẠ(á¡á á¯ááŸááºáá¬á¡áá±á¡ááœááºá¡ááá¯ááº) á á¯á ááºážááẠဠKTable ááᯠá¡áá¯á¶ážááŒá¯áá«áááºá á€ááá á¹á ááœáẠáá»áœááºá¯ááºááá¯á·ááá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠáááá¡ááŒááẠá á¯á ááºážááŸá¯áá¯á¶á á¶ááŸáá·áº áááºáá°áá«áááºá
- áá¯ááºáááºážáá áºáá¯áá»ááºážá á®á¡ááá¯áẠShareVolume á¡áá¬ááá¹áá¯áá»á¬ážááᯠá¡á¯ááºá á¯ááœá²á·ááẠá¡ááŒá¬ážá¡ááœá²á·á¡ááá¯áẠáá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±á¬ááºáá«á
- ShareVolume á¡áá¬ááá¹áá¯áá»á¬ážááᯠá¡áá»ááºážáá»á¯ááºá áááºáá«á á€á¡ááŒáááºáá±á«ááºážá ááºážááŸá¯á¡áá¬ááá¹áá¯ááẠáá¯á¶áá±á¡ááœááºá¡á á¬áž áŠážá á¬ážáá±ážáááºážá á®ááŒá áºáááºá á€áá¯á¶áá±á¡ááœááºá¡á á¬ážáááºážá á®ááœááºá á¡á á¯ááŸááºáá¬á¡áá»á¬ážáá¯á¶ážáá±á¬ááºážáá»ááá·áºáá¯áá¹ááá®áá«ážáá¯ááá¯áᬠááááºážááááºážáá¬ážáááºá
- ááááºá á¬ááá¯ááºá០áááºážá á®ááá¬ážáá»á¬ážááᯠá á¬ááŒá±á¬ááºážáááºááá¯ážáá áºáá¯ááá¯á· ááŒá±áá¯á¶ááœá²ááŒá®áž áá¯ááºáááºážá¡ááá¯áẠáá¶áá«ááºááŒáá·áº á¡áá±á¬ááºážá¡áááºá¡áá»á¬ážáá¯á¶áž á áá±á¬á·áá«ážáá¯ááᯠááŒááºáá±ážáá«á
- ááááºáá»á¬ážááᯠáá±á«ááºážá ááºá¡ááœáẠá á¬áááºážáá¯á¶á á¶ááŒáá·áº áá±ážáá«á
áá¯á¶ááœááºá áá¯á¶ 5.10 ááẠdata flow topology ááááºááá¯ááŒááááºá áááºááœá±á·ááŒááºááá¯ááºáááºá¡ááá¯ááºážá áá¯áááá¡áá»á®áá¯ááºáá±á¬ááºááŒááºážáááºá¡áá±á¬áºáá±ážááá¯ážááŸááºážáááºá
ááᯠáá¯áááá¡áá»á±á¬á· áá¯ááºáá±á¬ááºááŒááºážá ááœá²á·á
ááºážáá¯á¶ááᯠáá»áœááºá¯ááºááá¯á· ááŸááºážááŸááºážáááºážáááºáž áá¬ážáááºáá¬ážááŒá®ážá áá»áœááºá¯ááºááá¯á·ááẠáááºážá á¡áááºážá¡ááŒá
áºáá¯ááºááá¯á· ááŒá±á¬ááºážááá¯ááºááẠ(ááá¯áẠsrc/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (á
á¬áááºážááŒá¯á
á¯ááŒááºáž 5.4) ááœáẠááœá±á·ááá«áááºá .
á€áááŠážá áá áºááœáẠáá¯á¶áá±Queue ááááºážááŸááºáá áºáá¯áá«ááŸááááºá áááºážááẠjava.util.TreeSet á¡ááœáẠá¡áááºáá¬áá áºáá¯ááŒá áºááá·áº á áááºááŒáá¯ááºá¡áá¬ááá¹áá¯áá áºáá¯ááŒá áºááŒá®áž ááááºáááºáž N ááááºáá»á¬ážááᯠááŒá±áá¬áá¶ááẠá¡áá¯á¶ážááŒá¯ááá·áº ááŸááºáá¬áá»á¬áž áá±á¬ááºážáááºáá±á¬ááºáá¬ážááŸá¯ ááŒá®ážá ááºáááºááá¯ááºááŒá áºáááºá
groupBy ááŸáá·áº mapValues ââáá±á«áºááá¯ááŸá¯áá»á¬ážááᯠáááºááŒááºááŒá®ážááŒá®á ááá¯á·ááŒá±á¬áá·áº áááºážááá¯á·ááᯠáá»áœááºá¯ááºááá¯á· ááá«áááºáá« (áá»áœááºá¯ááºááá¯á·ááẠKTable.toStream áááºážáááºážááᯠKTable.print áááºážáááºážááᯠáááºááá¯ááºážáá¬ážáá±á¬ááŒá±á¬áá·áº)á áá«áá±ááá·áº aggregate() áá²á· KTable áá¬ážááŸááºážááᯠáááºáááŒááºááá±ážáá²á·á¡ááœáẠá¡á²áá«ááᯠááœá±ážááœá±ážááá¯á· á¡áá»áááºá¡áááºážáááºáá°áá«áááºá
áááºááŸááºááááá·áºá¡ááá¯ááºáž KTable ááœá²ááŒá¬ážá á±áá±á¬á¡áá¬ááŸá¬ áá°áá®áá±á¬áá±á¬á·áá»á¬ážááŒáá·áº ááŸááºáááºážáá»á¬ážááᯠá¡ááºááááºáá»á¬ážá¡ááŒá ẠáááºááŸááºááŒááºážáááºááŒá áºáááºá KTable ááẠá¡áá±á¬ááºážááᯠá¡áá áºáá áºáá¯ááŒáá·áº á¡á á¬ážááá¯ážáááºá áá±á«ááºážá ááºážááŒááºážááẠá¡áá¬ážáá°áááºážááŒáá·áº ááŒá áºáá±á«áºáááº- áá°áá®áá±á¬áá±á¬á·áá«áá±á¬ áá±á¬ááºáá¯á¶ážááŸááºáááºážáá»á¬ážááᯠá á¯á ááºážáá¬ážáááºá ááŸááºáááºážáá áºáá¯áá±á¬ááºáá¬áá±á¬á¡áá«á áááºážááᯠadder áá áºáá¯á¡áá¯á¶ážááŒá¯á FixedSizePriorityQueue á¡áááºážá¡á á¬ážáá²ááá¯á· áá±á«ááºážááá·áºááá¯ááºááẠ(á á¯á á¯áá±á«ááºážáááºážáááºážáá±á«áºááá¯ááŸá¯ááœáẠáá¯ááááá«áá¬áá®áá¬)á ááá¯á·áá±á¬áº á¡ááŒá¬ážááŸááºáááºážáá áºáá¯ááŸááá±ááŒá®ááá¯áá»áŸáẠáá°áá®áá±á¬áá±á¬á·ááŒáá·áº ááŸááºáááºážáá±á¬ááºážááᯠáá¯ááºáá¯ááºá ááºááŒáá·áº áááºááŸá¬ážááẠ(áááááá«áá¬áá®áá¬ááœáẠá á¯á á¯áá±á«ááºážáááºážáááºážáá±á«áºááá¯ááŸá¯)á
ááá¯ááá¯áááºááŸá¬ áá»áœááºá¯ááºááá¯á·áá á¯á ááºážááŸá¯ FixedSizePriorityQueue ááẠáá±á¬á·áá áºáá¯áááºážááŒáá·áº áááºááá¯ážá¡á¬ážáá¯á¶ážááᯠá á¯á ááºážáá¬ážááŒááºážááá¯ááºáá² N á¡áá±á¬ááºážá¡áááºá¡áá»á¬ážáá¯á¶ážá áá±á¬á·á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá ááœá±á·áá»á¬ážááœá±ááá¬áááᯠááááºážáááºážáá¬ážááŒááºážááŒá áºáááºá á¡áááºáá áºáá¯á á®ááœáẠááá¯á¡áá»áááºá¡áá áá±á¬ááºážáá»áá¬ážáá±á¬ ááŸááºáá¬á á¯á á¯áá±á«ááºáž á¡áá±á¡ááœáẠáá«ááŸááááºá KTable ááẠááá·áºá¡á¬áž á¡ááºááááºáá áºáá¯á á®á á¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯áẠá á¯á ááºážááŸá¯áááá¯á¡ááºáá² áááºááá·áºáá¯áá¹ááá®áá»á¬ážá ááŸááºáá¬áá»á¬ážááᯠáááºááŸáá¡áá±á¬ááºážá¡áááºá¡áá»á¬ážáá¯á¶ážááŒá áºááŒá±á¬ááºáž ááááºážá¡áá»ááºá¡áááºáá±ážáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá¡áá±ážááŒá®ážáá±á¬á¡áá¬ááŸá áºáá¯ááᯠáá¯ááºáá±á¬ááºááẠáááºáá°áá²á·áááº-
- áá¯á¶áá±á¬á·ááŒáá·áº KTable ááŸá á¡á¯ááºá á¯áááºááá¯ážáá»á¬ážá
- á€á á¯ááœá²á·áá¬ážáá±á¬áááºááá¯ážáá»á¬ážáá±á«áºááœáẠá á¯á ááºážááŒááºážááŸáá·áº áá±á«ááºážá ááºážááŒááºážáá²á·ááá¯á·áá±á¬ á¡áá¯á¶ážáááºáá±á¬áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºáá«á
á€áá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážááᯠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠááááŸáááŒááºážááẠKafka Streams á¡ááá®áá±ážááŸááºážááŸáááá·áº ááœá±á·áá»á¬ážáá±áá±á¬ áá±áá¬áá»á¬ážá á¡áááá¹áá«ááºááᯠáá¬ážáááºáááºááŸáá·áº áááºážááœáẠáááºáá±á¬ááºááá·áº á¡áá»ááºá¡áááºáá»á¬ážááᯠáá¬ážáááºááẠá¡áá±ážááŒá®ážáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠá€á á¬á¡á¯ááºááœáẠá¡á á±á¬ááá¯ááºážááœá±ážááœá±ážáá²á·ááá·áº á¡áááááá±á¬ááá¬ážá¡áá»áá¯á·ááá¯áááºáž á á¯á ááºážáááºááŒáá¬ážáá«áááºá á¡áááºáž 4 ááœááºá áá¯ááºááœáŸáá·áºááŸá¯á¡ááºááºáá áºáá¯á¡ááœáẠáá±ááá¹ááááŒááºáááºááẠáááºáá»áŸá¡ááŸá¬ážá¡ááœááºážáá¶ááá¯ááºáááºááᯠááœá±ážááœá±ážáá¬ážáááºá á€á¡áááºážááŸá áááááá°áá¬ááœáẠáá±ááá¹ááááŒááºáááºááẠá¡áááºááŒá±á¬áá·áº á€áá»áŸá¡áá±ážááŒá®ážáááºááᯠááá¯ááºááŒáá¬ážáááºâáááºážááẠááá·áºá¡á¬áž ááŒááºáá°ážááŒá®ážáá¬áž á¡áá»ááºá¡áááºáá»á¬ážááᯠááŒá±áá¬áá¶ááá¯ááºá á±áá«áááºá Local access ááẠááœááºáááºááŸá±á¬áá·áºááŸá±ážááŒááºážááᯠááŸá±á¬ááºááŸá¬ážááá¯ááºááŒá®áž á¡ááá®áá±ážááŸááºážááᯠááá¯ááá¯á áœááºážáá±á¬ááºáááºááŸáá·áº á¡ááŸá¬ážá¡ááœááºážáá¶ááá¯ááºáááºááŸáá á±áááºá
á á¯á ááºážááŸá¯ ááá¯á·ááá¯áẠá á¯á ááºážááŸá¯ áá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±á¬ááºááá·áºá¡áá«á ááŒááºáááºá ááá¯ážá á¡áááºááᯠáááºááŸááºááá«áááºá á á¯á ááºážááŸá¯ááŸáá·áº áá±á«ááºážá ááºáá±á¬ááºááœááºááŸá¯áá»á¬ážááẠKTable á á¶ááá°áá¬ááᯠááŒááºáá±ážáᬠKTable ááẠááááºáá±á¬ááºážáá»á¬ážááᯠá¡áá áºáá»á¬ážááŒáá·áº á¡á á¬ážááá¯ážáááºá¡ááœáẠááŒááºáááºááá¯ááŸá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯áááºá áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá á¡ááºááááºá¡á¬ážáá¯á¶ážááᯠááá¯ááºááá¯ááºážá¡á±á¬ááºááá¯á· ááá¯á·ááŒááºážááá¯ááºáá«á á á¯á ááºážááŸá¯áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááẠá¡ááŸá áºáá»á¯ááºá¡áá»ááºá¡áááºáá»á¬ážáá¯ááºáá¯ááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážáá±á¬ááŒá±á¬áá·áº áááºážááẠá¡áá±ážááŒá®ážáá«áááºá á¡áááºá áááºááẠáá±ááá¹ááááŒááºáááºááᯠááá»áá·áºáá¯á¶ážáá«áá KTable ááẠá á¯á ááºážááŸá¯ááŸáá·áº á á¯á ááºážááŸá¯ááááºá¡á¬ážáá¯á¶ážááᯠáááºááá·áºáá±ážááá¯á·áááºááŒá áºáááºá
ááá¯á·áá±á¬ááºá á¡áá»áááºá¡ááá¯ááºážá¡áá¬áá áºáá¯á¡ááœááºáž á á¯á ááºážááŸá¯áá²á·ááá¯á·áá±á¬ áá¯ááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá»áœááºá¯ááºááá¯á·ááŒáá·áºááŸá¯áá«ááẠ- áááºážááá¯ážáááºááŒááºážááá¯ááºáᬠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážáá¯áá±á«áºáááºá
á .á.áá ááŒáááºážáá±á«ááºáá¯ááºáááºážáá»á¬áž
ááááºá¡ááá¯ááºážááœááºá áá»áœááºá¯ááºááá¯á·ááẠsliding convolution ááŸáá·áº aggregation ááá¯ááááºáááºáá±ážáá²á·áááºá á¡ááá®áá±ážááŸááºážááẠá áá±á¬á·á¡áá±á¬ááºážá¡áááºááá¬áááᯠá ááºáááºáááŒáẠá á¯á ááºážáᬠáá²ááŸááºááŸá¯ááœáẠá¡áá±á¬ááºážá¡áááºá¡áá»á¬ážáá¯á¶áž á áá±á¬á·áá«ážáá¯ááᯠáá±á«ááºážá ááºážááá¯ááºáá«áááºá
ááá«ááá¶ááœáẠááá¯ááá¯á·áá±á¬ á¡áááºáááŒáẠá á¯á ááºážááŸá¯ááŸáá·áº ááááºáá»á¬ážááᯠá á¯á ááºážáááºááŒááẠááá¯á¡ááºáá«áááºá áá áºáá«áá áºáá¶ááœáẠáááºáááºááŸááºáá¬ážáá±á¬ á¡áá»áááºá¡ááá¯ááºážá¡áá¬áá áºáá¯á¡ááœááºážáᬠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá ááŒá®ážáá²á·áá±á¬ 10 áááá áºá¡ááœááºáž áá¯áá¹ááá®áá áºáá¯á ááŸááºáá¬áá»á¬ážááŸáá·áº ááœá±áá²ááŸááºááŸá¯ áááºáá»áŸááŒá¯áá¯ááºáá²á·áááºááᯠááœááºáá»ááºáá«á ááá¯á·ááá¯áẠááŒá®ážáá²á·áá±á¬ 15 áááá áºá¡ááœááºáž ááŒá±á¬áºááŒá¬ááá°ážá ááºážá¡áá áºááᯠá¡áá¯á¶ážááŒá¯áá° áááºáá»áŸááŸáááºáá²á·ááááºážá á¡ááá®áá±ážááŸááºážáá áºáá¯ááẠááá¯ááá¯á·áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡ááŒáááºáá±á«ááºážáá»á¬ážá áœá¬ áá¯ááºáá±á¬ááºááá¯ááºáá±á¬áºáááºáž áááºááŸááºáá¬ážáá±á¬ á¡áá»áááºáá¬ááá»á¬áž (á¡áá»áááºááŒáááºážáá±á«ááºáá»á¬áž) ááŸáá·áºáᬠáááºááá¯ááºááá·áº ááááºáá»á¬ážááŒáá·áº áá¯ááºáá±á¬ááºááá¯ááºáááºá
áááºáá°á០ááœá±áá²ááŒááºážáá»á¬ážááᯠáá±ááœááºááŒááºážá
áá±á¬ááºá¥ááá¬ááœááºá ááŒá®ážáá¬ážáá±á¬á¡ááœá²á·á¡á ááºážáá»á¬áž ááá¯á·ááá¯áẠá áááºáá áºáá®ážáá»ááºážá á®á០ááœá±ááŒá±ážáá±á¬ááºáá¶á·áá°áá»á¬ážááŒá áºááá·áº áá¯ááºáááºá¡áá»á¬ážá¡ááŒá¬ážááŸá á áá±á¬á·á¡áá±á¬ááºážá¡áááºáá»á¬ážááᯠááŒá±áá¬áá¶áá«áááºá
á€ááŒá±áá¬áá¶ááŒááºážá¡ááœáẠááŒá áºááá¯ááºáá»á± á¡ááŒá±á¬ááºážáááºáž ááŸá áºáá¯ááŸááááºá á¡á²áá®áá²á áá áºáá¯á á á»á±ážááœááºáá±á«ááºážáá±á¬ááºááœá±á áá¬áááº/áá±á¬ááºážáá²ááá¯áᬠááááá¯á·ááá¯áááºá áá®áá á¬ážááá¬ážááŒá®ážááœá±áá²á· áá±ááºáá®áááºážááŒá¬ážáá²á· áááºážááŸá®ážááŒáŸá¯ááºááŸá¶áá°ááœá±á á¡ááœáá·áºá¡áááºážááᯠááŒááºáááºááá¯ááẠáá°ááá¯á·áá²á· áááºážáá»á°áá¬ááᯠááá¯ááºáá¬ááá¯á· á¡áááá¹áá¬ááºááŸááá«áááºá áá¯áááá¡ááŒá±á¬ááºážáááºážááŸá¬ ááá¬ážááááºá¡ááœááºážáá°áá¯ááºááœááºááŒááºážá ááŒá áºááá¯ááºááŒá±ááŸááá±á¬ á¡ááááºá¡áá±á¬ááºáá»á¬ážááᯠáá±á¬áºáá¯ááºááẠááá¹áááŒá áºáááºá áá®ááá¯áá¯ááºááá¯á·á á¡áá±ážááŒá®ážáá²á·ááááºážáá¯ááºááŒááºáá»ááºááœá±áá²á· ááŒá®ážáá¬ážáá²á·á¡áá±á¬ááºážááŒáŸáá·áºáááºááŸá¯ááœá±áá²á· áááºá ááºááŸá¯ááᯠááœá²ááŒááºážá áááºááŒá¬ááá¯á· ááá¯áá«áááºá
ááá¯ááá¯á·áá±á¬ááŒá±áá¬áá¶ááŒááºážááœáẠá¡á±á¬ááºáá«á¡ááá·áºáá»á¬áž áá«áááºáááº-
- á áá±á¬á·-ááœá±ááœáŸá²ááŒááºáž áá±á«ááºážá ááºá០áááºááŸá¯ááẠstream áá áºáᯠáááºáá®ážááŒááºážá
- áááºáá° ID ááŸáá·áº á áá±á¬á·áááºá¹áá±áááŒáá·áº á¡áááºááŸááºáááºážáá»á¬ážááᯠá¡á¯ááºá á¯ááœá²á·ááŒááºážá groupBy method ááá¯áá±á«áºááá¯ááŒááºážááẠKGroupedStream á¡áááºážá áá¬áááá áºáá¯ááᯠááŒááºáá±ážáááºá
- KGroupedStream.windowedBy method ááẠwindowed áá±á«ááºážá ááºážááŸá¯ááᯠááœáá·áºááŒá¯ááá·áº á¡áá»áááºáááºážááá¯ážáá áºáá¯á¡ááœáẠááá·áºáááºáá¬ážáá±á¬ áá±áá¬á á®ážááŒá±á¬ááºážááᯠááŒááºáá±ážáááºá áááºážááá¯ážá¡áá»áá¯ážá¡á á¬ážáá±á«áº áá°áááºá TimeWindowedKStream ááá¯á·ááá¯áẠSessionWindowedKStream ááᯠááŒááºáá±ážáááºá
- áá±á«ááºážá ááºážáááºáááºááŸá¯á¡ááœáẠááœá±áá±ážááœá±áá° á¡áá±á¡ááœááºá Windowed data flow ááẠá€áá±ááœááºááŸá¯ááœáẠáá®ážááŒá¬ážááŸááºáááºážáá áºáá¯ááᯠááá·áºááœááºážáá¬ážááŒááºážááŸááááŸá áá¯á¶ážááŒááºáá±ážáááºá
- ááááºáá»á¬ážááᯠá¡ááŒá±á¬ááºážá¡áá¬áá áºáá¯ááá¯á· áá±ážáá¬ážááŒááºáž ááá¯á·ááá¯áẠááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬áá¡ááœááºáž áááºážááá¯á·ááᯠááœááºááá¯ážááºááá¯á· áá¯ááºáá±ážááŒááºážá
á€á¡ááá®áá±ážááŸááºážá topology ááẠááá¯ážááŸááºážáá±á¬áºáááºáž ááŸááºážáááºážáá±á¬áá¯á¶ááẠá¡áá±á¬ááºá¡áá°ááŒá áºáááá·áºáááºá Fig ááá¯ááŒáá·áºáá¡á±á¬ááºá á .ááá
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáááºážááá¯ážáá¯ááºáá±á¬ááºááŸá¯áá»á¬ážá áá¯ááºáá±á¬ááºááá¯ááºá áœááºážááŸáá·áº áááºááá¯ááºáá±á¬áá¯ááºááᯠááŒáá·áºáá«áááºá
Window á¡áá»áá¯ážá¡á á¬ážáá»á¬áž
Kafka Stream ááœáẠááŒáááºážáá±á«ááºáá¯á¶ážáá»áá¯ážááŸááááºá
- sessional;
- âááŒá¯ááºáá»ááŒááºážâ (tumbling);
- áá»áŸá±á¬/áá¯ááºá
áááºáá¬ááᯠááœá±ážáá»ááºááá² ááá¯áá¬ááá±á¬á· ááá·áºáá¯ááºáááºážáá²á· ááá¯á¡ááºáá»ááºááœá±áá±á«áºááŸá¬ áá°áááºáá«áááºá áá¯ááºáá»ááŒááºážááŸáá·áº áá¯ááºááŒááºážááŒáááºážáá±á«ááºáá»á¬ážááᯠá¡áá»áááºááá·áºáááºáá¬ážáá±á¬áºáááºážá á ááºááŸááºáááºážááá¯ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá°áá¯ááºáá±á¬ááºáá»ááºááŒáá·áº ááá·áºáááºáá¬ážáá±á¬áºáááºážá á ááºááŸááº(áá»á¬áž) áááŒá¬áá»áááºááᯠá¡áá¯á¶ážááŒá¯áá°áááºáá»áŸáááºááŒáœá áœá¬ááŒáá·áºáᬠáá¯á¶ážááŒááºáááºá á¡áááááŸááºáá¬ážáá¬ážáááá·áºá¡áá»ááºááŸá¬ áááºážááá¯ážá¡áá»áá¯ážá¡á á¬ážá¡á¬ážáá¯á¶ážááẠá áá áºá¡áá»áááºááá¯ááºáá² ááá·áºááœááºážááŸá¯áá»á¬ážá áááºá áœá²/á¡áá»áááºáá¶ááááºáá±á«ááºážáá»á¬ážáá±á«áºááœáẠá¡ááŒá±áá¶áá¬ážáááºá
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠwindow á¡áá»áá¯ážá¡á á¬ážáá áºáá¯á á®ááŒáá·áº áá»áœááºá¯ááºááá¯á·á topology ááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºáááºá áá¯ááºá¡ááŒáá·áºá¡á á¯á¶ááᯠáááá¥ááá¬ááœááºáᬠáá±ážáááá·áºáááºá á¡ááŒá¬áž windows á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááœáẠwindow operation á¡áá»áá¯ážá¡á á¬ážááŸááœá²á áá¬ááŸáááŒá±á¬ááºážáá²áá«á
á ááºááŸáẠááŒáááºážáá±á«ááºáá»á¬áž
Session windows ááẠá¡ááŒá¬ážáá±á¬ windows á¡áá»áá¯ážá¡á á¬ážá¡á¬ážáá¯á¶ážááŸáá·áº á¡ááœááºááœá¬ááŒá¬ážáá«áááºá áááºážááá¯á·ááẠá¡áá¯á¶ážááŒá¯áá°á áá¯ááºáá±á¬ááºáá»áẠ(ááá¯á·ááá¯áẠáááºááŒá±áá¬áá¶ááá¯ááá·áº á¡ááœá²á·á¡á ááºážá áá¯ááºáá±á¬ááºáá»ááº) ááŒá±á¬áá·áº á¡áá»áááºá¡á¬ážááŒáá·áº á¡ááá·áºá¡áááºáááŸááá±á áááºááŸááºááŒáááºážáá±á«ááºáá»á¬ážááᯠááŸá¯ááºááŸá¬ážááŸá¯áááŸááá±á¬áá¬ááá»á¬ážááŒáá·áº ááá·áºáááºáá¬ážáááºá
áá¯á¶ 5.12 ááẠsession windows á ááá±á¬ááá¬ážááᯠááá¯ááºáá±á¬áºáááºá áá±ážáááºáá±á¬ á ááºááŸááºááẠáááºážááááºáááºááŸá á ááºááŸááºááŸáá·áº áá±á«ááºážá ááºážáááºááŒá áºáááºá áá¬áááºááŸá áááºááŸááºááẠá¡áá»áááºá¡ááŒá¬ááŒá®áž ááŸá¯ááºááŸá¬ážááŸá¯áááŸááá±á¬ááŒá±á¬áá·áº áááºážááẠáá®ážááŒá¬ážááŒá áºáááºá á ááºááŸááºáááºážááá¯ážáá»á¬ážááẠá¡áá¯á¶ážááŒá¯áá°áá¯ááºáá±á¬ááºáá»ááºá¡áá±á«áº á¡ááŒá±áá¶áá±á¬áºáááºáž áááºááá·áºá ááºááŸááºáá«áááºáááºááᯠáá¯á¶ážááŒááºááẠááá·áºááœááºážááŸá¯áá»á¬ážá០áááºá áœá²/á¡áá»áááºáá¶ááááºáá±á«ááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá«á
á áá±á¬á·ááŸááºáá¬á¡áá±á¬ááºážá¡áááºáá»á¬ážááá¯ááŒá±áá¬áá¶ááẠsession windows ááá¯á¡áá¯á¶ážááŒá¯ááŒááºážá
ááœá±áá²ááŸááºááŸá¯ááá¯ááºáᬠá¡áá»ááºá¡áááºáá»á¬ážááᯠáááºážáá°ááẠá ááºááŸááºáááºážááá¯ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒáá«á áá¯á·á session windows áá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠListing 5.5 ááœááºááŒááá¬ážááẠ(áááºážááᯠsrc/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java ááœááºááœá±á·ááá¯ááºáááº)á
ဠtopology ááœáẠáá¯ááºáá±á¬ááºááŸá¯á¡áá»á¬ážá
á¯ááᯠáááºááŒááºááŒá®ážááŒá®ááŒá
áºáá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠá€áá±áá¬ááœáẠáááºáá¶ááŒáá·áºááŸá¯ááẠáááá¯á¡ááºáá«á áá«áá±ááá·áº á¡áᯠááœá±ážááœá±ážááá·áº á¡ááŒá±á¬ááºážá¡áá¬áá
áºááœá±áááºáž áá®ááŸá¬ ááŸááá«áááºá
GroupBy áá¯ááºáá±á¬ááºááŸá¯ááá¯ááºážááẠáá¯á¶ááŸááºá¡á¬ážááŒáá·áº á á¯á ááºážááŸá¯ áá¯ááºáá±á¬ááºáá»áẠ(áá±á«ááºážá ááºážááŒááºážá á á¯á ááºážááŒááºáž ááá¯á·ááá¯áẠáá±ááœááºááŒááºáž) á¡áá»áá¯á·ááᯠáá¯ááºáá±á¬ááºáá«áááºá áááºááŸááºáá¬ážáá±á¬á¡áá»áááºáááºážááá¯ážá¡ááœááºáž á¡áá±á¬áá·áºááŸááºáááºážáá»á¬ážááá·áºááœááºážáá±ážáá±á¬ áááºáááºáá±áá±á¬á á¯á á¯áá±á«ááºáž ááá¯á·ááá¯áẠá á¯á ááºážááŸá¯áá±á«ááºážá ááºážááŒááºážááᯠáááºáá¯ááºáá±á¬ááºááá¯ááºáááºá
Listing 5.5 ááŸá áá¯ááºááẠsession windows á¡ááœááºáž ááœá±áá±ážááœá±áá° á¡áá±á¡ááœááºááᯠáá±ááœááºáááºá áá¯á¶ááœááºá 5.13 á€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡ááá·áºááá·áºááœá²ááŒááºážá áááºááŒá¬áá«áááºá
WindowedBy(SessionWindows.with(twentySeconds).(fifteen Minutes))á¡áá áá±á«áºááá¯ááŒááºážááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠááŸá¯ááºááŸá¬ážááŸá¯áááŸááá±á¬áá¬á á áá¹ááá·áº 20 ááŸáá·áº áááºááá¯ááºááŒá¬ážáá¬á 15 áááá áºááŒáá·áº á ááºááŸááºáááºážááá¯ážáá áºáá¯ááᯠáááºáá®ážáá«áááºá á áá¹ááá·áº 20 á idle interval ááá¯áááºááŸá¬ á¡ááá®áá±ážááŸááºážááœáẠááŒá®ážáá¯á¶ážáá»áááºá០20 á áá¹ááá·áºá¡ááœááºáž ááá¯á·ááá¯áẠáááºááŸá session á áááºááá·áº áááºááŸá (active) session ááá¯á· áá±á¬ááºááŸáááá·áº áááºááá·áº entry ááá¯áááᯠáá«áááºáááºááŒá áºáááºá
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá
ááºááŸááºáááºážááá¯ážááœáẠáááºááá·áºá
á¯áá±á«ááºážáá±á¬ááºááœááºááŸá¯ááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºááŒá±á¬ááºáž áááºááŸááºáá« - á€ááá
á¹á
ááœááºá áá±ááœááºáá«á á¡áááºá¡ááœááºáá
áºáá¯ááẠááŸá¯ááºááŸá¬ážááŸá¯áááŸááá±á¬áááºážááá¯ážá á¡ááŒááºáááºááœáẠáá»áá±á¬ááºáá«á (áááºá
áœá²/á¡áá»áááºáá¶ááááºáá¯á¶ážá áá
áºáááºáá
áºáá»ááºá
á®)á á¡ááá®áá±ážááŸááºážááẠá
ááºááŸááºá¡áá
áºáá
áºáᯠáááºáá®ážáá±ážáá«áááºá Retention interval ááá¯áááºááŸá¬ session áá
áºáá¯á¡á¬áž á¡áá»áááºá¡ááá¯ááºážá¡áá¬áá
áºáá¯á¡áá ááááºážááááºážáá¬ážááŒá®áž session áááŸá¯ááºááŸá¬ážááŸá¯áááŸááá±á¬áá¬áááẠáá»á±á¬áºááœááºááœá¬ážáá±á¬ áá±á¬ááºáá»áá±áá¬ááᯠááœáá·áºááŒá¯áá±ážáá±á¬áºáááºáž áááºáááºáá»áááºáááºááá¯ááºáá«áááºá ááá¯á·á¡ááŒááºá áá±á«ááºážá
ááºážááŒááºážá០ááœááºáá±á«áºáá¬áá±á¬ á
ááºááŸááºá¡áá
áºá á¡á
ááŸáá·áº á¡áá¯á¶ážááẠá¡á
á±á¬áá¯á¶ážááŸáá·áº áá±á¬ááºáá¯á¶ážáá±á«áºáááºá
áœá²/á¡áá»áááºáá¶ááááºáá¯á¶ážááŸáá·áº ááá¯ááºáá®áá«áááºá
á ááºááŸááºáá»á¬áž áááºááá¯á·á¡áá¯ááºáá¯ááºáááºááᯠááŒáá·áºááŸá¯ááẠáá±ááœááºáááºážá០ááá·áºááœááºážááŸá¯á¡áá»áá¯á·ááᯠááŒáá·áºááŒáá«á áá¯á· (ááá¬áž 5.1)á
ááŸááºáááºážáá»á¬áž áá±á¬ááºááŸááá¬áá±á¬á¡áá«á áá°áá®áá±á¬áá±á¬á·ááŒáá·áº ááŸáááŒá®ážáá¬áž á
ááºááŸááºáá»á¬ážá áááºááŸá áááºá
áœá²/á¡áá»ááẠáá¶ááááºáá±á«ááºážááẠáááºážáá±á¬ áá¯ááºáá¯á¶ážáá»ááẠ- ááŸá¯ááºááŸá¬ážááŸá¯áááŸááá±á¬ ááŒá¬ážáá¬áááŸáá·áº áááºááŸá áááºá
áœá²/á¡áá»áááºáá¶ááááºáá¯á¶áž + ááŸá¯ááºááŸá¬ážááŸá¯áááŸááá±á¬ ááŒá¬ážáá¬áááẠááá¯ááŒá®ážáá±á¬ á
áááºáá»áááºááᯠááŸá¬ááœá±áá«áááºá áá«ááᯠááá·áºááœááºážá
ááºážá
á¬ážááẠááá¬ážáá²á á¡áá»ááºáá±ážáá»ááºáá«á 5.1 ááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž session áá
áºáá¯áá²ááá¯á· áá±á«ááºážá
ááºáá¬ážáááºá
1. Record 1 ááẠááááá¯á¶ážáá±á¬ááºááŸááá±á¬ááŒá±á¬áá·áº á áááºáá»áááºááẠááŒá®ážáá¯á¶ážáá»áááºááŸáá·áº 00:00:00 ááŒá áºáááºá
2. ááá¯á·áá±á¬ááºá áááºááœáá·áº 2 áá±á¬ááºááŸááá¬ááŒá®áž 23:59:55 áááºáá á±á¬áá² ááŒá®ážáá¯á¶ážááá·áº 00:00:35 ááẠáá±á¬ááºááá»á á±áá² á áááºááẠáá»áœááºá¯ááºááá¯á· ááŸá¬ááœá±áá«áááºá áá»áœááºá¯ááºááá¯á·ááẠááŸááºáááºáž 1 ááᯠááŸá¬ááœá±á·ááŒá®áž á¡ááá¯ááºáž 1 ááŸáá·áº 2 ááᯠáá±á«ááºážá ááºáá¬ážáááºá áá»áœááºá¯ááºááá¯á·ááẠsession 1 á á áááºáá»ááẠ(á¡á á±á¬ááá¯ááºáž) ááŸáá·áº session 2 (áá±á¬ááºááá¯ááºáž) á ááŒá®ážáá¯á¶ážáá»áááºááᯠáá°áááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·á session á¡áá áºááẠ00:00:00 ááœáẠá áááºááŒá®áž 00 ááœáẠááŒá®ážáá¯á¶ážáááº- 00:15 á
3. Record 3 áá±á¬ááºááŒá®á áá»áœááºá¯ááºááá¯á·ááẠ00:00:30 ááŸáá·áº 00:01:10 ááŒá¬ážááŸá sessions áá»á¬ážááá¯ááŸá¬ááœá±ááŒá®áž áááºááá·áºá¡áá¬ááá¯áá»áŸ ááŸá¬áááœá±á·áá«á 123-345-654áFFBEá 00:00:50 ááœáẠá áááºááŒá®áž á¡áá¯á¶ážáááºááá·áº áá±á¬á·á¡ááœáẠáá¯ááá session áá áºáá¯ááᯠááá·áºáá«á
4. ááŸááºáááºáž 4 áá±á¬ááºááŸááá¬ááŒá®áž 23:59:45 ááŸáá·áº 00:00:25 ááŒá¬ážááœáẠá¡á ááºážá¡áá±ážáá»á¬ážááᯠááŸá¬ááœá±áá±áá«áááºá á€á¡ááŒáááºááœáẠsession 1 ááŸáá·áº 2 ááŸá áºáá¯á áá¯á¶ážááᯠááœá±á·ááŸááá«áááºá session áá¯á¶ážáá¯áá¯á¶ážááᯠá áááºáá»ááẠ00:00:00 ááŸáá·áº ááŒá®ážáá¯á¶ážáá»ááẠ00:00:15 ááá¯á·ááŒáá·áº áá áºáá¯áááºážá¡ááŒá Ạáá±á«ááºážá ááºáá¬ážáááºá
á€ááá¹áááœááºáá±á¬áºááŒáá¬ážááá·áºá¡áá¬ááŸá á¡á±á¬ááºáá«á¡áá±ážááŒá®ážáá±á¬ nuances áá»á¬ážááᯠááŸááºáá¬ážáá¬ážááá·áºáá«áááºá
- session áá»á¬ážááẠáá¯á¶áá±á¡ááœááºá¡á á¬áž windows ááá¯ááºáá«á á ááºááŸááºáá áºáá¯áááŒá¬áá»áááºááᯠáá±ážáá¬ážááá·áºá¡áá»áááºáá áºáá¯á¡ááœááºáž áá¯ááºáá±á¬ááºááŸá¯á០áá¯á¶ážááŒááºáááºá
- áá±áá¬ááŸá áááºá áœá²/á¡áá»áááºáá¶ááááºáá¯á¶ážáá»á¬ážááẠá¡ááŒá áºá¡áá»ááºááẠáááºááŸáá ááºááŸááºáá áºáá¯á¡ááœááºáž ááá¯á·ááá¯áẠá¡áá¯ááºááá¯ááºáá±á¬áá¬ááá áºáá¯á¡ááœááºáž á¡ááŒá áºá¡áá»ááºááᯠáá¯á¶ážááŒááºáááºá
ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºááẠwindow á¡áá»áá¯ážá¡á á¬áž - "tumbling" windows ááᯠááœá±ážááœá±ážáá«áááºá
"ááŒáœá±" ááŒáááºážáá±á«ááºáá»á¬áž
ááŒáœá±áá»áá±áá±á¬ ááŒáááºážáá±á«ááºáá»á¬ážááẠá¡áá»áááºáá¬ááá áºáá¯á¡ááœááºáž áá»áá±á¬ááºáá±áá±á¬ á¡ááŒá áºá¡áá»ááºáá»á¬ážááᯠáááºážáá°áááºá á áá¹ááá·áº 20 ááá¯ááºáž áá¯áá¹ááá®áá áºáá¯á á áá±á¬á·á¡áá±á¬ááºážá¡áááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠáááºážáá°ááẠááá¯á¡ááºáááºáᯠá áááºáá°ážááŒáá·áºáá«á ááá¯á·ááŒá±á¬áá·áº ááá¯á¡áá»áááºáá¬áá¡ááœááºáž á¡ááŒá áºá¡áá»ááºá¡á¬ážáá¯á¶ážááᯠá á¯áá±á¬ááºážáá«á á áá¹ááá·áº 20 ááŒá¬ážáá¬ááá¡áá¯á¶ážááœááºá ááŒáááºážáá±á«ááºááẠááœá±á·áá»á¬ážááŒá®áž á áá¹ááá·áº 20-ááŒá¬ážáá¬áá¡áá áºááá¯á· ááœá±á·áá»á¬ážáááºá áá¯á¶ 5.14 ááẠá€á¡ááŒá±á¡áá±ááᯠáá±á¬áºááŒáááºá
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºáž ááŒá®ážáá²á·áá±á¬ 20 á
áá¹ááá·áºá¡ááœááºáž áááŸááá²á·áá±á¬ á¡ááŒá
áºá¡áá»ááºáá»á¬ážá¡á¬ážáá¯á¶ážááᯠwindow ááœáẠááá·áºááœááºážáá¬ážáá«áááºá á€á¡áá»áááºáá¬ááá¡áá¯á¶ážááœááºá áááºážááá¯ážá¡áá
áºáá
áºáá¯áááºáá®ážáááºá
á á¬áááºážááŒá¯á á¯ááŒááºáž 5.6 ááẠá áá¹ááá·áº 20 ááá¯ááºáž á áá±á¬á·ááŸááºáá¬á¡áá±á¬ááºážá¡áááºáá»á¬ážááá¯áááºážáá°ááẠáá¯ááºáá«áá±áá±á¬ááŒáááºážáá±á«ááºáá»á¬ážá¡áá¯á¶ážááŒá¯ááŸá¯ááᯠááá¯ááºááŒááá·áºáá¯ááºááá¯ááŒáááẠ(src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) ááœááºááœá±á·ááŸáááááºá
TimeWindows.of áááºážáááºážáá±á«áºááá¯ááŸá¯ááá¯á· á€áá±ážáááºáá±á¬ááŒá±á¬ááºážáá²ááŸá¯ááŒáá·áºá áááºááẠáááá¯ááá²áááºážááá¯ážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá á€á¥ááá¬ááẠUntil() áááºážáááºážááᯠááá±á«áºááá¯áá«á ááá¯á·ááŒá±á¬áá·áº 24 áá¬áá®á áá¯á¶áá±ááááºážááááºážááŸá¯ááŒá¬ážáá¬áááᯠá¡áá¯á¶ážááŒá¯áá«áááºá
áá±á¬ááºáá¯á¶ážá¡áá±áá²á·á áááºážááá¯ážááœá±ážáá»ááºá áá¬áá»á¬ážáá²á· áá±á¬ááºáá¯á¶ážááŒá áºáá²á· "áá¯ááºááŒááºáž" áááºážááá¯ážááœá±ááᯠááœáŸá±á·ááá¯á· á¡áá»áááºáá±á¬ááºáá«ááŒá®á
áá»áŸá±á¬ ("áá¯ááº") ááŒáááºážáá±á«ááº
áá»áŸá±á¬/áá¯ááºááŒáááºážáá±á«ááºáá»á¬ážááẠááŒáœá±áá»áá±áá±á¬ááŒáááºážáá±á«ááºáá»á¬ážááŸáá·áº áááºáá°áá±á¬áºáááºáž á¡áááºážáááºááœá¬ááŒá¬ážáá»ááºááŸááááºá áá»áŸá±á¬ááŒáááºážáá±á«ááºáá»á¬ážááẠáááºááá±á¬ááŒá áºáááºáá»á¬ážááᯠá á®áá¶áá±á¬ááºááœááºááẠáááºážááá¯ážá¡áá áºááááºáá®ážáá® á¡áá»áááºááŒá¬ážáá¬á áá¯ááºáá¯á¶ážáááºá¡áá áá á±á¬áá·áºáá«á ááŒáááºážáá±á«ááºááŒá¬áá»áááºáááºáááºážáá±á¬ á á±á¬áá·áºááá¯ááºážáá¬ááá áºáá¯ááŒá®ážáá±á¬áẠáááºážááá¯á·ááẠááœááºáá»ááºááŸá¯á¡áá áºáá»á¬ážááᯠá áááºáááºá
ááŒáááºážáá±á«ááºáá»á¬áž ááŒáá¯áá»ááŒááºážááŸáá·áº áá¯ááºááŒááºážááŒá¬áž ááŒá¬ážáá¬ážáá»ááºáá»á¬ážááᯠááá¯ááºáá±á¬áºáááºá á áá±á¬á·á¡áááºáá»áááºáž á¡áá±á¬ááºážá¡áááºáá»á¬ážááᯠáá±ááœááºááŒááºážá á¥ááá¬ááᯠááŒááºááŒáá·áºááŒáá«á áá¯á·á áá»áœááºá¯ááºááá¯á·ááááºážááá¯ááºááŸá¬ ááœá±áá±ážááœá±áá°á¡áá±á¡ááœááºááᯠáá±ááœááºáááºááŒá áºáá±áá²ááŒá áºáá±á¬áºáááºáž áá±á¬ááºáá¬ááœááºážáá¶ááŒááºážáááŒá¯áá® á¡áá»áááºá¡ááá¯ááºážá¡áá¬áá áºáá¯áá¯á¶ážááᯠáá á±á¬áá·áºáá»ááºáá«á áááºážá¡á á¬ážá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááá¯áá±á¬áá¬ááá»á¬ážááœáẠáá±á¬ááºáá¬ááᯠá¡ááºááááºáá¯ááºáá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá áá¯á¶ááœááºááŒáá¬ážááá·áºá¡ááá¯ááºáž á áá¹ááá·áº 20 ááá¯ááºáž ááœá±áá±ážááœá±áá°á¡áá±á¡ááœááºááᯠáá»áœááºá¯ááºááá¯á· áá±ááœááºáá±áá²ááŒá áºáá±á¬áºáááºáž áá¯á¶ááœááºááŒáá¬ážááá·áºá¡ááá¯ááºáž 5 á áá¹ááá·áºááá¯ááºáž áá±á¬ááºáá¬ááᯠá¡ááºááááºáá¯ááºáá«á á .áá á á€ááá á¹á ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºáá±áá±á¬áá±áá¬áá»á¬ážááŒáá·áº áááẠwindow áá¯á¶ážáá¯ááᯠá¡áá¯á¶ážáááºáá¬ážáááºá
á
á¬áááºážááŒá¯á
á¯ááŒááºáž 5.7 ááẠáá»áŸá±á¬ááŒáááºážáá±á«ááºáá»á¬ážááᯠáááºááŸááºááŒááºážá¡ááœáẠáá¯ááºááᯠááŒááẠ(src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) ááœáẠááœá±á·ááááºá
advanceBy() áááºážáááºážááá¯á· áá±á«áºááá¯ááŸá¯áá
áºáá¯ááᯠáá±á«ááºážááá·áºááŒááºážááŒáá·áº ááŒá¯ááºáá»áá±áá±á¬áááºážááá¯ážááᯠáá¯ááºáá±á«ááºáá±ááá·áºáááºážááá¯ážá¡ááŒá
áºááá¯á· ááŒá±á¬ááºážáá²ááá¯ááºáááºá ááŒáá¬ážááá·áºá¥ááá¬ááœááºá ááááºážáááºážáá»áááºááẠ15 áááá
áºááŒá
áºáááºá
áá±á«ááºážá ááºážááŸá¯ááááºáá»á¬ážááᯠá¡áá»áááºááŒáááºážáá±á«ááºáá»á¬ážááœáẠáááºááá¯á·ááá·áºáááºááááºááᯠá€ááá¹áááœáẠáááºááœá±á·áá²á·ááááºá á¡áá°ážáááŒáá·áºá á€ááá¹áá០á¡á±á¬ááºáá«á¡áá»ááºáá¯á¶ážáá»ááºááᯠááŸááºáá¬ážáá¬ážá á±ááá¯áá«áááºá
- session windows áá¡ááœááºá¡á á¬ážááᯠá¡áá»áááºáá¬áá¡á¬ážááŒáá·áºáááá·áºáááºáá²á á¡áá¯á¶ážááŒá¯áá°ááá¯ááºáá±á¬ááºáá»ááºá¡á¬ážááŒáá·áºá
- âááŒá¯ááºáá»ááŒááºážâ ááŒáááºážáá±á«ááºáá»á¬ážááẠáááºááŸááºá¡áá»áááºá¡ááœááºáž á¡ááŒá áºá¡áá»ááºáá»á¬ážá ááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááºááᯠáá±ážá áœááºážáááºá
- ááŒáááºážáá±á«ááºáá»á¬ážáá¯ááºááŒááºážáááŒá¬áá»áááºááᯠáááºááŸááºáá¬ážáá±á¬áºáááºáž áááºážááá¯á·ááᯠáááŒá¬áá á¡ááºááááºáá¯ááºáá¬ážááŒá®áž ááŒáááºážáá±á«ááºá¡á¬ážáá¯á¶ážááœáẠáááºáá±ááá·áºá¡áá¬áá»á¬áž áá«áááºááá¯ááºáá«áááºá
ááá¯á·áá±á¬ááºá áá»áááºáááºááŸá¯á¡ááœáẠKTable ááᯠKStream ááá¯á· ááŒááºááŒá±á¬ááºážáááºážááᯠáá±á·áá¬áá«áááºá
á .á.áá KStream ááŸáá·áº KTable á¡áá¬ááá¹áá¯áá»á¬ážááᯠáá»áááºáááºááŒááºážá
á¡áááºáž 4 ááœááºá KStream á¡áá¬ááá¹áá¯ááŸá áºáá¯ááᯠáá»áááºáááºááẠááœá±ážááœá±ážáá¬ážáááºá ááᯠáá»áœááºá¯ááºááá¯á·ááẠKTable ááŸáá·áº KStream ááᯠáááºááá¯á·áá»áááºáááºááááºááᯠáá±á·áá¬ááááºááŒá áºáá«áááºá á¡á±á¬ááºáá« ááá¯ážááŸááºážáá±á¬ á¡ááŒá±á¬ááºážááŒáá»ááºááŒá±á¬áá·áº áááºážááᯠááá¯á¡ááºááá¯ááºáá«áááºá KStream ááẠááŸááºáááºážá á®ážááŒá±á¬ááºážáá áºáá¯ááŒá áºááŒá®áž KTable ááẠááŸááºáááºážá¡ááºááááºá á®ážááŒá±á¬ááºážáá áºáá¯ááŒá áºáá±á¬áºáááºážá áá áºáá«áá áºáá¶ááœáẠáááºááẠKTable ááŸá¡ááºááááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááŸááºáááºážá á®ážááŒá±á¬ááºážááá¯á· áá±á¬ááºáááºá¡ááŒá±á¬ááºážá¡áá¬ááᯠáááºáá±á¬ááºážááá·áºááá¯áá±áááºá
á áá±á¬á·á¡áááºáá»áááºáž á¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááŸá¯ á¡áá±á¡ááœááºááá¯ááºáᬠá¡áá»ááºá¡áááºááᯠááá°ááŒá®áž áááºááá¯ááºáᬠáá¯ááºáááºážáá»á¬ážá¡ááœáẠá áá±á¬á·á¡áááºáá»áááºážááááºážáá»á¬ážááŸáá·áº áá±á«ááºážá ááºááá¯ááºááŒáá«á áá¯á·á á€áááºááŸá¬ ááá·áºááœááºááŸáááŒá®ážáá¬ážáá¯ááºááᯠáááŸáááẠáááºáá¯ááºáá±á¬ááºáááá·áºá¡áá¬ááŒá áºáááºá
- KTable á¡áá¬ááá¹áá¯áá áºáá¯ááᯠá áá±á¬á·ááŸááºáá¬á¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááŸá¯á¡áá±á¡ááœááºááá¯ááºáá¬áá±áá¬ááŒáá·áº KStream ááá¯á·ááŒá±á¬ááºážáá²ááŒá®ážáá±á¬áẠá€á áá±á¬á·ááŸááºáá¬áááºá¹áá±áááŸáá·áºáááºááá¯ááºááá·áºá ááºááŸá¯ááá¹áááá¹áááá¯ááœáŸááºááŒáá±á¬áá±á¬á·ááŒáá·áºá¡á á¬ážááá¯ážááŒááºážááŒáá·áºáá±á¬á·ááá¯á¡á á¬ážááá¯ážáá«á
- á áá±á¬á·á¡áááºáá»áááºážááááºážáá«áá±á¬ á¡ááŒá±á¬ááºážá¡áá¬áá áºáá¯á០áá±áá¬ááá¯áááºááá·áº KTable á¡áá¬áá áºáá¯ááᯠáááºáá®ážáá«á ဠKTable á¡áá áºááᯠá ááºááŸá¯ááá¹áá¡ááá¯áẠá¡áá»áá¯ážá¡á á¬ážááœá²áááºááŒá áºáááºá
- áá¯ááºáááºážááá¹áá¡ááá¯áẠá áá±á¬á·á¡áááºáá»áááºáž á¡áá±á¬ááºážá¡áááºááŒá¯áá¯ááºááŸá¯ á¡áá±á¡ááœááºááá¯ááºáᬠá¡áá»ááºá¡áááºáá»á¬ážááŸáá·áº ááááºážá¡ááºááááºáá»á¬ážááᯠáá»áááºáááºáá«á
á¡áᯠáá®áá¯ááºáá±á¬ááºáá»ááºá¡á á®á¡á á¥áºááᯠáááºááá¯á¡áá±á¬ááºá¡áááºáá±á¬áºááá² ááŒáá·áºáá¡á±á¬ááºá
KTable ááᯠKStream ááá¯á· ááŒá±á¬ááºážáá«á
KTable ááᯠKStream ááá¯á· ááŒá±á¬ááºážááẠá¡á±á¬ááºáá«ááá¯á·ááᯠáá¯ááºáá±á¬ááºááẠááá¯á¡ááºáá«áááºá
- KTable.toStream() áááºážáááºážááᯠáá±á«áºáá«á
- KStream.map áááºážáááºážááᯠáá±á«áºááá¯ááŒááºážááŒáá·áºá áá¯ááºáááºážá¡áááºááŒáá·áº áá±á¬á·ááᯠá¡á á¬ážááá¯ážááŒá®áž Windowed instance á០TransactionSummary á¡áá¬ááá¹áá¯ááᯠááŒááºáááºááá°áá«á
á€áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž á¡áá°ááᜠáá»áááºáááºáá¯ááºáá±á¬ááºáá«ááẠ(áá¯ááºááᯠááá¯áẠsrc/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Listing 5.8) ááœáẠááœá±á·ááŸáááá¯ááºáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠKStream.map áá¯ááºáá±á¬ááºáá»ááºááᯠáá¯ááºáá±á¬ááºáá±áá±á¬ááŒá±á¬áá·áºá áá»áááºáááºááŸá¯áá
áºáá¯ááœáẠá¡áá¯á¶ážááŒá¯áá±á¬á¡áá«ááœáẠááŒááºáá±ážáá¬ážáá±á¬ KStream ááá°áá¬ááᯠá¡ááá¯á¡áá»á±á¬áẠááŒááºáááºááá¯ááºážááŒááºáá¬ážáááºá
áá»áœááºá¯ááºááá¯á·ááẠááŒá±á¬ááºážáá²ááŒááºážáá¯ááºáááºážá ááºááᯠááŒá®ážááŒá±á¬ááºáá²á·ááŒá®ážá áá±á¬ááºááœáẠá áá±á¬á·ááºááááºážáááºááŸá¯áááºá¡ááœáẠKTable á¡áá¬ááá¹áá¯áá áºáá¯ááᯠáááºáá®ážááẠááá¯á¡ááºáá«áááºá
á áá±á¬á·ááááºážáá»á¬ážá¡ááœáẠKTable ááá¯áááºáá®ážááŒááºážá
áá¶áá±á¬ááºážáá±á¬ááºáá áœá¬á KTable á¡áá¬ááá¹áá¯áá áºáá¯áááºáá®ážááŒááºážááẠáá¯ááºáá áºááŒá±á¬ááºážáá¬áá°ááẠ(áá¯ááºááᯠsrc/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Listing 5.9) ááœáẠááœá±á·ááá¯ááºáá«áááºá
áááºáááºáá»á¬ážááœáẠSerdes ááá¯á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ááŒá±á¬áá·áº Serde á¡áá¬ááá¹áá¯áá»á¬ážááᯠáááºááŸááºáááºáááá¯á¡ááºááŒá±á¬ááºáž áááááŒá¯ááá·áºáááºá ááá¯á·á¡ááŒááºá á¡á
á±á¬áá¯á¶áž á
á¬áááºážáá±á¬ááºááŒááºážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áºá ááá¬ážááẠá¡á
ááá¯ááºážááœáẠááŸááºáááºážáá»á¬ážááŒáá·áº ááŒáá·áºáá±áá«áááºá
ááá¯áá»áœááºá¯ááºááá¯á·áááºáá±á¬ááºáá¯á¶ážá¡ááá·áº - áá»áááºáááºááŸá¯ááá¯á·áááºááœá¬ážááá¯ááºáááºá
ááœá±áá±ážááœá±áá° á¡áá±á¡ááœááºáá±áá¬ááŒáá·áº ááááºážá¡ááºááááºáá»á¬ážááᯠáá»áááºáááºááŒááºážá
áá»áááºáááºááŸá¯áá áºáá¯áááºáá®ážááẠááááºáá²áá«á áááºááá¯ááºáá¬á ááºááŸá¯áá¯ááºáááºážá¡ááœáẠá áá±á¬á·ááºááááºážáá»á¬ážáááŸááá±á¬á¡áá«ááœáẠáááºááẠjoin ááá¯á¡áá¯á¶ážááŒá¯áá«ááẠ(ááá¯á¡ááºáá±á¬áá¯ááºááᯠsrc/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Listing 5.10) ááœááºááœá±á·ááá¯ááºáá«áááºá
ဠleftJoin á¡á±á¬áºááá±áá¬ááẠá¡áá±á¬áºáá±ážááá¯ážááŸááºážáá«áááºá Chapter 4 ááŸá Join áá»á¬ážááŸáá·áºááá°áá² KStream-KTable Join ááá¯áá¯ááºáá±á¬ááºáá±á¬á¡áá«ááœáẠKTable ááœááºááá·áºááœááºážááŸá¯áá
áºáá¯áá¬ááŸááá±á¬ááŒá±á¬áá·áº JoinWindow áááºážáááºážááᯠá¡áá¯á¶ážáááŒá¯áá«á ááá¯ááá¯á·áá±á¬áá»áááºáááºááŸá¯ááẠá¡áá»áááºá¡ááá·áºá¡áááºáááŸááá«- ááŸááºáááºážááẠKTable ááœááºááŒá
áºá
á± ááá¯á·ááá¯áẠáá»ááºááœááºáá±áá«áááºá á¡ááá áááá¯á¶ážáá»á¯ááºáá»ááº- KTable á¡áá¬ááá¹áá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááŒá¬áá ááœááºážáá¶ááŒááºáááºáá¬ážáá±á¬ ááá¯ážáá¬ážááŸá¯áá±áá¬ááŒáá·áº KStream ááᯠááŒáœááºáá
á±ááá¯ááºáááºá
ááᯠáá»áœááºá¯ááºááá¯á·ááẠKStream á០á¡á á®á¡á ááºáá»á¬ážááᯠááŒáŸáá·áºáááºááẠááá¯ááá¯áááá±á¬ááºáá±á¬áááºážáááºážááᯠááŒáá·áºáá«áááºá
á .á.áá GlobalKTable á¡áá¬ááá¹áá¯áá»á¬áž
áááºááœá±á·ááŒááºáááá·áºá¡ááá¯ááºážá á¡á á®á¡á ááºá á®ážááŒá±á¬ááºážáá»á¬ážááᯠááŒáŸáá·áºáááºááẠááá¯á·ááá¯áẠáááºážááá¯á·ááœáẠá¡ááŒá±á¬ááºážá¡áá¬ááá·áºááẠááá¯á¡ááºáá«áááºá á¡áááºáž 4 ááœáẠKStream á¡áá¬ááá¹áá¯ááŸá áºáá¯ááŒá¬áž áá»áááºáááºááŸá¯áá»á¬ážááᯠáááºááŒááºáááŒá®áž ááááºá¡ááá¯ááºážááœáẠKStream ááŸáá·áº KTable áá áºáá¯ááŒá¬áž áá»áááºáááºááŸá¯ááᯠáááºááœá±á·ááŒááºáá²á·ááááºá á€ááá á¹á áááºá¡á¬ážáá¯á¶ážááœááºá áá±á¬á·áá»á¬ážááᯠá¡áá»áá¯ážá¡á á¬áž ááá¯á·ááá¯áẠáááºááá¯ážá¡áá áºáá áºáá¯ááá¯á· áá¯á¶áá±á¬áºááá·áºá¡áá« áá±áá¬á á®ážááŒá±á¬ááºážááᯠááŒááºáááºááá¯ááºážááŒá¬ážááẠááá¯á¡ááºáá«áááºá áá áºáá«áá áºáá¶ááœáẠááŒááºáááºááœá²áá±ááŒááºážááᯠá¡ááá¡áááºážáá¯ááºáá±á¬ááºááŒá®áž áá áºáá«áá áºáᶠKafka Streams ááẠáááºážááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºáááºá áá±á¬á·áá»á¬ážááŒá±á¬ááºážáá²ááŒá®áž ááŸááºáááºážáá»á¬ážááᯠááá¹áá¡áá áºáá»á¬ážááœáẠá¡áá¯á¶ážáááºááááºááŒá áºááŒá®ážá ááá¯á·ááá¯ááºáá«á áá»áááºáááºááŸá¯áááŒá áºááá¯ááºáá« (áááºážááᯠá¡áááºáž 4á á¡ááá¯ááºážááœá² 4.2.4 ááœáẠá¡áááºážááœá² XNUMX ááœáẠááœá±ážááœá±ážáá¬ážáááº)á
ááŒááºáááºááœá²áá±áá¬ááœáẠáá¯ááºáá»á ááááºááŸááááºá
ááŒááºáááºááá¯ááºážááŒá¬ážááŒááºážá¡ááœáẠáá¯ááºáá»á ááááºáá»á¬áž ááá¯á¡ááºááẠ- á¡áááºá¡áááºá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážáááºáá®ážááŒááºážá á¡ááŒá¬ážá¡ááŒá±á¬ááºážá¡áá¬áá áºáá¯ááœáẠáááºáá±áá±á¬áá±áá¬ááᯠááááºážáááºážááŒááºážá¡ááœáẠá¡ááá¯á¡áááºážá¡ááŒá áºáá¯ááºáá»á ááááºá á€á¡ááŒá±á¬ááºážá¡áá¬á០áá±ážáá¬ážááŒááºážááŸáá·áº á á¬áááºááŒááºážááá¯á·ááŒá±á¬áá·áº latency ááá¯ážáá¬ááŒááºážááá¯áááºáž ááá¯ááá¯áááºá ááá¯á·á¡ááŒááºá á¡ááœááºá¡ááŒááºáá áºáᯠááá¯á·ááá¯áẠá¡ááá¯ááºážá¡áá¬áá áºáá¯áááºááá¯á áá°ážáá±á«ááºážáá«áááºááẠááá¯á¡ááºáá«áá áá»áááºáááºááŸá¯áá»á¬ážááᯠáá»áááºáááºáááºá ááŸááºáááºážáá»á¬ážááᯠáá±á¬á·á¡áá áºáá»á¬ážááŒáá·áº ááŒá±áá¯á¶ááœá²áᬠááŒááºáááºááœá²ááŒááºážááŒááºážáá¯ááºáááºážá ááºááᯠáááºáá¶áá¯ááºáá±á¬ááºááááºááŒá áºáááºá
áá±ážáááºáá±á¬áá±áá¬á¡ááœá²áá»á¬ážááá¯á· áá»áááºáááºáá±áááºá
á¡áá»áá¯á·áá±á¬ááá á¹á áá»á¬ážááœááºá áá»áááºáááºáááá·áº ááá¯ážáá¬ážááŸá¯áá±áá¬ááá¬áááẠá¡áá±á¬áºáá±ážáá±ážáááºáá±á¬ááŒá±á¬áá·áº áá±á¬áºáá®á¡ááŒáá·áºá¡á á¯á¶ááẠnode áá áºáá¯á á®ááœáẠá¡ááœááºááá°ááá·áºááœááºážááá¯ááºáááºá á€áá²á·ááá¯á·áá±á¬á¡ááŒá±á¡áá±áá»á¬ážá¡ááœáẠKafka Streams ááẠGlobalKTable á¡áááºážááá¯áá±á¬ááºáá¶á·áá±ážáááºá
á¡ááá®áá±ážááŸááºážááẠáá±áá¬á¡á¬ážáá¯á¶ážááᯠnode áá áºáá¯á á®ááá¯á· áá¯á¶áá°ááœá¬ážáá¬ážáá±á¬ááŒá±á¬áá·áº GlobalKTable ááŒá áºáááºáá»á¬ážááẠáá°ážááŒá¬ážáá«áááºá áá±áá¬á¡á¬ážáá¯á¶ážááẠnode áá áºáá¯á á®ááœááºááŸááá±áá±á¬ááŒá±á¬áá·áºá áááºážááᯠpartitions á¡á¬ážáá¯á¶ážááœááºáááŸáááá¯ááºá á±áááºáááºááœáŸááºážáá±áá¬áá±á¬á·ááŒáá·áº event stream ááá¯á¡ááá¯ááºážááá¯ááºážááœá²áááºáááá¯á¡ááºáá«á GlobalKTable á¡áá¬ááá¹áá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá±á¬á·áá²á·áá»áááºáááºááŸá¯áá»á¬ážááá¯áááºáž ááŒá¯áá¯ááºááá¯ááºáááºá á€á¡ááºá¹áá«áááºááá¯ááŒáááẠááááºááá°áá¬áá»á¬ážáá²á០áá áºáá¯ááᯠááŒááºááœá¬ážááŒáá«á áá¯á·á
KStream á¡áá¬áá»á¬ážááᯠGlobalKTable á¡áá¬ááá¹áá¯áá»á¬ážááŸáá·áº áá»áááºáááºááŒááºážá
áá¯ááºáááœá² 5.3.2 ááœááºá áá»áœááºá¯ááºááá¯á·ááẠáááºáá°áá»á¬ážá០ááœá±áá²ááŒááºážááá¯ááºáᬠáááºážááá¯ážáá»á¬áž áá±á«ááºážá ááºážááŒááºážááᯠáá¯ááºáá±á¬ááºáá²á·áá«áááºá á€á á¯á ááºážááŸá¯áááááºáá»á¬ážááẠá€áá²á·ááá¯á· ááŒá áºáááº-
{customerId='074-09-3705', stockTicker='GUTM'}, 17
{customerId='037-34-5184', stockTicker='CORK'}, 16
á€ááááºáá»á¬ážááẠáááºááœááºáá»ááºááᯠááŒáá·áºáááºážáá±ážáá±á¬áºáááºáž áá±á¬ááºáááºáá¡áááºááŸáá·áº áá¯áá¹ááá®á¡áááºá¡ááŒáá·áºá¡á á¯á¶ááá¯áááºáž áá±á¬áºááŒáá«á ááá¯ááá¯á¡áá¯á¶ážáááºáááºááŒá áºáááºá áá±á¬ááºáááºá¡áááºááŸáá·áº áá¯áá¹ááá®á¡áááºááᯠáá±á«ááºážááá·áºáááºá áááºááẠáá¯á¶ááŸááºáá«áááºááŸá¯áá»á¬áž ááŒá¯áá¯ááºááá¯ááºáá±á¬áºáááºáž áá±á¬á·ááŒá±áá¯á¶ááœá²ááŒááºážááŸáá·áº ááŒááºáááºááá¯ááºážááŒá¬ážááŒááºážááŸá áºáá¯ááᯠááŒá¯áá¯ááºááẠááá¯á¡ááºáááºááŒá áºáááºá GlobalKTable ááŒáá·áº áááºááẠááá¯áá²á·ááá¯á·áá±á¬ áááºáááºááŸá¯áá¯ááºáá»á ááááºááᯠááŸá±á¬ááºááŸá¬ážááá¯ááºáááºá
áá«ááá¯áá¯ááºááá¯á·á Listing 5.11 á០countStream á¡áá¬ááá¹áá¯ááᯠá¡áá¯á¶ážááŒá¯áá«ááẠ(áááºááá¯ááºáá¬áá¯ááºááᯠsrc/main/java/bbejeck/chapter_5/GlobalKTableExample.java) ááŸáá·áº GlobalKTable á¡áá¬ááá¹áá¯ááŸá áºáá¯ááá¯á· áá»áááºáááºáá«á
áá«ááᯠá¡áááºá áá»áœááºáá±á¬áºááá¯á· ááœá±ážááœá±ážááŒá®ážááŒá®ááá¯á· áááºáááŒá±á¬áá±á¬á·áá«áá°ážá ááá¯á·áá±á¬áº toStream(.map function) ááŸá áá¯ááºááᯠáááºááá¯ááºá
á±áááºá¡ááœáẠinline lambda expression á¡á
á¬áž function object áá
áºáá¯ááá¯á· abstract áá¯ááºáá¬ážáááºááᯠáá»áœááºá¯ááºáááááŒá¯áááá«áááºá
áá±á¬ááºáá áºááá·áºááŸá¬ GlobalKTable á á¥ááá¬ááŸá áºáá¯ááᯠááŒá±áá¬áááºááŒá áºááẠ(ááŒáá¬ážááá·áºáá¯ááºááᯠááá¯áẠsrc/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (á á¬áááºáž 5.12) ááœáẠááœá±á·ááá¯ááºáá«áááºá
á á¬áááºážáá±á¬ááºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áá±á«ááºážá ááºá¡áááºáá»á¬ážááᯠáá±á¬áºááŒáá¬ážááŒá±á¬ááºáž áááááŒá¯áá«á
ááᯠáá»áœááºá¯ááºááá¯á·ááœáẠá¡á áááºá¡ááá¯ááºážá¡á¬ážáá¯á¶áž á¡áááºááá·áºááŒá áºáá±ááŒá®ááŒá áºá áá»ááºá¡áá¬á¡á¬ážáá¯á¶ážááŸá¬ áá»áááºáááºááŸá¯á¡ááœáẠáá¯ááºááá¯áá±ážáááºááŒá áºááẠ(ááá¯áẠsrc/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (á á¬áááºáž 5.13) ááœáẠááœá±á·ááá¯ááºáá«áááºá
á€áá¯ááºááœáẠáá°ážááœá²ááŸá
áºáá¯áá«áá±á¬áºáááºážá áááºážááá¯á·áááááºáá»á¬ážááᯠáá®ážááŒá¬ážá¡áá¯á¶ážáááŒá¯áá±á¬ááŒá±á¬áá·áº áááºážááá¯á·ááᯠáá¶ááŒáá¯ážááŒáá·áºáá»ááºááŸá±á¬ááºáá¬ážáááºá áá¯ááºáá±á¬ááºáá»ááºáá
áºáá¯áá¯á¶ážáá¡áá¯á¶ážááœááºááááºáá»á¬ážááá¯ááŒááááºá
á¡áááºáá±á¬áºááŒáá« Join áá¯ááºáá±á¬ááºáá»ááºááᯠáááºáá¯ááºáá±á¬ááºáá±á¬á¡áá« á€áá²á·ááá¯á·áá±á¬ááááºáá»á¬ážááᯠáááºáááŸááááá·áºáááº-
{customer='Barney, Smith' company="Exxon", transactions= 17}
á¡ááŸá áºáá¬áá áááŒá±á¬ááºážáá²áá±ááá·áº áá®ááááºááœá±á ááá¯ááŸááºážáá«áááºá
á¡áááºáž á ááá¯á· áá±ááœááºáá«áá áá»áááºáááºááŸá¯ á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá áœá¬ááᯠáááºááœá±á·ááŒááºááŒá®ážááŒá áºáááºá áááºážááá¯á·ááá¯ááá¬ážááœááºáá±á¬áºááŒáá¬ážáááºá á .áá á€ááá¬ážááẠKafka Stream áá¬ážááŸááºáž 4 á áá»áááºáááºááá¯ááºááŸá¯á áœááºážáááºáá»á¬ážááᯠáááºáááºá á±áá«áááºá áá±á¬ááºááœááºááŸáááŸá¯áá»á¬ážááœáẠáá áºáá¯áá¯ááŒá±á¬ááºážáá²ááœá¬ážááá¯ááºáááºá
á¡áá¬áá»á¬ážááᯠááŒá¯á¶áá¯á¶ááŒáá·áºáááºá á¡ááŒá±áá¶áá»á¬ážááᯠááŒááºáá»á¯ááºááŒáá·áºááŒáá«á
áá¯á·- áááºááẠáá±áááá¯ááºáᬠá¡ááŒá±á¡áá±áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááŒá
áºáááºá
á®ážááŒá±á¬ááºážáá»á¬áž (KStream) ááŸáá·áº áá¯ááºááœáŸáá·áºááŸá¯áá»á¬áž (KTable) ááᯠá¡ááºááááºáá¯ááºááá¯ááºáá«áááºá ááááºážá¡á¬ážááŒáá·áº áááºááœáŸááºážáá±áá¬á á¡ááœááºá¡á
á¬ážááẠá¡ááœááºáááŒá®ážáá«áá áááºááẠGlobalKTable á¡áá¬ááá¹áá¯ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá GlobalKTables ááẠKafka Streams application node áá
áºáá¯á
á®ááœáẠá¡ááá¯ááºážá¡á¬ážáá¯á¶ážááᯠáá°ážáá°áá¬ážááŒá®ážá áá±á¬á·ááẠáááºááá·áºá¡ááá¯ááºážááŸáá·áº áááºááá¯ááºáááºááŒá
áºá
á± áá±áá¬á¡á¬ážáá¯á¶ážáááŸáááá¯ááºááŒá±á¬ááºáž áá±áá»á¬á
á±áá«áááºá
ááá¯á·áá±á¬áẠKafka áá±á«ááºážá ááºá០áá±áá¬ááᯠá¡áá¯á¶ážáááŒá¯áá² ááŒááºáááºááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠááŒáá·áºááŸá¯ááá¯ááºáá±á¬ááŒá±á¬áá·áº Kafka Stream á¡ááºá¹áá«áááºááᯠáá»áœááºá¯ááºááá¯á· ááŒááºááœá±á·ááááºááŒá áºáááºá
á .á.á á áá±ážááŒááºážááá¯ááºáá±á¬ á¡ááŒá±á¡áá±
áá»áœááºá¯ááºááá¯á·ááẠááá¯ááºáá¶áá±á¬áºááŸáá·áº áááºáááºááá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬ááᯠáá¯ááºáá±á¬ááºááŒá®ážááŒá áºáᬠááááºáá»á¬ážááᯠááœááºááá¯ážáẠ(ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážááá¯ááºáᬠáááºááœááºáá»ááºáá»á¬ážá¡ááœááº) ááá¯á·ááá¯áẠáááºážááá¯á·á¡á¬áž áá±á«ááºážá ááºáá áºáᯠ(áá¯ááºáá¯ááºáá±ážáááºááœááºáá»ááºá¡ááœááº) ááœáẠáá±ážáá»ááŒá®ážááŒá áºáááºá ááááºáá»á¬ážááᯠáá±á«ááºážá ááºáá áºáá¯ááá¯á· áá±ážáá±á¬á¡áá«á áááºážááá¯á·ááᯠááŒáá·áºááŸá¯ááẠKafka á á¬ážáá¯á¶ážáá°ááᯠá¡áá¯á¶ážááŒá¯ááá«áááºá
á€á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážá០á¡áá»ááºá¡áááºáá»á¬ážááᯠáááºááŸá¯ááŒááºážááẠáá¯ááºáá¯á¶ážáá±á«áºáá¬áá±á¬ á¡ááŒááºá¡áá»áá¯ážá¡á á¬ážáá áºáá¯áᯠáá°áááá¯ááºáá«áááºá áá»áœááºá¯ááºááá¯á·á áááºááœááºáá»ááºáá»á¬ážá¡ááœááºá Wikipedia á០áá¯ááºáá¯á¶ážáá±á«áºáá¬áá±á¬ á¡ááŒááºá á¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááᯠáá¯á¶ážááá¯ááºáááº- â... á á¯á¶á ááºážááŸá¯áá áºáá¯á ááááºáá»á¬ážáá«ááŸááá±á¬ áá¯ááºááá¯ááºážááá¯ááºáá¬áá±áá¬áá±á·á áºá¡áá¬ááá¹áá¯áá áºáá¯á á¥ááá¬á¡á¬ážááŒáá·áºá áááºážááẠá¡áá±ážááŸáá±áá¬á áá±ááá¹áááááá¹áá°á ááá¯á·ááá¯áẠááá¬ážáá áºáá¯á á¡áááºážáá»á¬ážááŸáá·áº/ááá¯á·ááá¯áẠáá±á¬áºáá¶áá»á¬ážá á¡ááœá²áá áºáᯠááá¯á·ááá¯áẠááááºáá»á¬áž á á¯á ááºážááŸá¯ááŸáá áºááá·áº áááŸááá±á¬ á¡áá»ááºážáá»á¯ááºááá¬áž ááŒá áºááá¯ááºáááº" (https://en.wikipedia.org/wiki /materialized_view)á
Kafka Streams ááẠááá·áºá¡á¬áž ááá¯ááºáá¶áá±á¬áºá ááá¯ážááá¯ááºáá»á¬ážááœáẠá¡ááŒááºá¡ááŸááºáá±ážááŒááºážááŸá¯áá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±ááŒá®ážá á€áá¯ááºáá¯á¶ážáá±á«áºáá¬áá±á¬á¡ááŒááºáá»á¬ážááᯠááá¯ááºááá¯ááºáááºááŸá¯ááá¯ááºá á±áááºááŒá áºáááºá ááŒááºáááºá ááá¯ážááá¯á·áá±ážááŒááºážáá»ááºááẠáááºááŸá¯áááºáᬠáá¯ááºáá±á¬ááºááŸá¯ááŒá áºááŒá±á¬ááºáž ááŸááºáá¬ážáá¬ážááẠá¡áá±ážááŒá®ážáá«áááºá áááºážááẠááá·áºá¡ááá®áá±ážááŸááºážáá±áá¬ááᯠáá¯ááºáá±á¬ááºáá±áá»áááºááœáẠááá±á¬áºáá á¡ááŒá±á¡áá± ááœá²ááœá²áá±áááºááᯠá áá¯ážááááºá áá¬áááá¯ááŒá±á¬ááºáž áá±áá»á¬á á±áá«áááºá
ááá¯ááºáá¶ááá¯ááºá ááá¯ážááá¯ááºáá»á¬ážááᯠááá¯ááºááá¯ááºáá±ážááŒááºážááá¯ááºááŸá¯ááẠá¡áá±ážááŒá®ážáá«áááºá ááá¯ááá¯áááºááŸá¬ áááºááẠKafka áá¯á¶ážá áœá²áá°áá¶á០áá±áá¬ááᯠáŠážá áœá¬áááá°áá² ááá¯ááºááœááºá¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáááºáá®ážááá¯ááºáááºá áá±áá¬áááºáá¶áá±ážáá¬ážáááºáááá¯á¡ááºáá±á¬ááŒá±á¬áá·áºáááºážááẠapplication ááááá±á¬ááºááŸá¯ááá¯áááºážááá¯ážá á±áááºá
- áá±áá¬áá»á¬ážá áá±áá¬áá±áááŒá±á¬áá·áº áááºážááá¯á·ááᯠáá»ááºááŒááºá áœá¬ áááºáá±á¬ááºááá¯ááºáááºá
- ááŒááºáááá¯ááŸá±á¬ááºááŸá¯ááá¯á· ááá±ážáá¬ážáá±á¬ááŒá±á¬áá·áº áá±áá¬ááœá¬ážááŒááºážááᯠáááºááŸá¬ážáá«áááºá
áá«áááºážááá¯ááááá á±áá»ááºáá¬á áááºážáá²á·á¡áááá¡áá»ááºá áááºážáá²á·áá»áŸá±á¬ááºááœáŸá¬á¡ááœááºážá á¡ááŒá±á¡áá±ááœá±ááᯠááá¯ááºááá¯ááºáá±ážááŒááºážááá¯ááºáá«áááºá áááºážá ááá·áºá¡á¬ážáá±ážáá±á¬ á¡ááœáá·áºá¡áááºážáá»á¬ážááᯠááœááºááœááºáá²áá² áá±á¬áºááŒááááá«á Kafka á០áá±áá¬ááᯠáá¯á¶ážá áœá²ááŒá®áž á¡ááá®áá±ážááŸááºážá¡ááœáẠáá±áá¬áá±á·á áºááœáẠááŸááºáááºážáá»á¬áž ááááºážáááºážááá·áºá¡á á¬ážá áá°áá®áá±á¬ááááºááŒáá·áº ááŒááºáááºá ááá¯ážááá¯ááºáá»á¬ážááᯠáááºáá±ážááŒááºážááá¯ááºáá«áááºá ááá¯ááºáá¶ááá¯ááºá ááá¯ážááá¯ááºáá»á¬ážááá¯á· ááá¯ááºááá¯ááºáá±ážááŒááºážáá»ááºáá»á¬ážááẠáá¯ááºáááºážááẠ(á¡áá¯á¶ážááŒá¯áá°áááŸá) ááŸáá·áº áá±á¬á·ááºáá²áááºážáá«ážááẠ(ááááºáá»á¬ážááá¯ááááºážáááºážááẠáá±áá¬áá±á·á áºááá¬ážáá áºáá¯áááá¯á¡ááºáá«)á
á€á¡áááºážááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá±áá¶á¡áá»ááºá¡áááºážáááºááᯠááŒá¯á¶áá¯á¶áá¬ážááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áº ááá¯á¡áá»áááºááœáẠááá¯ááºáá¶ááá¯ááºá ááá¯ážááá¯ááºáá»á¬ážááŸáá·áº áááºáááºá á¡ááŒááºá¡ááŸááºáá±ážááŒááºážááœá±ážááœá±ážááŸá¯áá»á¬ážááᯠáá»ááºáá¬ážáá²á·áá«áááºá ááá¯á·áá±á¬áº á áááºááá°áá«ááŸáá·áº- á¡áááºáž 9 ááœáẠá¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºáá±ážááŒááºážááŸá¯áá»á¬ážááŒáá·áº ááá¯ážááŸááºážáá±á¬ áááºááŸáºáá¯ááºá¡ááá®áá±ážááŸááºážááᯠáááºáá®ážáá«áááºá á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºáá±ážááŒááºážááŸá¯áá»á¬ážááᯠááá¯ááºááŒáááºááŸáá·áº Kafka Streams á¡ááá®áá±ážááŸááºážáá»á¬ážááá¯á· áááºáááºáá²á·ááá¯á·ááá·áºááœááºážááá¯ááºáá¯á¶ááᯠáááºážááẠá€ááŸáá·áºááááºá¡áááºážáá»á¬ážá០ááá°áá¬á¡áá»áá¯á·ááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºáááºá
á¡áá»ááºážáá»á¯ááº
- KStream á¡áá¬ááá¹áá¯áá»á¬ážááẠáá±áá¬áá±á·á áºáá²ááá¯á· ááá·áºááœááºážááŸá¯áá»á¬ážááŸáá·áº ááŸáá¯ááºážááŸááºááá¯ááºáá±á¬ á¡ááŒá áºá¡áá»ááºáá»á¬ážá á á®ážááŒá±á¬ááºážáá»á¬ážááᯠááá¯ááºá á¬ážááŒá¯áááºá KTable á¡áá¬ááá¹áá¯áá»á¬ážááẠáá±áá¬áá±á·á áºááá¯á· á¡ááºááááºáá»á¬ážáá²á·ááá¯á· á¡ááºááááºá á®ážááŒá±á¬ááºážáá»á¬ážááᯠááá¯ááºá á¬ážááŒá¯áááºá KTable á¡áá¬ááá¹áá¯á á¡ááœááºá¡á á¬ážááẠááŒá®ážááœá¬ážááŒááºážáááŸááá«á ááŸááºáááºážáá±á¬ááºážáá»á¬ážááᯠá¡áá áºáá»á¬ážááŒáá·áº á¡á á¬ážááá¯ážáá«áááºá
- áá±á«ááºážá ááºážááŒááºážáá¯ááºáááºážáá»á¬ážá¡ááœáẠKTable á¡áá¬ááá¹áá¯áá»á¬áž ááá¯á¡ááºáá«áááºá
- Windowing áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á á á¯á ááºážáá¬ážáá±á¬ áá±áá¬áá»á¬ážááᯠá¡áá»áááºáá¯á¶ážáá»á¬ážá¡ááŒá Ạááá¯ááºážááŒá¬ážááá¯ááºáá«áááºá
- GlobalKTable á¡áá¬ááá¹áá¯áá»á¬ážá áá»á±ážáá°ážááŒá±á¬áá·áº áááºááẠá¡ááá¯ááºážááœá²ááŒááºážáááœá²ááŒá¬ážáá² á¡ááá®áá±ážááŸááºážááŸá áááºááá·áºáá±áá¬ááœááºáááᯠáááºááœáŸááºážáá±áá¬ááᯠáááºáááºáá±á¬ááºááá¯ááºáááºá
- KStreamá KTable ááŸáá·áº GlobalKTable á¡áá¬ááá¹áá¯áá»á¬ážááŒá¬áž áá»áááºáááºááŸá¯áá»á¬áž ááŒá áºááá¯ááºáááºá
ááá¯á¡áá»áááºá¡ááá áá»áœááºá¯ááºááá¯á·ááẠá¡ááá·áºááŒáá·áº KStream DSL ááᯠá¡áá¯á¶ážááŒá¯á Kafka Stream á¡ááá®áá±ážááŸááºážáá»á¬ážááᯠáááºáá±á¬ááºááẠá¡á¬áá¯á¶á áá¯ááºáá¬ážáá«áááºá á¡ááá·áºááŒáá·áºáá»ááºážáááºáááºážá ááá·áºá¡á¬áž áááºáááºááŒá®áž áááá»áá±á¬ áááá¯ááááºáá»á¬ážááᯠáááºáá®ážááá¯ááºáá±á¬áºáááºáž áááºážááá¯á¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº á¡áá±ážá¡áá°ááᯠááá¯ááºá á¬ážááŒá¯áááºá DSL KStream ááŒáá·áº á¡áá¯ááºáá¯ááºááŒááºážááẠááááºážáá»á¯ááºááŸá¯á¡ááá¯ááºážá¡áá¬ááᯠáá»áŸá±á¬á·áá»ááŒááºážááŒáá·áº ááá·áºáá¯ááºá áááá»ááŸá¯ááᯠááá¯ážááŒáá·áºá á±áááºá áá±á¬ááºá¡áááºážááœááºá á¡ááá·áºáááá·áº handler node API ááá¯ááŒáá·áºááŸá¯ááŒá®áž á¡ááŒá¬ážá¡áá±ážá¡áá°áá»á¬ážááᯠá ááºážááŒáá·áºáá«áááºá áááá¯ááááºáá»á¬ážááẠááááºáááẠááá¯ááá¯ááŸááºááŒá¬áááºááŒá áºááŒá®ážá ááá¯á·áá±á¬áº áá»áœááºá¯ááºááá¯á· ááá¯á¡ááºááá·áº áááºááá·áº handler node áááá¯áá®ážáá«ážááᯠáááºáá®ážááá¯ááºáá«áááºá
â á
á¬á¡á¯ááºá¡ááŒá±á¬ááºážá¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠááœáẠááŒáá·áºááŸá¯ááá¯ááºáá«áááºá
â áá°ááœááºáá¯á¶ážááŒá®áž Habrozhiteli 25% áá»áŸá±á¬á·á á»á±ážá¡ááœáẠ- Kafka áá»á±á¬ááºážáá»á¬áž
â á
á¬á¡á¯ááºá á
áá¹áá°áá¬ážááŸááºážá¡ááœáẠááœá±áá±ážáá»á±ááŒá®ážáá±á¬ááºá á¡á®áááºáááœááºáá
áºá
á¬á¡á¯ááºáá
áºá¡á¯ááºááᯠá¡á®ážáá±ážááºááŒáá·áº áá±ážááá¯á·áááºááŒá
áºáááºá
source: www.habr.com