ืงืืข. 5.3. ืคืขืืืืช ืฆืืืจื ืืืืื
ืืืืง ืื, ื ืขืืืจ ืืืงืืจ ืืช ืืืืงืื ืืืืืืืื ืืืืชืจ ืฉื ืงืคืงื ืืจืืื. ืขื ืื ืืืกืื ื ืืช ืืืืืืื ืืืืื ืฉื ืงืคืงื ืืจืื:
- ืืฆืืจืช ืืืคืืืืืืืช ืขืืืื;
- ืฉืืืืฉ ืืืฆื ืืืคืืืงืฆืืืช ืกืืจืืืื ื;
- ืืืฆืืข ืืืืืจื ืืจื ื ืชืื ืื;
- ืืืืืื ืืื ืืจืื ืืืจืืขืื (KStream) ืืืจืื ืขืืืื (KTable).
ืืืืืืืืช ืืืืืช ื ืืื ืืช ืื ืืืจืืืืื ืืืื ืืื. ืชืืื ืื ืขื ืืืื ืืช, ืชืืื ื ื ืืืจืช ื ืืกืคืช ืฉื ืืืฉืืื ืกืืจืืืื ื. ืืืืืื ืืจืืฉืื ื ืฉืื ื ืชืืื ืฆืืืจื ืคืฉืืื.
5.3.1. ืฆืืืจืช ืืืืจืืช ืืื ืืืช ืืคื ืืืืจื ืชืขืฉืืื
ืฆืืืจื ืืงืืืืฅ ืื ืืืื ืืืื ืืื ืืขืืืื ืขื ืืจืืืช ื ืชืื ืื. ืืืืงื ืฉื ืจืฉืืืืช ืืืืืืช ืืื ืฉืื ืืชืงืืืืช ืืื ื ืืกืคืืงื. ืืื ืืืืฅ ืืืืข ื ืืกืฃ ืืื ืชืื ืื, ืืฉ ืฆืืจื ืืงืืฅ ืืืฉืื ืืืชื.
ืืืืืื ืื, ืชืืืฉ ืชืืคืืฉืช ืฉื ืกืืืจ ืืืื ืฉืฆืจืื ืืขืงืื ืืืจ ื ืคื ืืืืืจืืช ืฉื ืื ืืืช ืฉื ืืืจืืช ืืืื ืขื ืคืื. ืืืืคื ืกืคืฆืืคื, ืืชื ืืขืื ืืื ืืืืฉ ืืืืจืืช ืขื ืืืืจืืช ืืื ืืืช ืืืืืืืช ืืืืชืจ ืืื ืขื ืฃ.
ืฆืืืจื ืืื ืชืืจืืฉ ืืช ืืกืคืจ ืืฉืืืื ืืืืื ืืื ืืชืจืื ืืช ืื ืชืื ืื ืืฆืืจื ืืจืฆืืื (ืืืื ืืื ืืืืืื).
- ืฆืืจ ืืงืืจ ืืืืกืก ื ืืฉื ืืืคืจืกื ืืืืข ืืืืื ืขื ืืกืืจ ืืื ืืืช. ื ืฆืืจื ืืืคืืช ืืืืืืงื ืืกืื StockTransaction ืืืืืืืงื ืืกืื ShareVolume. ืื ืงืืื ืืื ืฉืืืืืืงื StockTransaction ืืืื ืืื ื ืชืื ืื ืฉื ืืืืจืืช, ืืื ืื ืื ื ืฆืจืืืื ืจืง ื ืชืื ืื ืขื ืืกืคืจ ืืื ืืืช ืฉื ืืืจืืช.
- ืงืืฅ ื ืชืื ื ShareVolume ืืคื ืกืื ืืื ืื. ืืืืจ ืงืืืืฅ ืืคื ืกืื, ืชืืื ืืืืืฅ ื ืชืื ืื ืืื ืืกืืืืื ืืื ืืื ืฉื ื ืคืื ืืืืจืืช ืืืืื. ืจืืื ืืฆืืื ืฉืฉืืืช KStream.groupBy ืืืืืจื ืืืคืข ืืกืื KGroupedStream. ืืืชื ืืืื ืืงืื ืืืคืข KTable ืขื ืืื ืงืจืืื ื ืืกืคืช ืืฉืืืช KGroupedStream.reduce.
ืืื ืืืฉืง KGroupedStream
ืืฉืืืืช KStream.groupBy ื-KStream.groupByKey ืืืืืจืืช ืืืคืข ืฉื KGroupedStream. KGroupedStream ืืื ืืืฆืื ืืื ืืื ืฉื ืืจื ืืืจืืขืื ืืืืจ ืงืืืืฅ ืืคื ืืคืชืืืช. ืื ืืืื ืื ืืืืขื ืืขืืืื ืืฉืืจื ืืืชื. ืืืงืื ืืืช, KGroupedStream ืืฉืืฉ ืืคืขืืืืช ืฆืืืจื, ืฉืชืืื ืืืืืืืช ื-KTable. ืืืืืืื ืฉืืชืืฆืื ืฉื ืคืขืืืืช ืฆืืืจื ืืื KTable ืืื ืืฉืชืืฉืื ืืื ืืช ืืืื ื, ืืืชืื ืฉืื ืื ืืขืืืื ืื ืืชืืฆืื ืืื ื ืฉืืืื ืืืืฉื ืืฆืื ืืจ.
ืืฉืืื KTable.groupBy ืืืืืจื KGroupedTable ืืืื - ืืืฆืื ืืื ืืื ืฉื ืืจื ืืขืืืื ืื, ืืงืืืฅ ืืืืฉ ืืคื ืืคืชื.
ืืืื ื ืืงื ืืคืกืงื ืงืฆืจื ืื ืกืชืื ืขื ืืืืจ. 5.9, ืฉืืจืื ืื ืืฉืื ื. ืืืืคืืืืืื ืืื ืืืจ ืืืืจื ืืืืืช ืืืืจืช ืื ืืืื.
ืืขืช ื ืกืชืื ืขื ืืงืื ืฉื ืืืืคืืืืืื ืืื (ื ืืชื ืืืฆืื ืืืชื ืืงืืืฅ src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (ืจืืฉืื 5.2).
ืืงืื ืื ืชืื ื ืืื ืืงืืฆืืจื ืืื ืคื ืืืืื ืฉื ืคืขืืืืช ืืืืืฆืขืืช ืืืกืคืจ ืฉืืจืืช. ืืืชืื ืฉืชืืืื ืืืฉืื ืืืฉ ืืคืจืืืจ ืืจืืฉืื ืฉื ืฉืืืช builder.stream: ืขืจื ืืกืื enum AutoOffsetReset.EARLIEST (ืืฉ ืื LATEST), ืืืืืจ ืืฉืืืช Consumed.withOffsetResetPolicy. ื ืืชื ืืืฉืชืืฉ ืืกืื ืกืคืืจื ืื ืืื ืืฆืืื ืืกืืจืืืืืช ืืืคืืก ืืืกื ืขืืืจ ืื KStream ืื KTable ืืืื ืืงืื ืขืืืคืืช ืขื ืืคืฉืจืืช ืืืคืืก ืืืกื ืืืชืฆืืจื.
GroupByKey ื- GroupBy
ืืืืฉืง KStream ืืฉ ืฉืชื ืฉืืืืช ืืงืืืืฅ ืจืฉืืืืช: GroupByKey ื- GroupBy. ืฉื ืืื ืืืืืจืื KGroupedTable, ืื ืืืื ืืชื ืชืืื ืื ืืืืื ืืื ืืื ืืืชื ืืืฉืชืืฉ ืืืืื?
ืฉืืืช GroupByKey ืืฉืืฉืช ืืืฉืจ ืืืคืชืืืช ื-KStream ืืืจ ืื ืจืืงืื. ืืืื ืืฉืื, ืืืื "ืืืจืฉ ืืืืงื ืืืืฉ" ืืขืืื ืื ืืืืืจ.
ืฉืืืช GroupBy ืื ืืื ืฉืฉืื ืืช ืืช ืืคืชืืืช ืืงืืืืฅ, ืื ืฉืืื ืืืืืงื ืืืืฉ ืืืืืจ ื-true. ืืืฆืืข ืืฆืืจืคืืช, ืฆืืืจื ืืื' ืืืืจ ืฉืืืช GroupBy ืืืื ืืืืืงื ืืืืฉ ืืืืืืืืช.
ืกืืืื: ืืืืืช ืืืคืฉืจ, ืขืืื ืืืฉืชืืฉ ื-GroupByKey ืืื ื-GroupBy.
ืืจืืจ ืื ืขืืฉืืช ืฉืืืืช mapValues โโื-groupBy, ืื ืืืื ื ืกืชืื ืขื ืฉืืืช sum() (ื ืืฆืืช ื-src/main/java/bbejeck/model/ShareVolume.java) (ืจืืฉืื 5.3).
ืฉืืืช ShareVolume.sum ืืืืืจื ืืช ืืกืืื ืืจืฆืื ืฉื ื ืคื ืืืืจืืช ืืืืื, ืืืชืืฆืื ืฉื ืื ืฉืจืฉืจืช ืืืืฉืืืื ืืื ืืืืืืงื KTable . ืขืืฉืื ืืชื ืืืื ืืช ืืชืคืงืื ืฉ-KTable ืืืื. ืืืฉืจ ืืืืืืงืื ShareVolume ืืืืขืื, ืืืืืืงื KTable ืืืชืืื ืืืืกื ืืช ืืขืืืื ืืขืืื ื ืืืืจืื. ืืฉืื ืืืืืจ ืฉืื ืืขืืืื ืื ืืืื ืืืื ืืืืื ื-shareVolumeKTable ืืงืืื, ืื ืื ืืืื ื ืฉืืืื ืืืื.
ืืืืจ ืืื ืื ื ืืฉืชืืฉืื ื-KTable ืื ืืื ืืฆืืืจ (ืืคื ืืกืคืจ ืืื ืืืช ืื ืกืืจืืช) ืืื ืืืืืข ืืืืฉ ืืืืจืืช ืขื ื ืคื ืืื ืืืช ืืืืื ืืืืชืจ ืื ืกืืจืืช ืืื ืขื ืฃ. ืืคืขืืืืช ืฉืื ื ืืืงืจื ืื ืืืื ืืืืืช ืืืื ืฉื ืืฆืืืจื ืืจืืฉืื ื.
- ืืฆืข ืคืขืืื ื ืืกืคืช ืฉื groupBy ืืื ืืงืืฅ ืืืืืืงืื ShareVolume ืืืืืื ืืคื ืขื ืฃ.
- ืืชืื ืืกืื ืืืืืืงืืื ืฉื ShareVolume. ืืคืขื ืืืืืืงื ืืฆืืืจื ืืื ืชืืจ ืขืืืคืืช ืืืืื ืงืืืข. ืืชืืจ ืืืืื ืงืืืข ืื ื ืฉืืจืืช ืจืง ืืืฉ ืืืืจืืช ืขื ืืืืืืช ืืื ืืืช ืืืืืืืช ืืืืชืจ ืฉื ืืืจื.
- ืืคื ืืช ืืชืืจืื ืืืคืกืงื ืืงืืืืช ืืขืจื ืืืจืืืช ืืืืืจ ืืช ืืืฉ ืืื ืืืช ืื ืกืืจืืช ืืืืชืจ ืืคื ืืกืคืจ ืืคื ืขื ืฃ.
- ืืชืื ืืช ืืชืืฆืืืช ืืฆืืจืช ืืืจืืืช ืื ืืฉื.
ืืืืืจ. ืืืืจ 5.10 ืืฆืื ืืช ืืจืฃ ืืืืคืืืืืื ืฉื ืืจืืืช ืื ืชืื ืื. ืืคื ืฉืืชื ืืืื ืืจืืืช, ืกืื ืืขืืืื ืืฉื ื ืืื ืื ืคืฉืื.
ืืขืช, ืืืืจ ืฉืืฉ ืื ื ืืื ื ืืจืืจื ืฉื ืืืื ื ืฉื ืกืื ืขืืืื ืฉื ื ืื, ืื ื ืืืืืื ืืคื ืืช ืืงืื ืืืงืืจ ืฉืื (ืชืืืื ืืืฆืื ืืืชื ืืงืืืฅ src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (ืจืืฉืื 5.4) .
ืืชืืื ืื ืืืื ืืฉืชื ื ืงืืืข ืืชืืจ. ืืื ืืืืืืงื ืืืชืื ืืืฉืืช ืืืืืื ืืชืื ืขืืืจ java.util.TreeSet ืืืฉืืฉ ืืืขืงื ืืืจ ืชืืฆืืืช N ืืขืืืื ืืช ืืกืืจ ืืืจื ืฉื ืืื ืืืช ืื ืกืืจืืช.
ืืืจ ืจืืืช ืืช ืืงืจืืืืช groupBy ื-mapValues, ืื ืื ื ืืื ืก ืืืื (ืื ืื ื ืงืืจืืื ืืฉืืืช KTable.toStream ืืืืืื ืฉืฉืืืช KTable.print ืืืฆืื ืืฉืืืืฉ). ืืื ืขืืืื ืื ืจืืืช ืืช ืืจืกืช KTable ืฉื aggregate() ืื ื ืงืืืฉ ืืื ืืืืื ืขื ืื.
ืืคื ืฉืืชื ืืืืจ, ืื ืฉืืืืื ืืช KTable ืืื ืฉืจืฉืืืืช ืขื ืืืชื ืืคืชืืืช ื ืืฉืืืช ืืขืืืื ืื. KTable ืืืืืฃ ืืช ืืขืจื ืืืฉื ืืืืฉ. ืฆืืืจื ืืชืจืืฉืช ืืืืคื ืืืื: ืืจืฉืืืืช ืืืืจืื ืืช ืขื ืืืชื ืืคืชื ืืฆืืืจืื. ืืืฉืจ ืจืฉืืื ืืืืขื, ืืื ืืชืืืกืคืช ืืืืคืข ืืืืืงื FixedSizePriorityQueue ืืืืฆืขืืช adder (ืคืจืืืจ ืฉื ื ืืงืจืืืช ืืฉืืื ืืืฆืืืจืช), ืื ืื ืจืฉืืื ืืืจืช ืืืจ ืงืืืืช ืขื ืืืชื ืืคืชื, ืื ืืจืฉืืื ืืืฉื ื ืืืกืจืช ืืืืฆืขืืช ืืืกืืจ (ืคืจืืืจ ืฉืืืฉื ื- ืงืจืืืช ืืฉืืื ืืืฆืืืจืช).
ืื ืื ืืืืจ ืฉืืืืจืืืืจ ืฉืื ื, FixedSizePriorityQueue, ืืื ื ืฆืืืจ ืืช ืื ืืขืจืืื ืืืคืชื ืืื, ืืื ืืืืกื ืกืืื ื ืข ืฉื ืืืืืืืช ืฉื N ืกืืื ืืื ืืืช ืื ืกืืจืืช ืืืืชืจ. ืื ืขืจื ื ืื ืก ืืืื ืืช ืืืกืคืจ ืืืืื ืฉื ืืื ืืืช ืฉื ืืืจื ืขื ืื. KTable ืชืืชื ืื ืืืืข ืืืื ืืื ืืืช ืฉื ืืืืจืืช ืื ืกืืจืืช ืืืื ืืืืชืจ, ืืืื ืืืืืจืฉ ืืฆืืืจื ืืชืืืืืช ืฉื ืื ืขืืืื.
ืืืื ื ืืขืฉืืช ืฉื ื ืืืจืื ืืฉืืืื:
- ืงืืฅ ืขืจืืื ื-KTable ืขื ืืื ืืคืชื ืืฉืืชืฃ;
- ืืืฆืข ืคืขืืืืช ืฉืืืืฉืืืช ืืืื ืืืกืฃ ืืฆืืืจื ืขื ืขืจืืื ืืงืืืฆืื ืืื.
ืืืขืช ืืืฆื ืืืฆืข ืคืขืืืืช ืืื ืืฉืื ืืืืื ืืช ืืืฉืืขืืช ืฉื ืื ืชืื ืื ืืขืืืจืื ืืจื ืืคืืืงืฆืืืช Kafka Streams ืืืืืื ืืืื ืืืืข ืืื ื ืืฉื.
ืจืืืื ื ืื ืืื ืืืืฉืื ืืืคืชื ืฉื ืืื ื ืงืืื ืืื ืืกืคืจ ืื. ืืคืจืง 4, ืื ื ืขื ืืื ืืืืื ื ืืืงืืืืช ืกืืืื ืืช ืืชืงืืืช ืืื ืืฉืืื ืขืืืจ ืืคืืืงืฆืืืช ืกืืจืืืื ื. ืืืืืื ืืจืืฉืื ื ืืคืจืง ืื ืืืืืื ืืืืข ืืืืื ื ืืืงืืืืช ืื ืื ืืฉืืื - ืืื ืืืคืฉืจืช ืื ืืขืงืื ืืืจ ืืืืืข ืฉืืืจ ืจืืืช. ืืืฉื ืืงืืืืช ืืื ืขืช ืขืืืืืื ืืจืฉืช, ืื ืฉืืืคื ืืช ืืืคืืืงืฆืื ืืืืชืจ ืืืฆืืขืืช ืืขืืืื ืืคื ื ืฉืืืืืช.
ืืขืช ืืืฆืืข ืคืขืืืช ืืืกืฃ ืื ืฆืืืจื ืืืฉืื, ืขืืื ืืฆืืื ืืช ืฉื ืื ืืช ืืืืื ื. ืคืขืืืืช ืืืืกืฃ ืืืฆืืืจื ืืืืืจืืช ืืืคืข ืฉื KTable, ืื-KTable ืืฉืชืืฉ ืืืืกืื ืืฆื ืืื ืืืืืืฃ ืชืืฆืืืช ืืฉื ืืช ืืืืฉืืช. ืืคื ืฉืจืืืช, ืื ืื ืืขืืืื ืื ื ืฉืืืื ืืฆื ืจืช, ืืื ืืฉืื ืืืืืื ืฉืคืขืืืืช ืฆืืืจื ื ืืขืื ืืืืฆืจ ืืืืข ืืกืื. ืื ืื ืชืืื ืืช ืืืืื ื ืืืงืืืืช, KTable ืชืขืืืจ ืืช ืื ืชืืฆืืืช ืืฆืืืจื ืืืืืกืฃ.
ืืืืจ ืืื, ื ืืื ืืืฆืืข ืคืขืืืืช ืืืื ืฆืืืจื ืืชืื ืคืจืง ืืื ืืกืืื - ืื ืฉื ืงืจื ืคืขืืืืช ืืืื ืืช.
5.3.2. ืคืขืืืืช ืืืื ืืช
ืืกืขืืฃ ืืงืืื, ืืฆืื ื ืงืื ืืืืืืืฆืื ืืฆืืืจื ืฉื ืืืืงื. ืืืคืืืงืฆืื ืืืฆืขื ืจืื-ืืค ืืชืืฉื ืฉื ืืืืจืืช ืืื ืืืช ืืืืืจืื ืฆืืืจืช ืืืฉ ืืื ืืืช ืื ืกืืจืืช ืืืืชืจ ืืืืจืกื.
ืืคืขืืื ืืฉ ืฆืืจื ืืฆืืืจื ืจืฆืืคื ืืื ืฉื ืชืืฆืืืช. ืืืคืขืืื ืืชื ืฆืจืื ืืืฆืข ืคืขืืืืช ืจืง ืขื ืคื ื ืคืจืง ืืื ื ืชืื. ืืืืืื, ืืฉื ืืื ืขืกืงืืืช ืืืืคืื ืืืฆืขื ืขื ืื ืืืช ืฉื ืืืจื ืืกืืืืช ื-10 ืืืงืืช ืืืืจืื ืืช. ืื ืืื ืืฉืชืืฉืื ืืืฆื ืขื ืืื ืจ ืคืจืกืืื ืืืฉ ื-15 ืืืงืืช ืืืืจืื ืืช. ืืืฉืื ืขืฉืื ืืืฆืข ืคืขืืืืช ืืืื ืืกืคืจ ืคืขืืื, ืื ืขื ืชืืฆืืืช ืืืืืช ืจืง ืขื ืคืจืงื ืืื ืืืืืจืื (ืืืื ืืช ืืื).
ืกืคืืจืช ืขืกืงืืืช ืืืืคืื ืืคื ืงืื ื
ืืืืืื ืืืื, ื ืขืงืื ืืืจ ืขืกืงืืืช ืื ืืืช ืืื ืืกืคืจ ืกืืืจืื - ืืจืืื ืื ืืืืืื ืื ืื ืฉื ืืกืคืื ืืืืืื ืืืืื.
ืืฉื ื ืฉืชื ืกืืืืช ืืคืฉืจืืืช ืืืขืงื ืื. ืืื ืืื ืืื ืืฆืืจื ืืืขืช ืื ืืืืืื ืฉืืง ืงืื ืื/ืืืืจืื. ืื ืืฉืืงื ืื ืืืืืืื ืืืืฉืงืืขืื ืืืชืืืืืื ืืืื ืจืืืื ืืืืื ืืช, ืื ืืืืื ื ืืขืงืื ืืืจ ืืืกืืจืืืื ืฉืืื. ืืกืืื ืืฉื ืืื ืืื ืืจืฆืื ืืืืืช ืื ืกืืื ืืคืฉืจื ืฉื ืกืืจ ืืคื ืื ืื ืืืงื. ืืื ืืขืฉืืช ืืืช, ืชืฆืืจื ืื ืชื ืืช ืืืชืื ืฉื ืขืืืืช ืืืืจืืช ืืืืืืช ืขื ืืืืขืืช ืืขืืชืื ืืช ืืฉืืืืช.
ืืขืงื ืืื ืืืจืื ืืืฉืืืื ืืืืื:
- ืืฆืืจืช ืืจื ืืงืจืืื ืืชืื ื ืืฉื ืขืกืงืืืช ืื ืืืช;
- ืงืืืืฅ ืจืฉืืืืช ื ืื ืกืืช ืืคื ืืืื ืงืื ื ืืกืื ืืื ืื. ืงืจืืื ืืืชืืื groupBy ืืืืืจื ืืืคืข ืฉื ืืืืืงื KGroupedStream;
- ืืฉืืื KGroupedStream.windowedBy ืืืืืจื ืืจื ื ืชืื ืื ืืืืื ืืืืื ืืื, ืืืืคืฉืจ ืฆืืืจื ืืืืื. ืืืชืื ืืกืื ืืืืื, ืืืืืจ TimeWindowedKStream ืื SessionWindowedKStream;
- ืกืคืืจืช ืขืกืงืืืช ืขืืืจ ืคืขืืืช ืืฆืืืจื. ืืจืืืช ืื ืชืื ืื ืืืืื ืงืืืขืช ืื ืจืฉืืื ืืกืืืืช ื ืืงืืช ืืืฉืืื ืืกืคืืจื ืื;
- ืืชืืืช ืชืืฆืืืช ืื ืืฉื ืื ืืืฆืืชื ืืงืื ืกืืื ืืืืื ืืคืืชืื.
ืืืืคืืืืืื ืฉื ืืืฉืื ืื ืืื ืคืฉืืื, ืื ืชืืื ื ืืจืืจื ืฉืื ืชืืื ืืืขืืื. ืืืื ื ืกืชืื ืขื ืืืืจ. 5.11.
ืืืืจ ืืื, ื ืืื ืืช ืืคืื ืงืฆืืื ืืืืช ืฉื ืคืขืืืืช ืืืืื ืืืช ืืงืื ืืืชืืื.
ืกืืื ืืืื ืืช
ืืฉื ื ืฉืืืฉื ืกืืืื ืฉื ืืืื ืืช ื-Kafka Streams:
- ืืืฉื;
- "ืืืืืืช" (ืืืืืืช);
- ืืืืงื/ืืืืื.
ืืืื ืืื ืืืืืจ ืชืืื ืืืจืืฉืืช ืืขืกืงืืืช ืฉืื. ืืืื ืืช ื ืคืืื ืืงืคืืฆื ืืืืืืื ืืืื, ืืขืื ืฉืืืื ืืช ืืคืขืื ืืืืืืื ืขื ืืื ืคืขืืืืช ืืืฉืชืืฉ - ืืฉื ืืืคืขืื/ืื ื ืงืืขืื ืื ืืจืง ืืคื ืืืืช ืืคืขืืืืช ืฉื ืืืฉืชืืฉ. ืืืืจ ืืขืืงืจื ืฉืืฉ ืืืืืจ ืืื ืฉืื ืกืืื ืืืืื ืืช ืืืืกืกืื ืขื ืืืชืืืช ืืชืืจืื/ืฉืขื ืฉื ืืขืจืืื, ืื ืขื ืฉืขืช ืืืขืจืืช.
ืืืืจ ืืื, ืื ื ืืืืฉืืื ืืช ืืืืคืืืืืื ืฉืื ื ืขื ืื ืืื ืืกืืื ืืืืื ืืช. ืืงืื ืืืื ืืื ืชื ืจืง ืืืืืื ืืจืืฉืื ื; ืขืืืจ ืกืืืื ืืืจืื ืฉื ืืืื ืืช ืฉืื ืืืจ ืื ืืฉืชื ื ืืืื ืกืื ืคืขืืืช ืืืืื.
ืืืื ืืช ืืคืขืื
ืืืื ืืช ืืคืขืื ืฉืื ืื ืืืื ืืื ืกืืื ืืืืื ืืช ืืืืจืื. ืื ืืืืืืื ืื ืื ืื ืขื ืืื ืืื ืืื ืขื ืืื ืืคืขืืืืช ืฉื ืืืฉืชืืฉ (ืื ืืคืขืืืืช ืฉื ืืืฉืืช ืฉืืืจืื ืชืจืฆื ืืขืงืื). ืืืื ืืช ืืคืขืื ืืืืืืื ืืคื ืชืงืืคืืช ืฉื ืืืกืจ ืคืขืืืืช.
ืืืืจ 5.12 ืืืืืฉ ืืช ืืจืขืืื ืฉื ืืืื ืืช ืืคืขืื. ืืืคืขืื ืืงืื ื ืืืชืจ ืชืชืืื ืขื ืืืคืขืื ืืฉืืื ืื. ืืืคืืืฉื ืืืืื ืชืืื ื ืคืจืืช ืืืืืื ืฉืืื ืืื ืืขืงืืืช ืชืงืืคื ืืจืืื ืฉื ืืืกืจ ืคืขืืืืช. ืืืื ืืช ืืคืขืื ืืืืกืกืื ืขื ืคืขืืืืช ืืืฉืชืืฉ, ืื ืืฉืชืืฉื ืืืืชืืืช ืชืืจืื/ืฉืขื ืืืขืจืืื ืืื ืืงืืืข ืืืืื ืืคืขืื ืืขืจื ืฉืืื.
ืฉืืืืฉ ืืืืื ืืช ืืคืขืื ืืืขืงื ืืืจ ืขืกืงืืืช ืื ืืืช
ืืืื ื ืฉืชืืฉ ืืืืื ืืช ืืคืขืื ืืื ืืืืื ืืืืข ืขื ืขืกืงืืืช ืืืืคืื. ืืืืฉืื ืฉื ืืืื ืืช ืืคืขืื ืืืฆื ืืจืืฉืื 5.5 (ืืฉืจ ื ืืชื ืืืฆืื ื-src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).
ืืืจ ืจืืืช ืืช ืจืื ืืคืขืืืืช ืืืืคืืืืืื ืืื, ืื ืืื ืฆืืจื ืืืกืชืื ืขืืืื ืฉืื ืืื. ืืื ืืฉ ืืื ืื ืืื ืืืื ืืื ืืืฉืื, ืขืืืื ื ืืื ืืขืช.
ืื ืคืขืืืช groupBy ืืืฆืขืช ืืืจื ืืื ืคืขืืืช ืฆืืืจื ืืืฉืื (ืฆืืืจื, ืืืกืฃ ืื ืกืคืืจื). ืืชื ืืืื ืืืฆืข ืฆืืืจื ืืฆืืืจืช ืขื ืกื ืจืฅ, ืื ืฆืืืจื ืฉื ืืืื, ืฉืืืงืืช ืืืฉืืื ืจืฉืืืืช ืืชืื ืืืื ืืื ืืืืืจ.
ืืงืื ืืจืืฉืื 5.5 ืกืืคืจ ืืช ืืกืคืจ ืืขืกืงืืืช ืืชืื ืืืื ืืช ืืคืขืื. ืืืืืจ. 5.13 ืคืขืืืืช ืืื ืื ืืชืืืช ืฆืขื ืืืจ ืฆืขื.
ืขื ืืื ืงืจืืื ื-windowedBy(SessionWindows.with(twentySeconds).until(fifteenMinutes)) ืื ื ืืืฆืจืื ืืืื ืืคืขืื ืขื ืืจืืื ืืืกืจ ืคืขืืืืช ืฉื 20 ืฉื ืืืช ืืืจืืื ืืชืืื ืฉื 15 ืืงืืช. ืืจืืื ืกืจืง ืฉื 20 ืฉื ืืืช ืืืืจ ืฉืืืคืืืงืฆืื ืชืืืื ืื ืื ืืกื ืฉืชืืืข ืชืื 20 ืฉื ืืืช ืืกืืื ืื ืชืืืืช ืืืคืขืื ืื ืืืืืช ืืชืื ืืืคืขืื ืื ืืืืืช (ืืคืขืืื).
ืืืืจ ืืื, ืื ื ืืฆืืื ืื ืืืื ืคืขืืืช ืฆืืืจื ืืฉ ืืืฆืข ืืืืื ืืคืืืฉื - ืืืงืจื ืื, ืกืคืืจื. ืื ืขืจื ื ืื ืก ื ืืคื ืืืืฅ ืืืืื ืืืกืจ ืืคืขืืืืช (ืืฉื ื ืืฆืืืื ืฉื ืืืชืืช ืืชืืจืื/ืฉืขื), ืืืืฉืื ืืืฆืจ ืืคืขืื ืืืฉื. ืืจืืื ืฉืืืจื ืคืืจืืฉื ืฉืืืจื ืขื ืกืฉื ืืืฉื ืคืจืง ืืื ืืกืืื ืืืืคืฉืจ ืืืืืจ ืฉื ื ืชืื ืื ืฉื ืืฉืืื ืืขืืจ ืืชืงืืคืช ืืืกืจ ืืคืขืืืืช ืฉื ืืคืืืฉื ืื ืขืืืื ื ืืชื ืืฆืจืฃ. ืื ืืกืฃ, ืืืชืืื ืืืกืืื ืฉื ืืืคืขืื ืืืืฉื ืื ืืืขืช ืืืืืืื ืชืืืืื ืืืืชืืช ืืชืืจืื/ืฉืขื ืืืืงืืืช ืืืืืจืื ื ืืืืชืจ.
ืืื ื ืกืชืื ืขื ืืื ืขืจืืื ืืฉืืืช ืืกืคืืจื ืืื ืืจืืืช ืืืฆื ืคืืขืืืช ืืคืขืืืช (ืืืื 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.
ืืื ืฉืืชืืืจ ืืกืขืืฃ ืื, ืืืื ืืืืืจ ืืช ืื ืืืื ืกืื ืืืฉืืืื ืืืืื:
- ืืคืขืืืช ืืื ื ืืืื ืืช ืืืืื ืงืืืข. ืืฉื ืืคืืืฉื ื ืงืืข ืืคื ืืคืขืืืืช ืืชืื ืคืจืง ืืื ื ืชืื;
- ืืืชืืืช ืืชืืจืื/ืฉืขื ืื ืชืื ืื ืงืืืขืืช ืื ืืืืจืืข ื ืืคื ืืชืื ืืคืขืื ืงืืืืช ืื ืืืืื ืชืงืืคืช ืกืจืง.
ืืฉืื ืืื ื ืืื ืืกืื ืืืืื ืืื - ืืืื ืืช "ืืชื ืคืืื".
ืืืื ืืช "ืืืืืื".
ืืืื ืืช ื ืคืืืื ืืืืืื ืืืจืืขืื ืฉื ืืคืืื ืืชืื ืคืจืง ืืื ืืกืืื. ืชืืจ ืืขืฆืื ืฉืืชื ืฆืจืื ืืืืื ืืช ืื ืขืกืงืืืช ืืื ืืืช ืฉื ืืืจื ืืกืืืืช ืื 20 ืฉื ืืืช, ืื ืืชื ืืืกืฃ ืืช ืื ืืืืจืืขืื ืืืืื ืคืจืง ืืืื ืืื. ืืชืื ืืืจืืื ืฉื 20 ืฉื ืืืช, ืืืืื ืืชืืคื ืืขืืืจ ืืืจืืื ืชืฆืคืืช ืืืฉ ืฉื 20 ืฉื ืืืช. ืืืืจ 5.14 ืืืืืฉ ืืฆื ืื.
ืืคื ืฉื ืืชื ืืจืืืช, ืื ืืืืจืืขืื ืฉืืชืงืืื ื-20 ืืฉื ืืืช ืืืืจืื ืืช ืืืืืื ืืืืื. ืืชืื ืคืจืง ืืื ืื ื ืืฆืจ ืืืื ืืืฉ.
ืจืืฉืื 5.6 ืืฆืื ืงืื ืืืืืื ืืช ืืฉืืืืฉ ืืืืื ืืช ืืืืืืื ืืื ืืืืื ืขืกืงืืืช ืืื ืืืช ืื 20 ืฉื ืืืช (ื ืืฆื ื-src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).
ืขื ืืฉืื ืื ืืงืื ืืื ืืงืจืืืช ืืฉืืื TimeWindows.of, ืืชื ืืืื ืืืฉืชืืฉ ืืืืื ื ืคืืื. ืืืืื ืื ืืื ื ืงืืจืืช ืืืชืืื () ืขื, ืืืื ืืฉืืฉ ืืจืืื ืืฉืืืจื ืืืืืืจ ืืืจืืจืช ืืืื ืฉื 24 ืฉืขืืช.
ืืืกืืฃ, ืืืืข ืืืื ืืขืืืจ ืืืืจืื ืืืื ืืคืฉืจืืืืช ืืืืื ืืช - ืืืื ืืช "ืงืคืืฆื".
ืืืื ืืช ืืืื ("ืงืืคืฆืื")
ืืืื ืืช ืืืื/ืืืืืืื ืืืืื ืืืืื ืืช ื ืคืืืื, ืื ืขื ืืืื ืงื. ืืืื ืืช ืืืื ืื ืชืืื ืืกืืฃ ืืจืืื ืืืื ืืคื ื ืืฆืืจืช ืืืื ืืืฉ ืืขืืืื ืืืจืืขืื ืืืจืื ืื. ืื ืืชืืืืื ืืืฉืืืื ืืืฉืื ืืืืจ ืืจืืื ืืืชื ื ืืงืื ืืืฉื ืืืืื.
ืืื ืืืืืืฉ ืืช ืืืืืืื ืืื ืืืื ืืช ื ืคืืื ืืงืคืืฆื, ื ืืืืจ ืืืืืื ืฉื ืกืคืืจืช ืขืกืงืืืช ืืืืจืกื. ืืืืจื ืฉืื ื ืืื ืขืืืื ืืกืคืืจ ืืช ืืกืคืจ ืืขืกืงืืืช, ืืื ืื ืื ื ืื ืจืืฆืื ืืืืืช ืืช ืื ืืืื ืืคื ื ืขืืืื ืืืื ื. ืืืงืื ืืืช, ื ืขืืื ืืช ืืืื ื ืืืจืืืืื ืงืฆืจืื ืืืชืจ. ืืืืืื, ืขืืืื ื ืกืคืืจ ืืช ืืกืคืจ ืืขืกืงืืืช ืื 20 ืฉื ืืืช, ืื ื ืขืืื ืืช ืืืื ื ืื 5 ืฉื ืืืช, ืืคื ืฉืืืฆื ืืืืืจ. 5.15. ืืืงืจื ืื, ืื ื ืืงืืืื ืฉืืืฉื ืืืื ืืช ืชืืฆืืืช ืขื ื ืชืื ืื ืืืคืคืื.
ืจืืฉืื 5.7 ืืฆืื ืืช ืืงืื ืืืืืจืช ืืืื ืืช ืืืื (ื ืืฆื ื-src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).
ื ืืชื ืืืืืจ ืืืื ื ืคืืื ืืืืื ืืืืื ืขื ืืื ืืืกืคืช ืงืจืืื ืืฉืืืช advanceBy() . ืืืืืื ืืืืฆืืช, ืืจืืื ืืฉืืืจื ืืื 15 ืืงืืช.
ืจืืืช ืืกืขืืฃ ืื ืืืฆื ืืืืืื ืืช ืชืืฆืืืช ืืฆืืืจื ืืืืื ืืช ืืื. ืืคืจื, ืื ื ืจืืฆื ืฉืชืืืืจ ืืช ืฉืืืฉืช ืืืืจืื ืืืืื ืืกืขืืฃ ืื:
- ืืืื ืืืื ืืช ืืคืืืฉื ืืืืื ืื ืืคื ืคืจืง ืืื, ืืื ืืคื ืคืขืืืืช ืืืฉืชืืฉ;
- ืืืื ืืช "ืืชื ืคืืื" ืืกืคืงืื ืกืงืืจื ืืืืืช ืฉื ืืืจืืขืื ืืชืื ืคืจืง ืืื ื ืชืื;
- ืืฉื ืืืื ืฉื ืืืื ืืช ืงืคืืฆื ืงืืืข, ืื ืื ืืชืขืืื ืื ืืขืชืื ืงืจืืืืช ืืขืฉืืืื ืืืืื ืขืจืืื ืืืคืคืื ืืื ืืืืื ืืช.
ืืืืจ ืืื, ื ืืื ืืืฆื ืืืืืจ KTable ืืืืจื ื-KStream ืขืืืจ ืืืืืจ.
5.3.3. ืืืืืจ ืืืืืืงืื KStream ื-KTable
ืืคืจืง 4, ืื ื ืืืืืืจ ืฉื ื ืืืืืืงืื KStream. ืืขืช ืขืืื ื ืืืืื ืืืฆื ืืืืจ ืืช KTable ื-KStream. ืื ืขืฉืื ืืืืืช ื ืืืฅ ืืืกืืื ืืคืฉืืื ืืืื. KStream ืืื ืืจื ืฉื ืจืฉืืืืช, ื-KTable ืืื ืืจื ืฉื ืขืืืื ื ืจืฉืืืืช, ืืื ืืคืขืืื ืืืชืื ืฉืชืจืฆื ืืืืกืืฃ ืืงืฉืจ ื ืืกืฃ ืืืจื ืืจืฉืืืืช ืืืืฆืขืืช ืขืืืื ืื ืื-KTable.
ืืืื ื ืืงื ื ืชืื ืื ืขื ืืกืคืจ ืขืกืงืืืช ืืืืจืกื ืื ืฉืื ืืืชื ืขื ืืืฉืืช ืืืจืกื ืืขื ืคืื ืืจืืืื ืืืื. ืื ื ืื ืฉืืชื ืฆืจืื ืืขืฉืืช ืืื ืืืฉืื ืืืช ืืืชืืฉื ืืงืื ืฉืืืจ ืืฉ ืื.
- ืืืจ ืืืืืืงื KTable ืขื ื ืชืื ืื ืขื ืืกืคืจ ืขืกืงืืืช ืืื ืืืช ื-KStream, ืืืืืจ ืืื ืืืืคืช ืืืคืชื ืืืคืชื ืืืฆืืื ืืช ืืืืจ ืืชืขืฉืืื ืืืชืืื ืืกืื ืืื ืื ืืื.
- ืฆืืจ ืืืืืืงื KTable ืฉืงืืจื ื ืชืื ืื ืื ืืฉื ืขื ืืืฉืืช ืืืืจืกื. KTable ืืืฉ ืื ืืกืืื ืืคื ืืืืจ ืืชืขืฉืืื.
- ืืืจ ืขืืืื ื ืืืฉืืช ืขื ืืืืข ืขื ืืกืคืจ ืืขืกืงืืืช ืืืืจืกื ืืคื ืืืืจื ืชืขืฉืืื.
ืขืืฉืื ืืืื ื ืจืื ืืืฆื ืืืืฉื ืืช ืชืืื ืืช ืืคืขืืื ืืื.
ืืืจ KTable ื-KStream
ืืื ืืืืืจ KTable ื-KStream ืืชื ืฆืจืื ืืขืฉืืช ืืช ืืคืขืืืืช ืืืืืช.
- ืงืจื ืืฉืืืช KTable.toStream()โ.
- ืขื ืืื ืงืจืืื ืืฉืืืช KStream.map, ืืืืฃ ืืช ืืืคืชื ืืฉื ืืชืขืฉืืื, ืืืืืจ ืืื ืืืืจ ืืช ืืืืืืืงื TransactionSummary ืืืืคืข 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 ืื ืื ืคืฉืื. ืื ืืืื ื-joins ืืคืจืง 4, ืื ื ืขืฉื ืฉืืืืฉ ืืฉืืืช JoinWindow ืืืืืื ืฉืืืฉืจ ืืืฆืขืื ืฆืืจืืฃ KStream-KTable, ืืฉ ืจืง ืื ืืกื ืืืช ื-KTable ืืื ืืคืชื. ืืืืืจ ืืื ืืื ื ืืืืื ืืืื: ืืจืฉืืื ื ืืฆืืช ืื ื-KTable ืื ื ืขืืจืช. ืืืกืงื ื ืืขืืงืจืืช: ืืืืฆืขืืช ืืืืืืงืื KTable ืืชื ืืืื ืืืขืฉืืจ ืืช KStream ืื ืชืื ื ืืชืืืืกืืช ืืืชืขืืื ืื ืืชืืืจืืช ื ืืืื ืืืชืจ.
ืืขืช ื ืืื ืืจื ืืขืืื ืืืชืจ ืืืขืฉืืจ ืืืจืืขืื ื-KStream.
5.3.4. ืืืืืืงืืื GlobalKTable
ืืคื ืฉืืชื ืืืื ืืจืืืช, ืืฉ ืฆืืจื ืืืขืฉืืจ ืืช ืืจืื ืืืืจืืขืื ืื ืืืืกืืฃ ืืื ืืงืฉืจ. ืืคืจืง 4 ืจืืืช ืืช ืืืืืืจืื ืืื ืฉื ื ืืืืืืงืืื ืฉื KStream, ืืืกืขืืฃ ืืงืืื ืจืืืช ืืช ืืงืฉืจ ืืื KStream ื-KTable. ืืื ืืืงืจืื ืืืื, ืืฉ ืฆืืจื ืืืืง ืืืืฉ ืืช ืืจื ืื ืชืื ืื ืืขืช ืืืคืื ืืืคืชืืืช ืืกืื ืื ืืขืจื ืืืฉ. ืืคืขืืื ืืืืืงื ืืืืฉ ืืชืืฆืขืช ืืืคืืจืฉ, ืืืคืขืืื ืงืคืงื ืกืืจืื ืขืืฉื ืืืช ืืืืืืืืช. ืืืืงื ืืืืฉ ื ืืืฆื ืืืืืื ืฉืืืคืชืืืช ืืฉืชื ื ืืืจืฉืืืืช ืืืืืืช ืืืืืข ืืืงืืขืื ืืืฉืื, ืืืจืช ืืืืืืจ ืืืื ืืืชื ืืคืฉืจื (ืืืืจ ื ืืื ืืคืจืง 4, ืืกืขืืฃ "ืืืืงื ืืืืฉ ืฉื ื ืชืื ืื" ืืชืช-ืกืขืืฃ 4.2.4).
ืืืืืงื ืืืืฉ ืืฉ ืขืืืช
ืืืืงื ืืืืฉ ืืฆืจืืื ืขืืืืืช - ืขืืืืืช ืืฉืืืื ื ืืกืคืืช ืืืฆืืจืช ื ืืฉืื ืืื ืืื, ืืืกืื ื ืชืื ืื ืืคืืืื ืื ืืฉื ืืืจ; ืืืฉืืขืืช ืืื ืื ืืืืื ืืืืืจ ืขืงื ืืชืืื ืืงืจืืื ืืื ืืฉื ืืื. ืื ืืกืฃ, ืื ืืชื ืฆืจืื ืืืฆืืจืฃ ืขื ืคื ื ืืืชืจ ืืืกืคืงื ืื ืืืื ืืื, ืขืืื ืืฉืจืฉืจ ืืช ืืืืืืจืื, ืืืคืืช ืืช ืืจืฉืืืืช ืขื ืืคืชืืืช ืืืฉืื ืืืืคืขืื ืฉืื ืืช ืชืืืื ืืืืืงื ืืืืฉ.
ืืืืืจ ืืืขืจืื ื ืชืื ืื ืงืื ืื ืืืชืจ
ืืืงืจืื ืืกืืืืื, ื ืคื ื ืชืื ื ืืืชืืืืกืืช ืืืืืืจ ืงืื ืืืกืืช, ืื ืฉืขืืชืงืื ืฉืืืื ืฉืืื ืืืืืื ืืืชืืื ืืงืืืช ืืงืืืืช ืืื ืฆืืืช. ืขืืืจ ืืฆืืื ืืืื, ืงืคืงื ืกืืจืื ืืกืคืง ืืช ืืืืชื GlobalKTable.
ืืืคืขื GlobalKTable ืื ืืืืืืืื ืืืืืื ืฉืืืคืืืงืฆืื ืืฉืืคืืช ืืช ืื ืื ืชืื ืื ืืื ืืื ืืืฆืืชืื. ืืืืืืื ืฉืื ืื ืชืื ืื ืงืืืืื ืืื ืฆืืืช, ืืื ืฆืืจื ืืืืง ืืช ืืจื ืืืืจืืขืื ืืคื ืืคืชื ื ืชืื ื ืืคื ืื ืื ืฉืืื ืืืื ืืื ืืืืืฆืืช. ืืชื ืืืื ืื ืืืฆืืจ ืืืืืจืื ืืื ืืคืชื ืืืืฆืขืืช ืืืืืืงืืื ืฉื 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 ืืืคืฉื ืืืืืืืงื ืคืื ืงืฆืื ืืืงืื ืืืืื ืืืืื ืืืืืข ืืืขื ืืงืจืืื.
ืืฉืื ืืื ืืื ืืืืจืื ืขื ืฉื ื ืืืคืขืื ืฉื GlobalKTable (ืืช ืืงืื ืืืืฆื ื ืืชื ืืืฆืื ืืงืืืฅ src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (ืจืืฉืื 5.12).
ืฉืื ืื ืฉืฉืืืช ืื ืืฉืืื ืืชืืืจืื ืืืืฆืขืืช ืกืืืื ืืืืื ืื.
ืืขืช, ืืฉืืฉ ืื ื ืืช ืื ืืจืืืืื ืืืื ืื, ืื ืฉื ืืชืจ ืืื ืืืชืื ืืช ืืงืื ืืืืืืจ (ืืฉืจ ื ืืชื ืืืฆืื ืืงืืืฅ src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (ืจืืฉืื 5.13).
ืืืจืืช ืฉืืฉ ืฉื ื ืืืืืจืื ืืงืื ืื, ืื ืืฉืืจืฉืจืื ืืืื ืฉืืฃ ืืืช ืืืชืืฆืืืช ืฉืืื ืื ืืฉืืฉืช ืื ืคืจื. ืืชืืฆืืืช ืืืฆืืืช ืืกืืฃ ืื ืืคืขืืื.
ืืืฉืจ ืืชื ืืคืขืื ืืช ืคืขืืืช ืืืฆืืจืคืืช ืืขืื, ืชืงืื ืชืืฆืืืช ืืื ืืื:
{customer='Barney, Smith' company="Exxon", transactions= 17}
ืืืืืช ืื ืืฉืชื ืชื, ืืื ืชืืฆืืืช ืืื ื ืจืืืช ืืจืืจืืช ืืืชืจ.
ืื ืืชื ืกืืคืจ ืืืืืจ ืืคืจืง 4, ืืืจ ืจืืืช ืืื ืกืืืื ืฉื ืืืืืจืื ืืคืขืืื. ืื ืจืฉืืืื ืืืืื. 5.2. ืืืื ืื ืืฉืงืคืช ืืช ืืืืืืช ืืงืืฉืืจืืืช ื ืืื ืืืจืกื 1.0.0 ืฉื Kafka Streams; ืืฉืื ืขืฉืื ืืืฉืชื ืืช ืืืืืืจืืช ืขืชืืืืืช.
ืืื ืืกืื ืืช ืืืืจืื, ืืืื ื ืกืื ืืช ืืืกืืืืช: ืืชื ืืืื ืืืืจ ืืจืืื ืฉื ืืืจืืขืื (KStream) ืืืขืืื ืืจืืื (KTable) ืืืืฆืขืืช ืืฆื ืืงืืื. ืืืืืคืื, ืื ืืืื ื ืชืื ื ืืืคื ืื ืืื ื ืืืื ืืื, ืืชื ืืืื ืืืฉืชืืฉ ืืืืืืืงื GlobalKTable. GlobalKTables ืืฉืืคืืื ืืช ืื ืืืืืฆืืช ืืื ืฆืืืช ืืคืืืงืฆืืืช Kafka Streams, ืืืืืืืื ืฉืื ืื ืชืื ืื ืืืื ืื ืืื ืงืฉืจ ืืืืื ืืืืฆื ืืืคืชื ืืชืืื.
ืืฉืื ืืื ื ืจืื ืืช ืชืืื ืช ืงืคืงื ืืจืื, ืฉืืืืืชื ื ืืื ืืฆืคืืช ืืฉืื ืืื ืืฆื ืืืื ืืฆืจืื ื ืชืื ืื ืื ืืฉื ืงืคืงื.
5.3.5. ืืฆื ืฉื ืืชื ืืฉืืื
ืืืจ ืืืฆืขื ื ืืกืคืจ ืคืขืืืืช ืืืืืืืช ืืฆื ืืชืืื ืคืืื ื ืืช ืืชืืฆืืืช ืืงืื ืกืืื (ืืืืจืืช ืคืืชืื) ืื ืืชืื ื ืืืชื ืื ืืฉื (ืืืืจืืช ืืืฆืืจ). ืืขืช ืืชืืืช ืชืืฆืืืช ืื ืืฉื, ืขืืื ืืืฉืชืืฉ ืืฆืจืื ืงืคืงื ืืื ืืฆืคืืช ืืื.
ืงืจืืืช ื ืชืื ืื ืืื ืืฉืืื ืืืื ืืืืื ืืืืืฉื ืืกืื ืฉื ืืฉืงืคืืช ืืืืืฉืืช. ืืขื ืืื ื ื, ืื ื ืืืืืื ืืืฉืชืืฉ ืืืืืจื ืฉื ืชืฆืืื ืืืืืฉืช ืืืืงืืคืืื: "...ืืืืืืงื ืฉื ืืกื ื ืชืื ืื ืคืืื ืืืืื ืชืืฆืืืช ืฉื ืฉืืืืชื. ืืืืืื, ืื ืืืื ืืืืืช ืขืืชืง ืืงืืื ืฉื ื ืชืื ืื ืืจืืืงืื, ืื ืชืช-ืงืืืฆื ืฉื ืืฉืืจืืช ื/ืื ืืขืืืืืช ืฉื ืืืื ืื ืชืืฆืืืช ืืฆืืจืคืืช, ืื ืืืืช ืกืืืื ืฉืืืฉืื ืืืืฆืขืืช ืฆืืืจื" (https://en.wikipedia.org/wiki /Materialized_view).
Kafka Streams ืื ืืืคืฉืจ ืื ืืืจืืฅ ืฉืืืืชืืช ืืื ืืจืืงืืืืืืช ืืื ืืืืช ืืืืื ื, ืื ืฉืืืคืฉืจ ืื ืืงืจืื ืืฉืืจืืช ืืช ืืืขืืช ืฉืืชืืืฉื. ืืฉืื ืืฆืืื ืฉืืฉืืืืชื ืืื ืืช ืืืืื ื ืืื ืคืขืืื ืืงืจืืื ืืืื. ืื ืืืืื ืฉืื ืชืฆืืจื ืืืืื ืืืคืืืช ืืืฆื ืืืขืืช ืืืืชื ืขืงืื ืืืื ืฉืืืคืืืงืฆืื ืฉืื ืืขืืืช ื ืชืื ืื.
ืืืืืืช ืืืฆืข ืฉืืืืชืืช ืืฉืืจืืช ืืื ืืืืช ืืืืื ื ืืฉืืื. ืื ืืืืจ ืฉืืชื ืืืื ืืืฆืืจ ืืืฉืืื ืืื ืืืืื ืื ืืืื ืฉืชืฆืืจื ืงืืื ืืืืื ื ืชืื ืื ืืฆืจืื ืงืคืงื. ืื ืื ืืืืืจ ืืช ืืืขืืืืช ืฉื ืืืคืืืงืฆืื, ืืฉื ืืขืืืื ืฉืืื ืฆืืจื ืืืชืื ื ืชืื ืื ืฉืื:
- ืืืืืช ืืืงืืื ืฉื ืื ืชืื ืื, ื ืืชื ืืืฉืช ืืืืื ืืืืืจืืช;
- ืฉืืคืื ืื ืชืื ืื ื ืืืง, ืืืืืื ืฉืืื ืื ื ืืชื ืืืืกืื ืืืฆืื ื.
ืืืืจ ืืขืืงืจื ืฉืื ื ืจืืฆื ืฉืชืืืืจ ืืื ืฉืืชื ืืืื ืืฉืืื ืืช ืืืฆื ืืฉืืจืืช ืืชืื ืืืืฉืื ืฉืื. ืื ืืคืฉืจ ืืืคืจืื ืืืืืื ืืืืช ืฉืื ื ืืชื ืื. ืืืงืื ืืฆืจืื ื ืชืื ืื ืืงืคืงื ืืืืืกื ืจืฉืืืืช ืืืกื ื ืชืื ืื ืขืืืจ ืืืคืืืงืฆืื, ื ืืชื ืืืฆืข ืฉืืืืชืืช ืืื ืืืืช ืืฆื ืขื ืืืชื ืชืืฆืื. ืฉืืืืชืืช ืืฉืืจืืช ืืื ืืืืช ืืืืื ื ืืืืจืืช ืคืืืช ืงืื (ืืื ืฆืจืื) ืืคืืืช ืชืืื ื (ืืื ืฆืืจื ืืืืืช ืืกื ื ืชืื ืื ืืื ืืืืกื ืืช ืืชืืฆืืืช).
ืืืกืื ื ืื ืืขื ืืืฉืื ืืคืจืง ืืื, ืื ื ืขืืื ืืช ืืืืื ืฉืื ื ืืฉืืืืชืืช ืืื ืืจืืงืืืืืืช ื ืื ืื ืืืืช ืืืืืชืืืช ืืขืช ืขืชื. ืืื ืื ืืืื: ืืคืจืง 9, ื ืืฆืืจ ืืืฉืื ืืื ืืืืื ืื ืคืฉืื ืขื ืฉืืืืชืืช ืืื ืืจืืงืืืืืืช. ืืื ืืฉืชืืฉ ืืืื ืืืืืืืืืช ืืคืจืงืื ืื ืืืคืจืงืื ืงืืืืื ืืื ืืืืืื ืฉืืืืชืืช ืืื ืืจืืงืืืืืืช ืืืืฆื ื ืืชื ืืืืกืืฃ ืืืชื ืืืืฉืืื Kafka Streams.
ืชืงืฆืืจ
- ืืืืืืงืื KStream ืืืืฆืืื ืืจืืื ืฉื ืืืจืืขืื, ืืืืืื ืืืืกืคืืช ืืืกื ื ืชืื ืื. ืืืืืืงืื KTable ืืืืฆืืื ืืจืื ืขืืืื, ืืืชืจ ืืื ืขืืืื ืื ืืืกื ื ืชืื ืื. ืืืื ืืืืืืืงื KTable ืื ืืื, ืจืฉืืืืช ืืฉื ืืช ืืืืืคืืช ืืืืฉืืช.
- ืืืืืืงืื KTable ื ืืจืฉืื ืืคืขืืืืช ืฆืืืจื.
- ืืืืฆืขืืช ืคืขืืืืช ืืืื ืืช, ืืชื ืืืื ืืคืฆื ื ืชืื ืื ืืฆืืืจืื ืืืืื ืืื.
- ืืืืืช ืืืืืืืงืืื ืฉื GlobalKTable, ืืชื ืืืื ืืืฉืช ืื ืชืื ื ืืชืืืืกืืช ืืื ืืงืื ืืืคืืืงืฆืื, ืืื ืงืฉืจ ืืืืืงื.
- ืืืืืจืื ืืื ืืืืืืงืื KStream, KTable ื-GlobalKTable ืืคืฉืจืืื.
ืขื ืื, ืืชืืงืื ื ืืื ืืืช ืืืฉืืื Kafka Streams ืืืืฆืขืืช KStream DSL ืืจืื ืืืืื. ืืืจืืช ืฉืืืืฉื ืืจืื ืืืืืื ืืืคืฉืจืช ืื ืืืฆืืจ ืชืืื ืืืช ืืกืืืจืืช ืืชืืฆืืชืืืช, ืืฉืืืืฉ ืื ืืืืฆื ืคืฉืจื. ืขืืืื ืขื DSL KStream ืคืืจืืฉื ืืืืืช ืืชืืฆืืชืืืช ืฉื ืืงืื ืฉืื ืขื ืืื ืืคืืชืช ืืืืช ืืฉืืืื. ืืคืจืง ืืื, ื ืกืชืื ืขื ื-API ืฉื ืฆืืืช ืืืืคื ืืจืื ื ืืืื ืื ื ืกื ืคืฉืจืืช ืืืจืืช. ืืชืืื ืืืช ืืืื ืืจืืืืช ืืืชืจ ืืื ืฉืื ืืื ืืขืืจ, ืืื ื ืืื ืืืฆืืจ ืืืขื ืื ืฆืืืช ืืืคื ืฉืืืื ื ืฆืืจื.
โ ืคืจืืื ื ืืกืคืื ืขื ืืกืคืจ ื ืืชื ืืืฆืื ืืืชืืืช
โ ืืืืจืื'ืชืืื 25% ืื ืื ืืืืฆืขืืช ืงืืคืื - ื ืืื ืงืคืงื
โ ืขื ืืชืฉืืื ืขืืืจ ืืจืกืช ืื ืืืจ ืฉื ืืกืคืจ ืืฉืื ืกืคืจ ืืืงืืจืื ื ืืืืื.
ืืงืืจ: www.habr.com