αααααααα α₯.α£. ααΆααααααΌααααα»ααα·αααααα·ααααα·ααΆααααα’α½α
αα αααα»ααααααααα ααΎαααΉαααααααααααααααααααααααααααααα»ααα Kafka Stream α αα αΌααααααααααααααΎαααΆααααααααααααα·αααααΆαααΌα ααΆαααααααα Kafka ααααααΈα:
- ααΆααααααΎα topology ααααΎαααΆα;
- ααΆαααααΎααααΆαααααααα αααα»ααααααα·ααΈααααααΈα;
- α’αα»ααααααΆααααααΆααααααααΈααα·αααααα;
- ααΆααα»αααααΆαααΆαααααααΈαααααΉαααα·ααΆααα (KStream) αα·αααααααΈαα’αΆααααα (KTable)α
αα αααα»αα§ααΆα αααααΆααααααααΎαααΉαααΆαααααΆαα»ααΆααα’αααααααααΆαα½αααααΆα α’αααβααβααΉαβαααβα’αααΈ Windowing αααβααΆβαα»αααΆαβααβα’ααα αΆαααβαα½αβαααβααβαααααα·ααΈβααααααΈαα α§ααΆα αααααααΌαααααααΎαααΉαααΆααΆαααΌαααα»αααααΆαααααα½αα
α₯.α£.α‘. ααΆααααααΌααααα»αααΆααααααΆαα αα»αααΆααα·αααα§ααααΆα αααα
ααΆααααααΌααααα»α αα·αααΆαααΆααααΆαααα»αααΊααΆα§αααααααααΆαααα αααααααΎααΆαααΆαα½ααα·ααααααααααααΈαα ααΆαβαα·αα·αααβααΎβαααααααααΆβαα»ααααβαααβαα½αααβααααΌαβααΆαβααα½αβα αααΎαβααβαα·αβαααααααααΆααα ααΎααααΈααΆαααααααααΆαααααααααΈαα·αααααα α αΆαααΆα αααααΌαααΆααααΆαααα»α αα·ααααα αΌαααααΆα
αααα»αα§ααΆα αααααα α’αααααΉαααΆαααααααααααΆααααααα’ααααααα½ααα½ααααα αααααααΌαααΆαααΆαααΆαααα·ααΆαααααΆααααααΆαα αα»ααααααααα»αα αα»ααα αααα»αα§ααααΆα αααααα½αα ααα½αα ααΆαα·ααα α’αααα αΆααα’αΆααααααααΎαααα»αα αα»αααΆααααααΆααααααΆαααΆααααααΆαα αα»αα αααΎαααΆααααα αααα»αα§ααααΆα ααααααΈαα½ααα
ααΆααααααΌααααα»αααααααααΉααααααΌαα±ααααΆαααα αΆααα½αα ααα½αααΆααααααααΎααααΈαααααααα·αααααααα ααΆαααααααααα ααααΆα (αα·ααΆααααα»ααααααΌαα )α
- αααααΎααααααααα’ααααΎαααααΆααααααααααααααααΆαααααααΆααα½αααΌαααΆαα αα»ααα α ααΎαααΉαααααΌαααΌααααααΈααααα»αααααααα 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 ααααααα αΆαααΈα’αααΈαααααΎααααααα ααΆαα topology ααααα½αααααααΆααα’ααααα½α α αΎαα
α₯α‘αΌαααα ααΌααααα‘ααααΎαααΌααααααΆαα topology ααα (ααΆα’αΆα
ααααΌαααΆαααααΎααα
αααα»αα―αααΆα src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (ααΆααααααΈ 5.2)α
αααααΌααααααΆααααααα±ααααααΌαααΆααααααΆαααααααΆαααααΈααααααΆ αα·αααα·ααΆααααααααααααααΆααααααΆαα’αα»αααααααα»ααα½αααΆα
αααΎαα α’αααα’αΆα
αααααΆααααΎαα’αααΈααααΈαα
αααα»ααααΆαααΆααααααααααΌααααα·ααΈ builder.streamα ααααααααααααα enum AutoOffsetReset.EARLIEST (ααΆααααΆαα
α»ααααααααα) αααααααααααααααΎαα·ααΈααΆααααα Consumed.withOffsetResetPolicyα ααααααααΆαααΆαααααα’αΆα
ααααΌαααΆαααααΎααΎααααΈαααααΆαααα»αααααΆααααααααααα‘αΎααα·αα’α»α αααα·ααααααΆαα KStream α¬ KTable ααΈαα½αα α αΎαααΆαα’αΆαα·ααΆαααΎαααααΎααααααα‘αΎααα·αα’α»α αααα·αααΈααΆαααααααα
ααΆααααααααα
GroupByKey αα·α GroupBy
α ααα»α αααααΆαα KStream ααΆααα·ααΈααΆαααααααΈααααααΆααααΆααααΆαααα»αα GroupByKey αα·α GroupBy α ααΆααααΈααααα‘αα KGroupedTable ααΌα ααααα’ααααααα ααααΆαααααααΆααΎααΆααα»αααααΆαααΆααα½αααΆαα·ααααααΆααααΌαααααΎαα½αααΆ?
αα·ααΈααΆααααα GroupByKey ααααΌαααΆαααααΎαα αααααααααα αααα»α KStream αα·ααααα α αΎαααααΆαααααα»α ααα "ααΆαααΆαααΆααααα ααα‘αΎααα·α" αα·αααααΌαααΆααααααααα
αα·ααΈααΆααααα GroupBy ααααααααΆα’αααααΆαααααΆααααααΌαααΌαααααΆααααΆαααα»α ααΌα αααααααααΆαα ααα ααααααΌαααΆαααααααα αα·αα ααΆαβα’αα»ααααβααΆαβα αΌααα½α ααΆαβαα½αβαααα αΌαβααααΆβα
ααα ααααΈααααααα αα αααααΆαααα’αΆα ααααΎαα ααΆα α’ααααα½αααααααΎ GroupByKey ααΆααΆα GroupByα
ααΆα αααΆααααΆααααΌαα’αααΈααα 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 αααα αΆαααααΆα ααααα αΌααα·ααααααα ααΌα αααα’αααα’αΆα ααΎααα»αααΈααΈαααααααΎαααΆαααΊααΆααααααΆααα
α₯α‘αΌαααα ααΎαααΆαααΆααααααΉααααΆαα
αααΆααα’αααΈαα
ααΆααααααααααααααΎαααΆααα»αααΈααΈαααα ααΎαα’αΆα
ααΆααα
ααααΌααααααααααααΆ (α’αααααΉαααΎαααΆαα
αααα»αα―αααΆα src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (ααΆαα
α»ααααααΈ 5.4) .
αααααα·ααΈα αΆααααααΎααααααΆαα’αααQueueαααα αααααΊααΆααααα»ααααΆαααααα½ααααααΆα’αΆααΆααααααααααΆαα java.util.TreeSet αααααααΌαααΆαααααΎααΎααααΈααΆαααΆααααααα N ααααΌαααΆαααααΆααα α»αααααΆαα αα»ααααααΆααα½αααΌαα
α’αααααΆαααΎαααΆαα α
ααΆαααα»αααα αα·α mapValues ββαα½α
α αΎα ααΌα
ααααααΎαααΉααα·αα
αΌααα
αααα»αααΆαα (ααΎααααα»αα α
αα·ααΈααΆααααα KTable.toStream ααΈααααααα·ααΈααΆααααα KTable.print ααααΌαααΆαααα·ααα)α ααα»ααααα’ααααα·αααΆααααΆαααΎααααα KTable αα aggregate() αα
α‘αΎααα ααΌα
ααααααΎαααΉαα
αααΆααααααααα·α
ααΎααααΈαα·ααΆααααΆα’αααΈααΆα
ααΌα αααα’αααα αα αΆα α’αααΈαααααααΎα±αα KTable ααΆαααΆααα»ααααααααααΆαααααΊααΆ αααααααααΆαααααΆαααααΆααα α»α ααΌα ααααΆααααΌαααΆαααα αΆαααα»αααΆααΆααΆαααααΎαα αα α»ααααααααΆαα KTable αααα½αααΆαα»α αΆααααΆαα½αααΉαααΆαα»ααααΈα ααΆααααααΌααααα»αααΎαα‘αΎαααΆαααααααααααααααΆα αααααααααΆα α»αααααααααα»ααααααΆααααααΉαααΌα ααααΆααααΌαααΆααααααΌααααα»αα αα αααααααααααααααΆααααα ααΆααααΌαααΆααααααααα ααααΆαα FixedSizePriorityQueue αααααααΎ adder (αααΆαααΆααααααααΈααΈααααα»αααΆαα α method ααα»α) ααα»ααααααααα·αααΎ record ααααααααααΆααα½α α αΎαααΆαα½αααΉα key ααΌα ααααΆααα record α αΆααααααΌαααΆαααα αααααααααΎ subtractor (αααΆαααΆααααααααΈααΈαα αααα»α ααΆαα α αα·ααΈααΆαααααααα»α) α
αααααΆααααααΆα’ααααααααΌααααα»αααααααΎα FixedSizePriorityQueue αα·αααα»ααααααααΆααα’αααααααααΎαααα½α ααα»αααααααααΆαα»αααααΌαααααα·ααΆαααααααααααΆαα αα»αααααα½αααΌαααΆαα αααΎααααα»αα ααΆαα»α αΌαααΈαα½ααααΆαα ααα½αααα»αααααΆαα αα»ααααααΆαααααα αΌααααααααααααα KTable ααΉααααααα±ααα’αααααΌαααααααΆαα’αααΈααΆαα αα»ααααααααα»αα αα»αααΆααααα αα α»ααααααααααΌαααΆααα½αααΌαα αααΎαααΆααα ααααα·ααααααΌαα±ααααΆαααΆαααααα½αααααα½αααααΆαααααΎαα αα α»ααααααααΆαααΈαα½ααα‘αΎαα
ααΎαααΆααααααααΎααΏαααααΆααααΈαα
- αααααβαααα»αβαααα»α KTable αααβααΌαααβααΌαα ;
- α’αα»ααααααααα·ααααα·ααΆααααααΆαααααααααααΌα ααΆααΆααααααΌααααα»α αα·αααΆααααααΌααααα»αααΎααααααααααΆαααΆααααΆαααα»αααΆαααααα
ααΆαααΉαααΈααααα’αα»ααααααααα·ααααα·ααΆαααΆαααααααΆαααΆααααααΆαααααα»αααΆααααααΉαααΈα’αααααααααα·αααααααααααααΆααααΈααΆαααααααααα·ααΈ Kafka Stream αα·αααΆααααααΉαα’αααΈααααααΆααααααΆαααα»αα
ααΎαααααΆαααΆαααααΌαααααααα·αααααΆααααα½αα ααα½ααααααΆααα·ααΆααααΆααΈαα»ααααααα»αααααα αααα αα αααα»αααααΌαααΈ 4 ααΎαααΆααα·ααΆααααΆα’αααΈαααααααααΆαα’ααα±αα ααααααα α»α αααααααα»ααααααααΆαααΆααααααΆαααααααΆαααααααα·ααΈααααΆαα α§ααΆα αααααΈαα½ααα αααα»αααααΌαααα ααΆααααα αΆαα±ααααΎαααΈααΌαα ααα»αααααααααΌαααααΆαααΆαααΆααααααΆααααΆαα β ααΆα’αα»ααααΆαα±ααα’αααααΆαααΆαααααααΆααααα’αααααΆαααΎααα½α α αΎαα ααΆαα αΌαααααΎαααα»αααααααααααΆαααΆααααααΆαααααααααΆααααααααΎα±αααααααα·ααΈααΆααααααααΎαααΆα αα·ααααααΉαααα α»αα
αα αααα’αα»ααααααααα·ααααα·ααΆααααααΌα α¬αααααΌααααα»αααΆαα½α α’αααααααΌααααααααΆαααααααααααα αΆαααααα ααααα·ααα·ααααΆααα½α αα·αααΆααααααΌααααα»ααααα‘ααααααα» KTable α αΎα KTable ααααΎαααααααααα»ααααααααα ααΎααααΈαααα½αααααααα αΆααααΆαα½αααααΈα ααΌα αααα’αααααΆαααΎαα αΎα αα·ααααααΆααααΆαα’αΆαααααααΆααα’ααααααΌαααΆααααααΌαααΆαααααααα α αΎααααααΊααααΆααααΆαα ααΈαααααααααα·ααααα·ααΆααααααΌααααα»αααααΌαααΆααα ααΆα‘αΎαααΎααααΈαααααΎαααααααΆαααααααα ααααα·αααΎα’ααααα·αα’αα»ααααααααααΌαααααΆααα KTable ααΉααααααΌαααααααααα»α αα·αααααααααα»αα
αααααΆαα ααΎαααΉααα·αα·αααααΎαααααα·ααααα·ααΆαααΌα ααΆααΆααααααΌααααα»ααααα»αααααααααΆααααΆααααΆαα½α - αααααα α ααΆ ααααα·ααααα·ααΆααααα’α½α α
α₯.α£.α’. ααααα·ααααα·ααΆααααα’α½α
αα αααα»αααααααα»α ααΎαααΆαααααΆαα’αααΈααΆααααα·ααααα·α αα·αααΆαααΌααααα αΌαααααΆα αααααα·ααΈαααααΆαα’αα»ααααααΆααααααΆαα αα»αααΆαααααααααΆααααααααααααααΆααααααΌααααα»αααααΆαα αα»αα ααα½αααααΆααααααααΌαααΆααα½αααΌαα αααΎααααα»ααα ααΎααΈααααΆαααααΌαααααΆααα
αα½αααΆαααΆαααΌαααα»ααααα αα·αααΆαααΌαααα»αααααααααΊα αΆαααΆα αα α αΎααααααααα’αααααααΌαααααΎααααα·ααααα·ααΆααααααα»ααααααααααααααα»αααααα α§ααΆα ααα ααααΆα ααα½αααααα·ααααα·ααΆαααααΌαααααΆααααααΌαααΆαααααΎα‘αΎαααΆαα½αααΆαα αα»ααααααααα»αα αα»αααΆααααΆαααα½ααααα»ααααααα 10 ααΆααΈα α»ααααααα α¬ααΎα’αααααααΎααααΆααααα»ααααΆαααΆααααΆαα α»α ααΎααααΆααααααΆαααΆαα·αααααααααααΈαααα»ααααααα 15 ααΆααΈα α»ααααααα αααααα·ααΈαα½αα’αΆα α’αα»ααααααααα·ααααα·ααΆαααααααα αααΎααα ααα»ααααααΆαα½αααΉααααααααααα’αα»ααααα αααααααααααααααααΆααααααΆαα (αααα’α½α αααααααΆ)α
ααΆααααααα·ααααα·ααΆαααααΌαααααΆαααααα’ααααα·α
αα αααα»αα§ααΆα ααααααααΆαα ααΎαααΉαααΆαααΆαααααα·ααααα·ααΆαααΆαα αα»ααα ααΌααΆααααΆαα·αααααααΆα αααΎα - ααΆααα’αααααΆααα α¬α’αααα α·ααααααααα»αα»ααααααααααΆαααα
ααΆαα ααα»ααααΈααααα’αΆα ααΎαααΆααααααΆααααΆαααΆαααΆααααα αα½ααααα»αα αααααα½αααααΊααααΌαααΉαααΈα’αααΈαααα’αααααΉαααΆαααΈααααΆααααα»ααα·α/αααα ααααα·αααΎα’ααααααααα αα·αα’ααααα·αα·ααααααααα»αααααααΆαααΆαααααααΎαααΎαα±ααΆα ααΆααα ααα»αααααα»αααΆαααααΎααΆααα»αααααΆααααααααααα½αααα ααΌαα ααα»ααΈααΈαααΊααΆαα ααααΎααααααΆαααα’αΆα ααΎαααΆαααααΆααα½αααΌαααΆααααα»ααα»αα αααΆααα ααΎααααΈααααΎααΌα ααααααΆα α’αααααΉαααααΌααα·ααΆαααΆαααΆααααΆααααααααΆααααΆαααΎαα‘αΎαααααΆααααααααααΆαα½αααΉαααα ααααΈαααααΆαααααααΆαααααΆαααα
ααΆαααΆαααΆαααααααααΆαααα αΆαααΌα ααΆααααααα
- αααααΎαααααααΈααααααΆααααΆαα’αΆαααΈαααααΆαααααΆαα αα»α-ααααα·ααααα·ααΆα;
- ααΆαααααα»ααααααααααΆα αΌααααααααααααΆααα’ααααα·α αα·ααα·αα·ααααααααΆααΆαα αα»αα ααΆαβα α βαα βαααα»αβααΆαβαα·ααΈααΆαααααβαααα‘ααβα§ααΆα αααβααβααααΆαα KGroupedStream;
- αα·ααΈααΆααααα KGroupedStream.windowedBy αααα‘ααααΆαααααααΈααα·αααααααααααααααα αα·αααΌαααααααΆ αααα’αα»ααααΆαα±ααααΆαααΆααααααΌααααα»αααΆααααα’α½α α α’αΆαααααααΎαααααααααα’α½α ααΆαα TimeWindowedKStream α¬ SessionWindowedKStream ααααΌαααΆααααα‘ααα
- α ααα½αααααα·ααααα·ααΆααααααΆααααααα·ααααα·ααΆαααα»αα ααα αΌααα·ααααααααΆααααα’α½α αααααααΆααΎαααααααααΆααΆααααΆαααα½αααααΌαααΆααααα αααα»αααααΈαα αααα»αα ααα½αααααααα¬ααα
- ααααααααααααα αααααΆααα α¬αααααΌαααΆαα αα»αααΌαααα‘α»ααααα’αα·ααααα
topology αααααααα·ααΈαααααΊααΆαααα ααα»ααααααΌαααΆαα αααΆααααΆααααααααΆααΉαααΆαααααααααα ααΌααααα‘ααααΎαααΌαααα α₯.α‘α‘.
αααααΆαα ααΎαααΉααα·αα·αααααΎααα»αααΆαααααααα·ααααα·ααΆααααα’α½α αα·αααΌααααααααΌαααααΆα
αααααααααα’α½α
ααΆααααα’α½α ααΈαααααααα αααα»αααααααΈα Kafka:
- ααααααααα»α;
- "αα½α" (αα½α);
- αα’α·α/αααα
ααΎαα½αααΆαααααααΌαααααΎαααΎαα’αΆαααααααΎαααααΌαααΆαα’αΆααΈαααααααααα’αααα ααααΆαααα·αααΌααα αα·ααααααααΌαααΆαααααααααααααΆ ααααααααααα·αααΌααααααααΌαααΆααααααααααααααααΆαα’αααααααΎααααΆαα - ααααααααααααααααΌαααΆααααααααα―ααααααΆααΎα’αααααααΎααααΆαααααααααα»ααααΆα ααΏαα ααααααααααΌαα αα αΆαααΊααΆαααααααααα’α½α ααΆααα’ααααΊααα’ααααΎααααΆααΆαααα·α αααα/αααααααΆααααΆαα» αα·ααααααααααααααααααα
αααααΆαααα ααΎαα’αα»αααα topology ααααααΎαααΆαα½αααΉααααααααααα’α½α ααΈαα½ααα ααΌαααααααααΉαααααΌαααΆααααααα±αααααα αααα»αα§ααΆα αααααααΌαααα»ααααα αααααΆαααααααααααααααααααααα’α½α ααααΆαα’αααΈααΉαααααΆααααααΌαααααΎααααααααααααααααααα·ααααα·ααΆααααα’α½α α
αααα’α½α αααα
αααα’α½α βααααβααΊβαα»αβααααΆβααααΆααβααΈβααααααβαααα’α½α βαααααβαααα αα½αααΆααααΌαααΆαααααααα·αα αααΎαααΆααααααααΆααΌα ααΆαααααααΆαααααα’αααααααΎααααΆαα (α¬αααααααΆαααααα’αααααΆααααα’αααα ααααΆαααΆα)α αα·αααΌααααααααΌαααΆαααααααααααααααααααΆαα’αααααα
ααΌαααΆα 5.12 αααα αΆαααΈαααα·ααααααα’α½α ααααα ααααααΌα ααΆαααΉααααα αΌαααααΆααΆαα½ααααααα ααΆααααααααααααΆα α αΎααααααα ααΆαααααΆαααΉαααΆα ααααα‘ααααΈααααΆ αααααααΆααααΎααΆαααααααααααΌαααααΆαα’αααααα αα·αααΌααααααΊααα’ααααΎαααααααΆαααααα’αααααααΎ ααα»ααααααααΎααααΆααΆαααα·α αααα/αααααααΆααΈααΆαα»ααΎααααΈαααααααΆααΎααααααΆαααααΆαααααα·αααα·ααααααΆαα»α
ααΆαααααΎαα·αααΌααααααΎααααΈααΆαααΆαααααα·ααααα·ααΆαααΆαα αα»α
αααααααΎαα·αααΌααααααΎααααΈα αΆααααααααααΆαα’αααΈααααα·ααααα·ααΆαααααΌαααααΆααα ααΆαα’αα»αααααααααα’α½α ααααααααΌαααΆααααα αΆααα αααα»ααααααΈ 5.5 (αααα’αΆα ααααΌαααΆαααααΎααα αααα»α src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java)α
α’αααααΆαααΎαααααα·ααααα·ααΆαααΆαα
αααΎααα
αααα»α topology ααααα½α
α αΎα ααΌα
αααααα·αα
αΆαααΆα
αααΎααα½αααΆααααααααα
ααΈαααααα ααα»ααααααααΆαααΆαα»ααααΈαααΆα
αααΎααα
ααΈαααααααα αααα₯α‘αΌααααααΎαααΉααα·ααΆααααΆα
αααα»αααΆαα½ααααααααα·ααααα·ααΆαααΆααααααΆα’αα»ααααααααααααααααα·ααααα·ααΆααααααΌααααα»ααα½αα ααα½α (ααΆααααααΌααααα»α ααΆαααααα½αααααα½α α¬ααΆαα)α α’αααβα’αΆα βα’αα»ααααβααΆαβαααααΌαβαααα»αβαααβα ααα½αβααα»αβαααβαααα»αβααααΎαααΆα α¬βααΆαβααΌαβαααα αΌαβαααα’α½α αααβαα·αβαααβαααααααααΆβααααΈβαααα»αβα αααααβαααβααααΆβαααβααΆαβαααααΆααα
αααααΌααα αααα»ααααααΈ 5.5 ααΆααα ααα½αααααα·ααααα·ααΆααα αααα»ααα·αααΌααααα αα αααα»αααΌαααα 5.13 αααααααΆαααΆαααααααααΌαααΆααα·ααΆαααΆααα αΆααα
αααααΆαα α αα ααΆαα windowedBy(SessionWindows.with(twentySeconds)) αα αΌαααα(αααααααΆαααΆααΈ)) ααΎααααααΎααα·αααΌαααααα½ααααααΆαα ααααααααα’ααααα 20 αα·ααΆααΈ αα·αα αααααααααααα 15 ααΆααΈα α ααααααααααααα 20 αα·ααΆααΈααΆααααααΆαααααα·ααΈααΉααα½ααααα αΌαααΆαα»ααΆαα½ααααααααααααα»ααααααα 20 αα·ααΆααΈααααΆααααα αα α¬ααΆαα αΆααααααΎααααααααα αα α»αααααααα αααα»ααααααα αα α»αααααα (ααααα)α
αααααΆαααα ααΎααααααΆααααΆααΎααααα·ααααα·ααΆααααααΌααααα»αααΆαα½ααααα
αΆαααΆα
αααααΌαα’αα»αααααα
αααα»ααα·αααΌαααα - αααα»αααααΈααα ααΆααα ααααα·αααΎααΆαα»α
αΌαααααΆαααα
ααΆααααα
αααα’α½α
α’ααααα (αααααααΆαα½αααααααΆααΆαααα·α
αααα/αααααααΆ) αααααα·ααΈααΉααααααΎαααααααααΈαα½αα α
αααααααααααααΆαα»αααΆααααααΆαααααΆαααααααααΆααα
ααα½ααααααααΆααΆααααΆαααα½α α αΎαα’αα»ααααΆαα±ααααΆααα·ααααααααΊααααΆααααααΆααααααΉαααΎαααΈααααααα’ααααααααααααα ααα»αααααα
ααα’αΆα
ααααΆααααΆαα ααΎαααΈααα ααΆαα
αΆααααααΎα αα·αα
α»ααααα
ααααααααααααΈαααααΎαα
ααααΈααΆααααα
αΌαααααΆααααΌαααααΆαα
ααΉαααΆαααα·α
αααα/αααααααΆααααΌααααα»α αα·αα
α»αααααααααα’ααα
ααΌααααα‘ααααΎαααΆαα»αα½αα ααα½αααΈαα·ααΈααΆαααααααΆαα ααΎααααΈααΎαααΈαααααααααααααααΎαααΆα (ααΆααΆα 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: α α :α‘α₯ .
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α
ααΈα’αααΈαααααΆααα·αααααΆαα αααα»ααααααααα ααΆααΊααΆαααααα αα αΆα nuances ααααΆαααααΌα ααΆαααααα:
- αααααα·ααααααΆαα·αααΌααα ααααααα αααααααααααααα½αααααΌαααΆααααααααααααααααΆααααα»ααααααααααααΆααααααα±αα;
- ααΆααααααααΆααΆαααα·α αααα/αααααααΆαα αααα»ααα·αααααααααααααΆααΎααααΉαααα·ααΆαααααααααα·ααα αααα»ααααααααααΆαααααΆαα α¬α’αα‘α»αααααααααα
αααααΆααααΎαααΉααα·ααΆααααΆα’αααΈαααααααααααα’α½α αααααΆαα - αααα’α½α "αα½αααα" α
αααα’α½α "αα½αααα"
αααα’α½α ααααα½ααααα αΆααααααααΉαααα·ααΆααααααααααΆαααααα»αααααααααΆααααΆααααΆαα½αα αααααααΆα’αααααααΌαα αΆααααααααα·ααααα·ααΆαααΆαα αα»αααΆααα’αααααααααα»αα αα»αααΆααααΆαααααααΆαα 20 αα·ααΆααΈ ααΌα ααααα’ααααααααΌαααααΉαααα·ααΆαααααΆααα’αααααα»αα’αα‘α»αααααααα αα α α»ααααα ααααα αααααααα 20 αα·ααΆααΈ αααα’α½α αα·ααα»ααα·α α αΎαααααΆααααΈαα α αααααααααααααα 20 αα·ααΆααΈααααΈα ααΌαααΆα 5.14 αααα αΆαααΈααααΆαααΆααααα
ααΌα
αααα’αααα’αΆα
ααΎα ααααΉαααα·ααΆαααααΆααα’αααααααα½αααΆααααα»ααααααα 20 αα·ααΆααΈα
α»ααααααααααΌαααΆααα½ααααα
αΌααα
αααα»ααααα’α½α
α αα
α
α»ααααα
ααααααααααααα αααα’α½α
ααααΈαα½αααααΌαααΆααααααΎαα
ααΆαα α»ααααααΈ 5.6 αααα αΆαααΌαααααααα αΆαααΈααΆαααααΎααααΆαααα·αααΌαα½ααααααΎααααΈα αΆααααααααα·ααααα·ααΆαααΆαα αα»ααααααΆαα 20 αα·ααΆααΈ (ααααΎααααα»α src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java)α
ααΆαα½αααΉαααΆαααααΆααααααΌαααΌα
αα½αααααα
ααΆαα α
ααΆααα·ααΈααΆααααα TimeWindows.of α’αααα’αΆα
ααααΎααααΆαααα·αααΌαααααΆαα α§ααΆα αααααααα·αα α
αα·ααΈααΆααααα αα αΌαααα() αα ααΌα
ααααα
αααααααααααααΆαα»αααααΆαααΎα 24 ααααααΉαααααΌαααΆαααααΎα
ααΈαααα»α ααΆαααααααααααααΌααααααα αααααΎαα α»αααααααααααα’α½α - αααα’α½α "ααα" α
αα’α·α ("ααα") αααα’α½α
αααα’α½α αα’α·α / αααααΊαααααααα ααΉααααα’α½α ααααα½ααααααα»ααααααΆαααΆααα»αααααΆααααα·α ααααα½α α αααα’α½α αα’α·ααα·ααααα αΆααα αΌααααα α»ααααα ααααα ααααααααααααα αα»αααααααααΎααααα’α½α ααααΈααΎααααΈααααΎαααΆαααααΉαααα·ααΆαααααααΈαα αα½αααα αΆααααααΎαααΆαααααΆααααΈαααααΆααααΈα αααααααααααα αΆααα·α ααΆααααααααααα’α½α α
ααΎααααΈαααα αΆαααΈααΆααα»ααααααααααΆαααΆαααΆααα½αααα αα·αααΆαααααααα’α½α ααΌααααααααα α§ααΆα αααααααΆαααΆααααααα·ααααα·ααΆαααααΆαα αα»αα ααααα ααααααΎαααΊαα ααααΆααα ααα½αααααα·ααααα·ααΆα ααα»ααααααΎααα·αα αααααα αΆαααααααααΆααααΌααα»ααααααααΎαα αα α»ααααααααΆαααααααααααα αααα½ααααα·α ααΎαααΉαααααΎαα αα α»ααααααααΆαααααααα α ααααααααααααΈααΆαα α§ααΆα ααα ααΎαααΉααα ααααΆααα ααα½αααααα·ααααα·ααΆααααααΆαα 20 αα·ααΆααΈ ααα»ααααααααΎαα αα α»ααααααααΆαααααααααααΆαα 5 αα·ααΆααΈ ααΌα αααα αΆααααα»αααΌαα α₯.α‘α₯. αααα»αααααΈααα ααΎααααα ααααααααα’α½α ααααααα ααα½αααΈααΆαα½αααΉααα·αααααααααα½ααααΈααααΆα
ααΆαα
α»ααααααΈ 5.7 αααα αΆαααΌααααααΆααααααααααα’α½α
αα’α·α (ααααΎααα
αααα»α src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java)α
αααα’α½α
αααα’αΆα
ααααΌαααΆαααααααα
ααΆαααα’α½α
ααααααααααααααΆαα α
αα
αα·ααΈααΆααααα advanceBy()α αααα»αα§ααΆα ααααααααΆααααα αΆα α
αααααααααααααααΊ 15 ααΆααΈα
α’αααααΆαααΎααα αααα»αααααααααα’αααΈαααααααααααααααααα»ααα αααα’α½α αααααααΆα ααΆαα·ααααααα»αα ααα±ααα’αααα αα αΆαααΏαααΈααΌα ααΆααααααααΈαααααααα:
- ααα ααααα·αααΌαααααα·αααααΌαααΆααααααααΆαααααααααααα ααα»ααααααααααααααΆαα’αααααααΎααααΆααα
- αααα’α½α "αα½αααα" αααααααΌααα·αααααΆαααΌαα ααααααΉαααα·ααΆααααααα»ααααααααααααΆααααααα±αα;
- ααααααααααΆαααααααα’α½α ααααΌαααΆααα½ααα»α ααα»αααααα½αααΆααααΌαααΆαααααΎαα αα α»ααααααααΆαααΆααΉαααΆαα α αΎαα’αΆα ααΆαααΆαα»αααα½ααααΈααααΆαα αααα»ααααα’α½α ααΆααα’ααα
αααααΆαααα ααΎαααΉααααααΈααααααααααα KTable αααα‘αααα KStream αααααΆααααΆααααααΆααα
α₯.α£.α£. ααΆαααααΆααααααα» KStream αα·α KTable
αα αααα»αααααΌαααΈ 4 ααΎαααΆααα·ααΆααααΆα’αααΈααΆαααααΆααααααα» KStream ααΈαα α₯α‘αΌααααααΎαααααΌααααααΈααααααααΆαα KTable αα·α KStream α αααα’αΆα ααααΌαααΆααααααΆααα ααα»ααααΆααααααΆααααααα KStream ααΊααΆααααααΈααααααααααααΆ α αΎα KTable ααΊααΆααααααΈαααααΆαααααΎαα αα α»ααααααααΆααααααααααΆ ααα»αααααααααααα’ααααααα ααααΆα ααααααααααα·αααααααααα ααααααΈααααααααααΆαααααααΎααΆαα’αΆαααααααΈ KTable α
α αΌαααΎααααα·ααααααα’αααΈα ααα½αααααα·ααααα·ααΆαααααΆαα αα»α α αΎααααα αΌαααααΆααΆαα½αααααααΆαααααΆαααααΆααααααΌαααΆαα αα»ααααααΆααα§ααααΆα αααααααααΆαααααααα αααααΆα’αααΈαααα’αααααααΌαααααΎ ααΎααααΈαααααα ααΆαααΌααααααΌααααα’αααααΆααα½α α αΎαα
- αααααααααααα» KTable ααΆαα½αααΉααα·ααααααα’αααΈα ααα½αααααα·ααααα·ααΆαααΆαα αα»ααα ααΆ KStream αααααΆααααααααααα½ααααααααααΎααααααααα αΆαααΈαα·αααα§ααααΆα αααααααααααΌαααααΆααΉααα·αα·ααααααααΆααΆαα αα»ααααα
- αααααΎαααααα» KTable αααα’αΆααα·ααααααααΈαααααΆααααααααΆαααααααΆαα’αααΈααΆαααααΆααααααΌαααΆαα αα»αα KTable ααααΈαααααΉαααααΌαααΆαα αΆααααααΆααααΆααα·αααα§ααααΆα ααααα
- ααααΆααααααααΆαααααΈαααΆαα½αααΉαααααααΆαα’αααΈα ααα½αααααα·ααααα·ααΆαααααΆαα αα»αααΆααα·αααα§ααααΆα ααααα
α₯α‘αΌααααααΌαααΎαααΈααααα’αα»αααααααααΆααααααααΆααααα
ααααααα KTable αα KStream
ααΎααααΈααααααα KTable αα ααΆ KStream α’αααααααΌαααααΎααΌα ααΆααααααα
- α α αα·ααΈααΆααααα KTable.toStream() α
- αααα α αα·ααΈααΆααααα KStream.map αααα½ααααααααααΎαααααα§ααααΆα αααα α αΎααααααΆααααααΆαααααααα»ααααααααααα·ααααα·ααΆαααΈα§ααΆα ααα Windowed α
ααΎαααΉαααααΆααααααα·ααααα·ααΆαααΆαααααααΆαα½αααααΆααΌα ααΆαααααα (ααΌαα’αΆα ααααΆααα αααα»αα―αααΆα src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (ααΆααααααΈ 5.8)α
αααααΆαααααΎααααα»αα’αα»ααααααααα·ααααα·ααΆα KStream.map ααααα» KStream αααααΆααααα‘αααααα·αααααΌαααΆααααα
ααα‘αΎααα·ααααααααααααααααα· αα
ααααααααΆααααΌαααΆαααααΎαα
αααα»αααΆααααααΆααα
ααΎαααΆααααα ααααααΎαααΆαααααααα α αΎααααααΆααααΎαααααΌααααααΎαααααα» KTable αααααΆααα’αΆαααααααΆαααΆαα αα»αα
ααΆααααααΎα KTable αααααΆααααααααΆαααΆαα αα»α
ααΆααααΆαααα’ ααΆααααααΎαααααα» KTable α αααΆααααααααΉααααα½ααα½αααααΌα (ααΌαα’αΆα ααααΌαααΆαααααΎααα αααα»α src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (ααΆαα α»ααααααΈ 5.9)α
ααΆαα½αα±ααααααααααΆααααΆααααΆαααααα» Serde ααααΌαααΆαααΆαααΆαααΎααααΈαααααΆααααα
αΆααααΆααααΈαααα Serdes ααααΌαααΆαααααΎαα
αααα»αααΆααααααα ααααα αααααααΎααΆαααΆαααα»αααααΌα ααΆααΆαααααΌαααΆααααααααααααααααααΆαα
ααΎαααααΌαα
α₯α‘αΌααααααΎαα’αΆα αααααα ααα αΆαα α»αααααα - ααΆααααααΆααα
ααΆαααααΆααααααααΆαααααΈαααΆαα½αααΉααα·ααααααα ααα½αααααα·ααααα·ααΆα
ααΆααααααΎαααΆααααααΆαααα·ααα·ααΆαααα ααΎαααΉαααααΎααΆαα αΌααα½αααΆαααααα αααα»αααααΈααααα·αααΆαααααααΆααααα»ααα»ααααααΆααα§ααααΆα αααααααααΆααααααα (ααΌαα αΆαααΆα αα’αΆα ααααΆααα αααα»αα―αααΆα src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (ααΆαα α»ααααααΈ 5.10)α
ααααα·ααααα·αα leftJoin αααααΊααΆααααααΆααα αα·αααΌα
ααΆαααααΆαααα
αααα»αααααΌαααΈ 4 αα αα·ααΈααΆααααα JoinWindow αα·αααααΌαααΆαααααΎαα ααΈααααααα
αααα’αα»ααααααΆαααααΆαα KStream-KTable ααΆαααΆαα»α
αΌααααα½ααα
αααα»α KTable αααααΆααααααΈαα½ααα ααΆααααααΆαααααααααα·αααααΌαααΆαααααααααα»ααααααααΆααα αααααααααΆααΊαα
αααα»α KTable α¬α’ααααααΆαα ααΆαααααα·ααααΆαα
αααα αααααααΎααααα» KTable α’αααα’αΆα
αααααΎα KStream ααΆαα½αααΉααα·αααααααααααααα·αααΌαααΆααααααααΆααΉαααΆααα
α₯α‘αΌαααα ααΎαααΉααα·αα·αααααΎααα·ααΈαααααΆαααααα·αααααΆαααΆααα»α ααΎααααΈαααααΎαααααΉαααα·ααΆαααααΈ KStreamα
α₯.α£.α€. ααααα» GlobalKTable
ααΌα αααα’αααα’αΆα ααΎα ααΆααααααΌαααΆααααα»αααΆααααααΉαααΆαααααΆαααααΉαααα·ααΆααα α¬ααααααααα·αααα αα½αααα αα αααα»αααααΌαααΈ 4 α’αααααΆαααΎαααΆααααααΆαααααΆαααααα» KStream ααΈα α αΎααα αααα»αααααααα»α α’αααααΆαααΎαααΆααααααΆαααααΆα KStream αα·α KTable α αααα»αβααααΈβααΆααβα’ααβααα ααΆβααΆβααΆαβα αΆαααΆα αβαααα»αβααΆαβαααα ααβα ααααβαα·ααααααβα‘αΎαβαα·αβαα βαααβααααΌααααβααααΆααα α»α βαα βααααααβα¬βαααααβααααΈα αααααααααΆααααα ααα‘αΎααα·αααααΌαααΆαααααΎα‘αΎααααΆαααΆααααΆαα α αΎαααααααα Kafka Stream ααααΎααΆαααααααααααααααα·α ααΆααααα ααα‘αΎααα·αααΊα αΆαααΆα α ααΈαααααααααΆααα α»α ααΆαααααΆααααααΌα α αΎααααααααααΆααααΌααααααα αααα αααα»ααααααααααΈ ααΎαα·αααΌα αααααα ααΆααααααΆααααΉααα·αα’αΆα αα αα½α αα (ααΆααααΌαααΆααα·ααΆααααΆαα αααα»αααααΌαααΈ 4 αα αααα»αααααα "ααΆααααα αααα·ααααααα‘αΎααα·α" αα αααα»αααααααα 4.2.4) α
ααΆααααα ααα‘αΎααα·αααΆαααΆαα αααΆα
ααΆααααα ααα‘αΎααα·ααααααΌαα±ααααΆαααΆαα αααΆα - ααΆαα αααΆαααααΆααααααααααααΆααααΆααααααΎααααααΆαααααααα·αααααα ααΆααααααΆαα»ααα·αααααααααα½ααα αααα»ααααααΆααααα½ααααααααα; ααΆααααΆααααααΆααΆαααΊααααΆαααΎαα‘αΎααααααΆαααααΆαααααα αα·αααΆαα’αΆαααΈαααααΆααααααα ααααααααΈααΎααα ααααα·αααΎα’αααααααΌαααΆαααααΆαααα·αααααΆα α¬αα·ααΆαααα αααΎαααΆααα½α α’αααααααΌαααααααΆααααΆαααααΆαα αααααΈαααααααααΆααΆαα½αααΉαααααααΈ α αΎαααααΎαααΆαααααΎαααΆααααα ααα‘αΎααα·ααααααααα
ααΆαααααΆαααα αααα»ααα·ααααααααΌα ααΆα
αααα»αααααΈαααα ααα·ααΆααααα·ααααααααααααααααΌαααααΆααααΊααΌα ααΌα ααααα αααΆααα ααααααααααααααααΆα’αΆα ααααΉαααΌαααααΆαααΆααααΆαααΆααααα½ααα ααΎααααΆααααΈαα½ααα αααααΆααααααΆαααΆαααΌα ααα Kafka Stream αααααααΌαααααΆαα GlobalKTable α
GlobalKTable instances ααΊααΆααααα½αααα ααΈααααααααααα·ααΈα αααααα·ααααααααΆααα’αααα nodes ααΈαα½ααα α αΎαα αΆααααΆααααΈαα·ααααααααΆααα’ααααΆαααααααΆααα ααΎααααΆααααΈαα½αα ααΆαα·αα αΆαααΆα ααααα ααααΆαααααΆαααααΉαααα·ααΆαααααααααααΉααα·αααααααααααααα ααΌα ααααααΆα’αΆα ααααΎααΆααααααΆαααααααααΆαααΆαααΆααα’ααα α’αααααα’αΆα αααααΎαααΆαααααΆαααααααααΆααααααααααΎααααα» GlobalKTable α ααααααα‘αααα α§ααΆα ααααα½ααααα»αα ααααα§ααΆα αααααΈαα»α ααΎααααΈαααα αΆααααααααα·ααααααα
ααΆαααααΆααααααα» KStream αα ααααα» GlobalKTable
αα αααα»αααααααα 5.3.2 ααΎαααΆαα’αα»ααααααΆααααααΌααααα»ααααα’α½α ααααααα·ααααα·ααΆαααααΌαααααΆαααααα’ααααα·αα ααααααααααΆααααααΌααααα»ααααααΎααα ααΌα αααα
{customerId='074-09-3705', stockTicker='GUTM'}, 17
{customerId='037-34-5184', stockTicker='CORK'}, 16
αααααααααααααααααΆαααααααΆααααααΎααααααα ααΆααΉαααΆαααααααααααΆαααααα·αααΎαααααααααα’αα·αα·αα αα·αααααααααα»αα αα»αααααααααααΌαααΆααααα αΆααααααα ααΎααααΈαααααααααααα’αα·αα·αα αα·αααααααααα»αα αα»α α’αααα’αΆα ααααΎααΆαααααΆααααααααΆ ααα»ααααα’αααααΉαααααΌαααααΎααΆαααΌααααααΈαααααΉαααΈα αα·ααααα ααα‘αΎααα·αα ααΆαα½αααΉα GlobalKTable α’αααα’αΆα αααααΆαααΆαα αααΆαααααααα·ααααα·ααΆαααααααα
ααΎααααΈααααΎααΌα αααα ααΎαααΉαααααΎααααα» countStream ααΈ Listing 5.11 (ααΌααααααααΌαααααΆα’αΆα ααααΆααα αααα»α src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) α αΎαααααΆααααΆαα ααααα» GlobalKTable ααΈαα
ααΎαβααΆαβαα·ααΆααααΆβααΏαβαααβαα½α
βα αΎα ααΌα
ααααβαααα»αβααΉαβαα·αβαα·ααΆαβααΆβαααβααα ααα»αααααααα»αα
αααΆαααΆ ααΌααα
αααα»αα’αα»αααα toStream(.map) ααααΌαααΆαα’ααΌααΈαα
ααΆααααα»αα»αααΆα αααα½αα±αααααααα lambda αααα»ααα½ααααααΆααααΆααααααααααααΆαα’αΆαα
ααα αΆααααααΆααααΊααΎααααΈαααααΆαα§ααΆα αααααΈααα GlobalKTable (ααΌααααααΆααααα αΆαα’αΆα ααααΌαααΆαααααΎααα αααα»αα―αααΆα src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (ααΆααααααΈ 5.12)α
ααΌαα αααΆαααΆααααααααααΆαααααααΌαααΆααα·αααααΆαααααααΎαααααααααααΆαααΆαααααα αΌαα
α₯α‘αΌααααααΎαααΆααααΆαααΆαα»ααΆααα’αααα½α ααΆααα αΎα α’αααΈααααα ααααααααΊααααΌααααααααΌααααααΆααααΆααααααΆαα (αααα’αΆα ααααΌαααΆαααααΎααα αααα»αα―αααΆα src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (ααΆααααααΈ 5.13)α
αααααΈααΆααΆαααΆαααααΆααααααΆααΈααα
αααα»αααΌααααααααα αααα½αααααααΌαααΆαααΆααα
ααααΆαα αααααΆααααααααααααααα½αααααΆααααΈααα·αααααΌαααΆαααααΎααααΆαααααα‘ααααΈααααΆα ααααααααααΌαααΆααααα αΆααα
α
α»ααααα
ααααααααα·ααααα·ααΆαααΆααααΌαα
αα αααα’αααααααΎαααΆαααααα·ααααα·ααΆα Join ααΆαααΎ α’αααααΉαααα½αααΆαααααααααΌα αααα
{customer='Barney, Smith' company="Exxon", transactions= 17}
ααααΉαααΆααα·αααΆαααααΆααααααΌααα ααα»ααααααααααααΆαααααααΎααα ααΆααααα αααΆααα
ααααα·αααΎα’αααααΆααααααααααα ααααΌαααΈ 4 α’αααααΆαααΎααα½α α αΎαααΌαααααααααααΆααααααΆααααΆα αααΎααα αααα»ααααααααΆαα αα½αααααααΌαααΆαααΆααααα»αααΆααΆαα α₯.α’. ααΆααΆαααααααα»ααααα αΆααααΈαααααααΆααααααΆααααΆαααα 5.2 αα Kafka Stream α α’αααΈαα½αα’αΆα ααααΆααααααΌααα αααα»αααΆαα ααααααΆαααΆαααα’ααΆααα
ααΎααααΈβαααα
ααβααΏα ααΌαβααααααβααΈβα
ααα»α
βααΌαααααΆαα α’αααβα’αΆα
βααααΆααβααΆαβααααΆαβααααΉαααα·ααΆααα (KStream) αα·αβααααΎβαα
αα
α»ααααααααΆαβααΆαβααααΆα (KTable) αααβααααΎβααααΆαααΆαβααΌαααααΆαα ααΆαααααΎα ααααα·αααΎααα ααααα·ααααααααααα·αααααα α’αααα’αΆα
ααααΎααααα» GlobalKTable α GlobalKTables α
ααααααΆαααΆαααΆααα’αααα
ααααΆαααααααα·ααΈ Kafka Stream ααΈαα½αα αααααΆααΆααΆαα·ααααααααΆααα’ααα’αΆα
ααααΆα ααααα·ααα·αααΈααΆαααΆαααΆαα½ααααααααΌαααααΆαααααα
αααααΆαα ααΎαααΉαααΎααααααααα·ααα Kafka Stream α’ααα»ααααααΎαα’αΆα ααααααααΎαααΆαααααΆααααααΌαααααααααα·αααααΎααααΆαααα·ααααααααΈαααααΆααα Kafkaα
α₯.α£.α₯. ααααΆαααΆααααα’αΆα ααΆααα½αααΆαα
ααΎαβααΆαβα’αα»ααααβααααα·ααααα·ααΆαβαα½αβα ααα½αβαα½α βα αΎαβαααβααΆαααααααβααΉαβααααΆαααΆαβ α αΎαβαααβααβαααα αΆαβααααααβαα βαα»αααΌα (αααααΆαααααααααβα’αα·αααααα) α¬βαααααβααΆβαα βαααααΆααα (αααααΆαααααααααβααα·α)α αα αααααααααααααααα αααααΆααα α’αααααααΌαααααΎα’αα·αα·αα Kafka ααΎααααΈααΎααα½αααα
ααΆαα’αΆααα·ααααααααΈαααααΆαααααΆαααααα’αΆα ααααΌαααΆαα αΆαααα»αααΆααΆαααααααααα·αααααΆαααΆαααααααα αααααΆαααααααααααααααΎα ααΎαα’αΆα ααααΎαα·ααααααααα·αααααΆαααΆαααααααααΈαα·ααΈααΈααΆα β... ααααα»ααΌαααααΆααα·ααααααααΌααααααααααΆααααααααααααα½αα α§ααΆα ααα ααΆα’αΆα ααΆα αααΆααα ααααααΌαααααΆααααα·ααααααααΈα ααααΆα α¬αααα»ααααααα½αααα αα·α/α¬αα½αααααααΆααΆα α¬ααααααα αΌααα½α α¬ααΆααΆααααααααααααα½αααΆαααΆααααααΆααααααΌααααα»α" (https://en.wikipedia.org/wiki /materialized_view) α
Kafka Stream ααα’αα»ααααΆαα±ααα’αααααααΎαααΆααααα½αα’αααααααααα ααΎα αΆααααααααα αααα’αα»ααααΆαα±ααα’αααα’αΆααααααααΆααααΌααα·αααααΆαααΆαααααααααΆαααααα ααΆααΆααΆαααααΆαααααα»αααΆαααααααααΆααααΆαααα½ααα ααΆααα αΆαααααααΊααΆααααα·ααααα·ααΆαααΆαααα’αΆαααα»αααααα αααααΆααΆααΆα’ααααα·αα αΆαααΆα ααααα½αααΆααααα’αααΈααΆαααααΎα±ααααααΆαααΆααα·αααααααααΆαααα ααααα ααααααααααααααα·ααΈααααα’ααααααα»αααααΎαααΆααα·ααααααα
αααααααΆααααα»αααΆαααΆααα½ααααααααΆααααΌαα αΆαααααααααααΆαααΆααααααΆααααΆααα αααααΆααααααΆα’αααα’αΆα αααααΎααααααα·ααΈααααΆαααααααααααααααα·αα αΆαααΆα αααΆααααα·ααααααααΈα’αααααααΎααααΆαα Kafka ααΆαα»ααα·αα ααΆαααααααΎαααααα·αααααΆααααααααα·ααΈααααα αααααΆααααα·αα αΆαααΆα αααααααα·αααααααααααααα
- ααΌαα’ααα»ααααααΌαααααΆααα·αααααα αα½αααα’αΆα α αΌαααααΎααΆααααΆαααΆαααα ααα
- ααΆαα αααααα·ααααααααααΌαααΆααα»αα αα αααααααΆαα·αααααΌαααΆαααααααα αααααααααα»αααΆααααα ααα
ααΏαααααΆααααααααα»αα ααα±ααα’αααα αα αΆαααΊααΆα’αααα’αΆα αα½αααααΆαααΆααααααααΆααααΈαααα»ααααααα·ααΈααααα’αααα α±ααΆαβαααβαααααβα±ααβα’αααβαα·αβα’αΆα βααααΌαβααΆαβααβαα·ααΆαβααΎαβααΈβαααβααα αααα½αα±ααααΆαααααΎααααΆαααα·ααααααααΈ Kafka αα·ααααααΆαα»ααααααααααΆαα αααα»αααΌαααααΆααα·αααααααααααΆαααααααα·ααΈ α’αααα’αΆα ααΆααα½αα αΆαααααααΆαα½αααΉαααααααααΌα ααααΆα αααα½αααααΆαααα ααΆααα αΆαααααααΆααααααΆααΌααα·α (ααααΆαα’αααααααΎααααΆαα) αα·ααααααα·ααΈαα·α (αα·αααααΌαααΆαααΆααΆααα·ααααααααΎααααΈαααααΆαα»ααααααα)α
ααΎαααΆααααααΆααα’αααΈααΌαααααΆαααααα·α αα αααα»αααααΌαααα ααΌα ααααααΎαααΉαα αΆαα ααααΈααΆααα·ααΆααααΆααααααΎαα’αααΈαααα½αα’αααααααααααααΆααααΉαα αΆααααααααααααααΆααααααααα ααα»αααααα»αααΆααααα αα αααα»αααααΌαααΈ 9 ααΎαααΉααααααΎααααααα·ααΈααααΆαααααααααααααααΆαααααα½ααααααΆααααα½αα’ααααααααα ααΆααΉαααααΎα§ααΆα ααααα½αα ααα½αααΈααααΌαααα αα·αααααΌααα»α ααΎααααΈαααα αΆαααΈαααα½αα’αααααααα αα·ααααααααα’αααα’αΆα αααααααα½αααΆαα αααα»ααααααα·ααΈ Kafka Stream α
αααααα
- ααααα» KStream ααααΆαα±ααααααααΈαααααααΉαααα·ααΆααα αααααααααα ααΉαααΆααααα αΌααα αααα»αααΌαααααΆααα·ααααααα ααααα» KTable ααααΆαα±ααααααααΈαα’αΆααααα α αααΎααααααΌα ααΆααΆαα’αΆααααααα ααΆααααΌαααααΆααα·ααααααα ααα αααααααααα» KTable αα·αααΌαααΆαααα αααααααααΆα αΆααααααΌαααΆααααα½ααααααααΈα
- ααααα» KTable ααααΌαααΆαααΆαααΆααααααΆααααααα·ααααα·ααΆααααααΌααααα»αα
- αααααααΎααααα·ααααα·ααΆα windowing α’αααα’αΆα ααααααα·ααααααααα»ααα ααΆαα»ααααααααΆα
- ααΌαα’ααα»ααααααααα» GlobalKTable α’αααα’αΆα α αΌαααααΎαα·ααααααααααααααααΈαααααααα αααα»ααααααα·ααΈααααα·ααα·αααΈααΆααααα ααα
- ααΆαααααΆαααααΆαααααα» KStream, KTable αα·α GlobalKTable ααΊα’αΆα ααααΎαα ααΆαα
αα αΌαααααααααααα ααΎαααΆααααααααΎααΆααααΆααααααα·ααΈ Kafka Stream αααααααΎ KStream DSL ααααα·ααααααα αααααΈααΆαα·ααΈααΆαααααααααα·ααααααα’αα»ααααΆαα±ααα’ααααααααΎααααααα·ααΈαααΆαααααΉαααααΌα αα·αααααααααααα ααΆαααααΎααααΆααααΆααααΆαα±ααααΆααααααΌαα ααΆαααααΎααΆαααΆαα½α DSL KStream ααΆααααααΆαααααΎαααΆαααααααααααΌαααααα’ααααααααΆαααααααααααα·αααααΆααααααααααα αα αααα»αααααΌααααααΆαα ααΎαααΉααα·αα·αααααΎα API node handler ααααα·αααΆα α αΎαααΆαααααααΆααααααΌαααααααααα αααααα·ααΈααΉαααΆαααααααααΌαααΆαααΈαα»α ααα»ααααααΎαααΉαα’αΆα αααααΎαααααΆααα§ααααααααααααΆαααααΎαααααΆααα’αααααααΎααααα ααααΆααααΌαααΆαα
β ααααααΆααααα’α·αααααααα’αααΈααααα
α’αΆα
ααααΆααα
β αααααΆααααΆααααα α»αααααα 25% Habrozhiteli αααααααΎααααα - ααααααΈα Kafka
β αα
ααααααααααΆαααααααΆαααααααααααΆα ααααα
α’αα‘α·α
ααααΌαα·α
ααΉαααααΌαααΆαααααΎααΆαα’ααΈαααα
ααααα: www.habr.com