æç²ã 5.3. éèšããã³ãŠã£ã³ããŠæäœ
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãKafka Streams ã®æãææãªéšåãæ€èšããŠãããŸãã ãããŸã§ãKafka ã¹ããªãŒã ã®æ¬¡ã®åŽé¢ã«ã€ããŠèª¬æããŠããŸããã
- åŠçããããžãäœæããã
- ã¹ããªãŒãã³ã° ã¢ããªã±ãŒã·ã§ã³ã§ã®ç¶æ ã®äœ¿çšã
- ããŒã¿ã¹ããªãŒã æ¥ç¶ãå®è¡ããŸãã
- ã€ãã³ã ã¹ããªãŒã (KStream) ãšæŽæ°ã¹ããªãŒã (KTable) ã®éãã
次ã®äŸã§ã¯ãããããã¹ãŠã®èŠçŽ ããŸãšããŸãã ãŸããã¹ããªãŒãã³ã° ã¢ããªã±ãŒã·ã§ã³ã®ãã XNUMX ã€ã®åªããæ©èœã§ãããŠã£ã³ããŠåŠçã«ã€ããŠãåŠç¿ããŸãã æåã®äŸã¯åçŽãªéèšã§ãã
5.3.1. æ¥çš®å¥æ ªåŒå£²äžé«ã®éèš
éçŽãšã°ã«ãŒãåã¯ãã¹ããªãŒãã³ã° ããŒã¿ãæäœããå Žåã«éèŠãªããŒã«ã§ãã åã ã®èšé²ãåãåã£ãéã®æ€æ»ã ãã§ã¯äžååãªããšããããããŸãã ããŒã¿ããè¿œå æ å ±ãæœåºããã«ã¯ãããŒã¿ãã°ã«ãŒãåããŠçµåããå¿ èŠããããŸãã
ãã®äŸã§ã¯ãããã€ãã®æ¥çã®äŒæ¥ã®æ ªåŒã®è²©å£²éã远跡ããå¿ èŠããããã€ãã¬ãŒããŒã®ã³ã¹ãã¥ãŒã ãçãŸãã å ·äœçã«ã¯ãåæ¥çã§æ倧ã®ã·ã§ã¢å£²äžé«ãèªã XNUMX 瀟ã«èå³ããããŸãã
ãã®ãããªéèšã§ã¯ãããŒã¿ãç®çã®åœ¢åŒã«å€æããããã«æ¬¡ã®ããã€ãã®æé ãå¿ èŠã«ãªããŸã (äžè¬çã«èšãã°)ã
- çã®æ ªååŒæ å ±ãå ¬éãããããã¯ããŒã¹ã®ãœãŒã¹ãäœæããŸãã StockTransaction åã®ãªããžã§ã¯ãã ShareVolume åã®ãªããžã§ã¯ãã«ãããããå¿ èŠããããŸãã éèŠãªã®ã¯ãStockTransaction ãªããžã§ã¯ãã«ã¯è²©å£²ã¡ã¿ããŒã¿ãå«ãŸããŠããŸãããå¿ èŠãªã®ã¯è²©å£²ãããŠããæ ªåŒæ°ã«é¢ããããŒã¿ã ãã§ãããšããããšã§ãã
- ShareVolume ããŒã¿ãéæèšå·ããšã«ã°ã«ãŒãåããŸãã ã·ã³ãã«ããšã«ã°ã«ãŒãåãããšããã®ããŒã¿ãæ ªåŒè²©å£²éã®å°èšã«æããããããšãã§ããŸãã KStream.groupBy ã¡ãœãã㯠KGroupedStream åã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãããšã«æ³šæããŠãã ããã ããã«ãKGroupedStream.reduce ã¡ãœãããåŒã³åºãããšã§ãKTable ã€ã³ã¹ã¿ã³ã¹ãååŸã§ããŸãã
KGroupedStream ã€ã³ã¿ãŒãã§ã€ã¹ãšã¯
KStream.groupBy ã¡ãœãããš KStream.groupByKey ã¡ãœããã¯ãKGroupedStream ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ããŸãã KGroupedStream ã¯ãããŒã«ãã£ãŠã°ã«ãŒãåãããåŸã®ã€ãã³ãã®ã¹ããªãŒã ã®äžéè¡šçŸã§ãã ããã¯ãçŽæ¥äœæ¥ããããšãç®çãšãããã®ã§ã¯ãããŸããã 代ããã«ãKGroupedStream ãéèšæäœã«äœ¿çšããããã®çµæã¯åžžã« KTable ã«ãªããŸãã ãŸããéèšæäœã®çµæ㯠KTable ã§ãããç¶æ ã¹ãã¢ã䜿çšãããããçµæãšããŠã®ãã¹ãŠã®æŽæ°ããã€ãã©ã€ã³ã®ããã«äžæµã«éä¿¡ãããããã§ã¯ãªãå¯èœæ§ããããŸãã
KTable.groupBy ã¡ãœããã¯ãåæ§ã® KGroupedTable (ããŒã«ãã£ãŠåã°ã«ãŒãåããããæŽæ°ã¹ããªãŒã ã®äžéè¡šçŸ) ãè¿ããŸãã
å°ãäŒæ©ããŠå³ãèŠãŠã¿ãŸãããã 5.9 ã¯ãç§ãã¡ãéæããããšã瀺ããŠããŸãã ãã®ããããžã¯ãã§ã«ããç¥ãããŠããã¯ãã§ãã
次ã«ããã®ããããžãŒã®ã³ãŒããèŠãŠã¿ãŸããã (ãã¡ã€ã« src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java ã«ãããŸã) (ãªã¹ã 5.2)ã
æå®ãããã³ãŒãã¯ããã®ç°¡æœããšãæ°è¡ã§å®è¡ããã倧éã®ã¢ã¯ã·ã§ã³ã«ãã£ãŠåºå¥ãããŸãã builder.stream ã¡ãœããã®æåã®ãã©ã¡ãŒã¿ãŒã«æ°ããç¹ãããããšã«æ°ã¥ããããããŸãããåæå AutoOffsetReset.EARLIEST (LATEST ããããŸã) ã®å€ã¯ãConsumed.withOffsetResetPolicy ã¡ãœããã䜿çšããŠèšå®ãããŸãã ãã®åæåã¯ãå KStream ãŸã㯠KTable ã®ãªãã»ãã ãªã»ããæŠç¥ãæå®ããããã«äœ¿çšã§ããæ§æã®ãªãã»ãã ãªã»ãã ãªãã·ã§ã³ãããåªå
ãããŸãã
GroupByKey ãš GroupBy
KStream ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ãã¬ã³ãŒããã°ã«ãŒãåããããã® XNUMX ã€ã®ã¡ãœãããGroupByKey ãš GroupBy ããããŸãã ã©ã¡ãã KGroupedTable ãè¿ãã®ã§ãäž¡è ã®éãã¯äœãªã®ãããã€ã©ã¡ãã䜿çšããã°ããã®ãçåã«æããããããããŸããã
GroupByKey ã¡ãœããã¯ãKStream å ã®ããŒããã§ã«ç©ºã§ãªãå Žåã«äœ¿çšãããŸãã ãããŠæãéèŠãªããšã¯ããåããŒãã£ã·ã§ã³åãå¿ èŠããã©ã°ãèšå®ãããŠããªãããšã§ãã
GroupBy ã¡ãœããã¯ãã°ã«ãŒãåããŒãå€æŽãããããšãåæãšããŠãããããååå²ãã©ã°ã true ã«èšå®ãããŠããŸãã GroupBy ã¡ãœããã®åŸã«çµåãéèšãªã©ãå®è¡ãããšãèªåçã«åããŒãã£ã·ã§ã³åãããŸãã
æŠèŠ: å¯èœãªéããGroupBy ã§ã¯ãªã GroupByKey ã䜿çšããå¿ èŠããããŸãã
mapValues ã¡ãœãããš groupBy ã¡ãœãããäœãè¡ããã¯æãããªã®ã§ãsum() ã¡ãœãã (src/main/java/bbejeck/model/ShareVolume.java ã«ãããŸã) ãèŠãŠã¿ãŸããã (ãªã¹ã 5.3)ã
ShareVolume.sum ã¡ãœããã¯åšåº«è²©å£²éã®çŽ¯èšãè¿ããäžé£ã®èšç®å
šäœã®çµæã KTable ãªããžã§ã¯ãã«ãªããŸãã ã ããã§ãKTable ãæãã圹å²ãç解ã§ããŸããã ShareVolume ãªããžã§ã¯ããå°çãããšã察å¿ãã KTable ãªããžã§ã¯ãã«ææ°ã®æŽæ°ãä¿åãããŸãã ãã¹ãŠã®æŽæ°ã¯åã® shareVolumeKTable ã«åæ ãããŸããããã¹ãŠãããã«éä¿¡ãããããã§ã¯ãªãããšã«æ³šæããããšãéèŠã§ãã
次ã«ããã® KTable ã䜿çšã㊠(ååŒæ ªåŒæ°ããšã«) éèšããåæ¥çã§æãååŒé«ã®å€ã XNUMX 瀟ãå°ãåºããŸãã ãã®å Žåã®ã¢ã¯ã·ã§ã³ã¯ãæåã®éèšã®å Žåãšåæ§ã«ãªããŸãã
- å¥ã® groupBy æäœãå®è¡ããŠãåã ã® ShareVolume ãªããžã§ã¯ããæ¥çããšã«ã°ã«ãŒãåããŸãã
- ShareVolume ãªããžã§ã¯ãã®èŠçŽãéå§ããŸãã ä»åã®éçŽãªããžã§ã¯ãã¯åºå®ãµã€ãºã®åªå ãã¥ãŒã§ãã ãã®åºå®ãµã€ãºã®ãã¥ãŒã§ã¯ã売åŽãããæ ªåŒã®éãæãå€ã XNUMX 瀟ã ããä¿æãããŸãã
- åã®æ®µèœã®ãã¥ãŒãæååå€ã«ãããããæ¥çããšã«æãååŒãããŠããäžäœ XNUMX ã€ã®éæãæ°å€ã§è¿ããŸãã
- çµæãæåå圢åŒã§ãããã¯ã«æžã蟌ã¿ãŸãã
å³ã§ã¯ã å³ 5.10 ã«ããŒã¿ ãã㌠ããããž ã°ã©ãã瀺ããŸãã ã芧ã®ãšãããXNUMX åç®ã®åŠçã¯éåžžã«åçŽã§ãã
ãã® 5 åç®ã®åŠçã®æ§é ãæ確ã«ç解ããã®ã§ããœãŒã¹ ã³ãŒãã«ç§»ããŸã (ãã¡ã€ã« src/main/java/bbejeck/chapter_5.4/AggregationsAndReducingExample.java ã«ãããŸã) (ãªã¹ã XNUMX)ã ã
ãã®ã€ãã·ã£ã©ã€ã¶ã«ã¯ãfixedQueue å€æ°ãå«ãŸããŠããŸãã ããã¯ãååŒãããæ ªåŒã®éé ã§äžäœ N 件ã®çµæã远跡ããããã«äœ¿çšããã java.util.TreeSet ã®ã¢ããã¿ãŒã§ããã«ã¹ã¿ã ãªããžã§ã¯ãã§ãã
groupBy åŒã³åºããš mapValues åŒã³åºãã«ã€ããŠã¯ãã§ã«èª¬æããã®ã§ããããã«ã€ããŠã¯èª¬æããŸãã (KTable.print ã¡ãœããã¯éæšå¥šã§ãããããKTable.toStream ã¡ãœãããåŒã³åºããŠããŸã)ã ãã ããaggregate() ã® KTable ããŒãžã§ã³ããŸã èŠãŠããªãã®ã§ãå°ãæéããããŠèª¬æããŸãã
èŠããŠãããšãããKTable ãç°ãªãã®ã¯ãåãããŒãæã€ã¬ã³ãŒããæŽæ°ãšèŠãªãããããšã§ãã KTable ã¯å€ããšã³ããªãæ°ãããšã³ããªã«çœ®ãæããŸãã éèšãåæ§ã®æ¹æ³ã§è¡ãããåãããŒãæã€ææ°ã®ã¬ã³ãŒããéèšãããŸãã ã¬ã³ãŒããå°çãããšãå ç®åš (éçŽã¡ãœããåŒã³åºãã® XNUMX çªç®ã®ãã©ã¡ãŒã¿ãŒ) ã䜿çšããŠãFixedSizePriorityQueue ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«è¿œå ãããŸãããåãããŒãæã€å¥ã®ã¬ã³ãŒããæ¢ã«ååšããå Žåã¯ãæžç®åš (éçŽã¡ãœããåŒã³åºãã® XNUMX çªç®ã®ãã©ã¡ãŒã¿ãŒ) ã䜿çšããŠå€ãã¬ã³ãŒããåé€ãããŸããéçŽã¡ãœããåŒã³åºã)ã
ããã¯ãã¢ã°ãªã²ãŒã¿ãŒã§ããFixedSizePriorityQueueãããã¹ãŠã®å€ãXNUMXã€ã®ããŒã§éèšããã®ã§ã¯ãªããæãååŒãããŠããNçš®é¡ã®æ ªã®æ°éã®ç§»ååèšãä¿åããããšãæå³ããŸãã åä¿¡ããåãšã³ããªã«ã¯ããããŸã§ã«è²©å£²ãããæ ªåŒã®ç·æ°ãå«ãŸããŠããŸãã KTable ã¯ãåæŽæ°ã®ããŒãªã³ã°éèšãå¿ èŠãšããã«ãçŸåšã©ã®äŒæ¥ã®æ ªãæãååŒãããŠãããã«é¢ããæ å ±ãæäŸããŸãã
ç§ãã¡ã¯ XNUMX ã€ã®éèŠãªããšãè¡ãããšãåŠã³ãŸããã
- KTable å ã®å€ãå ±éããŒã§ã°ã«ãŒãåããŸãã
- ãããã®ã°ã«ãŒãåãããå€ã«å¯ŸããŠããŒã«ã¢ãããéèšãªã©ã®äŸ¿å©ãªæäœãå®è¡ããŸãã
ãããã®æäœã®å®è¡æ¹æ³ãç¥ãããšã¯ãKafka Streams ã¢ããªã±ãŒã·ã§ã³ãä»ããŠç§»åããããŒã¿ã®æå³ãç解ããããŒã¿ãã©ã®ãããªæ å ±ãéã¶ããç解ããããã«éèŠã§ãã
ãŸããæ¬æžã®ååã§èª¬æããéèŠãªæŠå¿µã®ããã€ãããŸãšããŸããã 第 4 ç« ã§ã¯ãã¹ããªãŒãã³ã° ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãã©ãŒã«ã ãã¬ã©ã³ããªããŒã«ã«ç¶æ ãããã«éèŠã§ãããã«ã€ããŠèª¬æããŸããã ãã®ç« ã®æåã®äŸã§ã¯ãããŒã«ã«ç¶æ ããªãéåžžã«éèŠã§ãããã説æããŸãããããŒã«ã«ç¶æ ã«ããããã§ã«èŠãæ å ±ã远跡ã§ããããã«ãªããŸãã ããŒã«ã« ã¢ã¯ã»ã¹ã«ãããããã¯ãŒã¯é 延ãåé¿ãããã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžãããšã©ãŒèæ§ãåäžããŸãã
ããŒã«ã¢ãããŸãã¯éèšæäœãå®è¡ãããšãã¯ãç¶æ ã¹ãã¢ã®ååãæå®ããå¿ èŠããããŸãã ããŒã«ã¢ããããã³éèšæäœã¯ KTable ã€ã³ã¹ã¿ã³ã¹ãè¿ããKTable ã¯ç¶æ ã¹ãã¬ãŒãžã䜿çšããŠå€ãçµæãæ°ããçµæã«çœ®ãæããŸãã ãããŸã§èŠãŠããããã«ããã¹ãŠã®æŽæ°ããã€ãã©ã€ã³ã«éä¿¡ãããããã§ã¯ãããŸãããéèšæäœã¯æŠèŠæ å ±ãçæããããã«èšèšãããŠãããããããã¯éèŠã§ãã ããŒã«ã«ç¶æ ãé©çšããªãå ŽåãKTable ã¯ãã¹ãŠã®éèšçµæãšããŒã«ã¢ããçµæã転éããŸãã
次ã«ãç¹å®ã®æéå ã§ã®éèšãªã©ã®æäœããããããŠã£ã³ããŠæäœã®å®è¡ã«ã€ããŠèŠãŠãããŸãã
5.3.2. ãŠã£ã³ããŠæäœ
åã®ã»ã¯ã·ã§ã³ã§ã¯ãã¹ã©ã€ãã£ã³ã°ç³ã¿èŸŒã¿ãšéèšã«ã€ããŠçŽ¹ä»ããŸããã ãã®ã¢ããªã±ãŒã·ã§ã³ã¯ãæ ªåŒè²©å£²éã®ç¶ç¶çãªããŒã«ã¢ãããå®è¡ãããã®åŸãååŒæã§æãååŒãããŠãã XNUMX ã€ã®æ ªåŒãéèšããŸããã
å Žåã«ãã£ãŠã¯ããã®ãããªç¶ç¶çãªéèšãšçµæã®ããŒã«ã¢ãããå¿ èŠã«ãªãããšããããŸãã ãŸããç¹å®ã®æéã«ã®ã¿æäœãå®è¡ããå¿ èŠãããå ŽåããããŸãã ããšãã°ãéå» 10 åéã«ç¹å®ã®äŒæ¥ã®æ ªåŒã«å¯ŸããŠè¡ãããçºæ¿ååŒã®æ°ãèšç®ããŸãã ãŸãã¯ãéå» 15 åéã«æ°ããåºåãããŒãã¯ãªãã¯ãããŠãŒã¶ãŒã®æ°ã ã¢ããªã±ãŒã·ã§ã³ã¯ãã®ãããªæäœãè€æ°åå®è¡ããå ŽåããããŸããããã®çµæã¯æå®ãããæé (ã¿ã€ã ãŠã£ã³ããŠ) ã«ã®ã¿é©çšãããŸãã
è²·ãæããšã®çºæ¿ååŒã®ã«ãŠã³ã
次ã®äŸã§ã¯ãè€æ°ã®ãã¬ãŒã㌠(倧èŠæš¡ãªçµç¹ãŸãã¯è³¢æãªå人æè³å®¶) ã«ãããæ ªåŒååŒã远跡ããŸãã
ãã®è¿œè·¡ã«ã¯ XNUMX ã€ã®çç±ãèããããŸãã ãã® XNUMX ã€ã¯ãåžå ŽãªãŒããŒãäœã売買ããŠããããç¥ãå¿ èŠæ§ã§ãã ãããã®å€§æäŒæ¥ãæŽç·Žãããæè³å®¶ããã£ã³ã¹ãèŠåºããã®ã§ããã°ã圌ãã®æŠç¥ã«åŸãã®ã¯çã«ããªã£ãŠããŸãã XNUMX çªç®ã®çç±ã¯ãéæ³ãªã€ã³ãµã€ããŒååŒã®å¯èœæ§ã®ããå åãèŠã€ããããšãã欲æ±ã§ãã ãããè¡ãã«ã¯ã倧èŠæš¡ãªå£²äžã®æ¥å¢ãšéèŠãªãã¬ã¹ ãªãªãŒã¹ã®çžé¢é¢ä¿ãåæããå¿ èŠããããŸãã
ãã®ãããªè¿œè·¡ã¯æ¬¡ã®æé ã§æ§æãããŸãã
- æ ªåŒååŒãããã¯ããèªã¿åãããã®ã¹ããªãŒã ãäœæããŸãã
- åä¿¡ã¬ã³ãŒããè³Œå ¥è ID ãšéæèšå·ããšã«ã°ã«ãŒãåããŸãã groupBy ã¡ãœãããåŒã³åºããšãKGroupedStream ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãè¿ãããŸãã
- KGroupedStream.windowedBy ã¡ãœããã¯ãæéãŠã£ã³ããŠã«éå®ãããããŒã¿ ã¹ããªãŒã ãè¿ããŸããããã«ããããŠã£ã³ããŠéèšãå¯èœã«ãªããŸãã ãŠã£ã³ããŠã®çš®é¡ã«å¿ããŠãTimeWindowedKStream ãŸã㯠SessionWindowedKStream ãè¿ãããŸãã
- éèšæäœã®ãã©ã³ã¶ã¯ã·ã§ã³æ°ã ãŠã£ã³ããŠåãããããŒã¿ ãããŒã«ãã£ãŠããã®ã«ãŠã³ãã§ç¹å®ã®ã¬ã³ãŒããèæ ®ããããã©ããã決ãŸããŸãã
- éçºäžã«çµæããããã¯ã«æžã蟌ãããã³ã³ãœãŒã«ã«åºåããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã®ããããžã¯åçŽã§ãããæ確ãªå³ããããšåœ¹ç«ã¡ãŸãã å³ãèŠãŠã¿ãŸãããã 5.11ã
次ã«ããŠã£ã³ããŠæäœã®æ©èœãšå¯Ÿå¿ããã³ãŒããèŠãŠãããŸãã
çªã®çš®é¡
Kafka Streams ã«ã¯ XNUMX çš®é¡ã®ãŠã£ã³ããŠããããŸãã
- ã»ãã·ã§ã³ç;
- ãã¿ã³ããªã³ã°ãïŒã¿ã³ããªã³ã°ïŒã
- ã¹ã©ã€ãã£ã³ã°/ãããã³ã°ã
ã©ã¡ããéžæãããã¯ãããžãã¹èŠä»¶ã«ãã£ãŠç°ãªããŸãã ã¿ã³ããªã³ã° ãŠã£ã³ããŠãšãžã£ã³ãã³ã° ãŠã£ã³ããŠã¯æéå¶éããããŸãããã»ãã·ã§ã³ ãŠã£ã³ããŠã¯ãŠãŒã¶ãŒã®ã¢ã¯ãã£ããã£ã«ãã£ãŠå¶éãããŸããã»ãã·ã§ã³ã®ç¶ç¶æéã¯ãŠãŒã¶ãŒãã©ãã ãã¢ã¯ãã£ãã§ãããã«ãã£ãŠã®ã¿æ±ºãŸããŸãã èŠããŠããã¹ãäž»ãªç¹ã¯ããã¹ãŠã®ãŠã£ã³ã㊠ã¿ã€ãã¯ã·ã¹ãã æéã§ã¯ãªãããšã³ããªã®æ¥ä»/ã¿ã€ã ã¹ã¿ã³ãã«åºã¥ããŠãããšããããšã§ãã
次ã«ãåãŠã£ã³ã㊠ã¿ã€ãã§ããããžãå®è£ ããŸãã å®å šãªã³ãŒãã¯æåã®äŸã§ã®ã¿ç€ºãããŠãããä»ã®ã¿ã€ãã®ãŠã£ã³ããŠã®å Žåã¯ããŠã£ã³ããŠæäœã®ã¿ã€ã以å€ã¯äœãå€ãããŸããã
ã»ãã·ã§ã³ãŠã£ã³ããŠ
ã»ãã·ã§ã³ ãŠã£ã³ããŠã¯ãä»ã®çš®é¡ã®ãŠã£ã³ããŠãšã¯å€§ããç°ãªããŸãã ãããã¯ãæéã§ã¯ãªãããŠãŒã¶ãŒã®ã¢ã¯ãã£ãã㣠(ãŸãã¯è¿œè·¡ãããšã³ãã£ãã£ã®ã¢ã¯ãã£ããã£) ã«ãã£ãŠå¶éãããŸãã ã»ãã·ã§ã³ ãŠã£ã³ããŠã¯ãéã¢ã¯ãã£ããªæéã«ãã£ãŠåºåãããŸãã
å³ 5.12 ã«ã»ãã·ã§ã³ ãŠã£ã³ããŠã®æŠå¿µã瀺ããŸãã å°ããã»ãã·ã§ã³ã¯ããã®å·ŠåŽã®ã»ãã·ã§ã³ãšããŒãžãããŸãã å³åŽã®ã»ãã·ã§ã³ã¯ãé·æééã¢ã¯ãã£ããªç¶æ ãç¶ããããåé¢ãããŸãã ã»ãã·ã§ã³ ãŠã£ã³ããŠã¯ãŠãŒã¶ãŒ ã¢ã¯ãã£ããã£ã«åºã¥ããŠããŸããããšã³ããªã®æ¥ä»/æå»ã¹ã¿ã³ãã䜿çšããŠããšã³ããªãã©ã®ã»ãã·ã§ã³ã«å±ããŠããããå€æããŸãã
ã»ãã·ã§ã³ãŠã£ã³ããŠã䜿çšããŠæ ªåŒååŒã远跡ãã
ã»ãã·ã§ã³ ãŠã£ã³ããŠã䜿çšããŠãçºæ¿ãã©ã³ã¶ã¯ã·ã§ã³ã«é¢ããæ å ±ãååŸããŠã¿ãŸãããã ã»ãã·ã§ã³ãŠã£ã³ããŠã®å®è£ ããªã¹ã 5.5 ã«ç€ºããŸã (ãã㯠src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java ã«ãããŸã)ã
ãã®ããããžã®ã»ãšãã©ã®æäœã¯ãã§ã«èŠãŠããã®ã§ãããã§å床確èªããå¿
èŠã¯ãããŸããã ãã ããããã«ã¯ããã€ãã®æ°ããèŠçŽ ããããŸãã®ã§ãããã«ã€ããŠã¯ãããã説æããŸãã
éåžžãgroupBy æäœã¯ãããçš®ã®éèšæäœ (éèšãããŒã«ã¢ããããŸãã¯ã«ãŠã³ã) ãå®è¡ããŸãã çŸåšãŸã§ã®åèšã䜿çšãã环ç©éèšããŸãã¯æå®ããæéæ å ã®ã¬ã³ãŒããèæ ®ãããŠã£ã³ããŠéèšã®ãããããå®è¡ã§ããŸãã
ãªã¹ã 5.5 ã®ã³ãŒãã¯ãã»ãã·ã§ã³ ãŠã£ã³ããŠå ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®æ°ãã«ãŠã³ãããŸãã å³ã§ã¯ã 5.13 ãããã®ã¢ã¯ã·ã§ã³ã¯æ®µéçã«åæãããŸãã
windowedBy(SessionWindows.with(twentySeconds).until(fifteenMinutes)) ãåŒã³åºãããšã§ãéã¢ã¯ãã£ãæéã 20 ç§ãæç¶æéã 15 åã®ã»ãã·ã§ã³ ãŠã£ã³ããŠãäœæããŸãã 20 ç§ã®ã¢ã€ãã«ééã¯ãã¢ããªã±ãŒã·ã§ã³ãçŸåšã®ã»ãã·ã§ã³ã®çµäºãŸãã¯éå§ãã 20 ç§ä»¥å ã«å°çãããšã³ããªãçŸåšã® (ã¢ã¯ãã£ããª) ã»ãã·ã§ã³ã«å«ããããšãæå³ããŸãã
次ã«ãã»ãã·ã§ã³ ãŠã£ã³ããŠã§ã©ã®éèšæäœãå®è¡ããå¿
èŠãããããæå®ããŸã (ãã®å Žå㯠count)ã åä¿¡ãšã³ããªãéã¢ã¯ãã£ãæé (æ¥ä»/ã¿ã€ã ã¹ã¿ã³ãã®ã©ã¡ããã®åŽ) ã®å€åŽã«ããå Žåãã¢ããªã±ãŒã·ã§ã³ã¯æ°ããã»ãã·ã§ã³ãäœæããŸãã ä¿æééãšã¯ãã»ãã·ã§ã³ãäžå®æéç¶æããããšãæå³ããã»ãã·ã§ã³ã®éã¢ã¯ãã£ãæéãè¶
ããŠãæ¥ç¶ã§ããé
延ããŒã¿ãèš±å¯ããŸãã ããã«ãããŒãžã®çµæãšããŠåŸãããæ°ããã»ãã·ã§ã³ã®éå§ãšçµäºã¯ãæãå€ãæ¥ä»/ã¿ã€ã ã¹ã¿ã³ããšææ°ã®æ¥ä»/ã¿ã€ã ã¹ã¿ã³ãã«å¯Ÿå¿ããŸãã
count ã¡ãœããã®ããã€ãã®ãšã³ããªãèŠãŠãã»ãã·ã§ã³ãã©ã®ããã«æ©èœããããèŠãŠã¿ãŸããã (è¡š 5.1)ã
ã¬ã³ãŒããå°çãããšãåãããŒãçŸåšã®æ¥ä»/ã¿ã€ã ã¹ã¿ã³ã - éã¢ã¯ãã£ãæéãããçãçµäºæå»ãããã³çŸåšã®æ¥ä»/ã¿ã€ã ã¹ã¿ã³ã + éã¢ã¯ãã£ãæéããã倧ããéå§æå»ãæã€æ¢åã®ã»ãã·ã§ã³ãæ€çŽ¢ãããŸãã ãããèæ
®ãããšãè¡šãã 5.1 ã€ã®ãšã³ããªãåŸãããŸãã XNUMX ã¯æ¬¡ã®ããã« XNUMX ã€ã®ã»ãã·ã§ã³ã«ããŒãžãããŸãã
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:XNUMX ã«éå§ããŠçµäºããŸãã
4. ã¬ã³ãŒã 4 ãå°çãã23:59:45 ãã 00:00:25 ãŸã§ã®ã»ãã·ã§ã³ãæ¢ããŠããŸãã ä»åã¯ã»ãã·ã§ã³ 1 ãš 2 ã®äž¡æ¹ãèŠã€ãããéå§æå»ã 00:00:00ãçµäºæå»ã 00:00:15 ã® XNUMX ã€ã®ã»ãã·ã§ã³ã XNUMX ã€ã«çµåãããŸãã
ãã®ã»ã¯ã·ã§ã³ã®èª¬æããã次ã®éèŠãªãã¥ã¢ã³ã¹ãèŠããŠãã䟡å€ããããŸãã
- ã»ãã·ã§ã³ã¯åºå®ãµã€ãºã®ãŠã£ã³ããŠã§ã¯ãããŸããã ã»ãã·ã§ã³ã®ç¶ç¶æéã¯ãæå®ãããæéå ã®ã¢ã¯ãã£ããã£ã«ãã£ãŠæ±ºãŸããŸãã
- ããŒã¿å ã®æ¥ä»/æå»ã¹ã¿ã³ãã«ãã£ãŠãã€ãã³ããæ¢åã®ã»ãã·ã§ã³å ã«è©²åœããããã¢ã€ãã«æéå ã«è©²åœãããã決ãŸããŸãã
次ã«ã次ã®ã¿ã€ãã®çªã§ãããã¿ã³ããªã³ã°ãçªã«ã€ããŠèª¬æããŸãã
ãã¿ã³ããªã³ã°ããŠã£ã³ããŠ
ã¿ã³ããªã³ã° ãŠã£ã³ããŠã¯ãç¹å®ã®æéå ã«çºçããã€ãã³ãããã£ããã£ããŸãã ç¹å®ã®äŒæ¥ã®ãã¹ãŠã®æ ªåŒååŒã 20 ç§ããšã«ãã£ããã£ããå¿ èŠãããããã®æéäžã®ãã¹ãŠã®ã€ãã³ããåéãããšããŸãã 20 ç§ã®ééãçµäºãããšããŠã£ã³ããŠãåãæ¿ãããæ°ãã 20 ç§ã®èŠ³å¯ééã«ç§»åããŸãã å³ 5.14 ã¯ãã®ç¶æ³ã瀺ããŠããŸãã
ã芧ã®ãšãããéå» 20 ç§éã«åä¿¡ãããã¹ãŠã®ã€ãã³ãããŠã£ã³ããŠã«å«ãŸããŠããŸãã ãã®æéãçµäºãããšãæ°ãããŠã£ã³ããŠãäœæãããŸãã
ãªã¹ã 5.6 ã¯ãã¿ã³ããªã³ã° ãŠã£ã³ããŠã䜿çšã㊠20 ç§ããšã«æ ªåŒååŒããã£ããã£ããã³ãŒãã瀺ããŠããŸã (src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java ã«ãããŸã)ã
TimeWindows.of ã¡ãœããåŒã³åºãã«å¯Ÿãããã®å°ããªå€æŽã«ãããã¿ã³ããªã³ã° ãŠã£ã³ããŠã䜿çšã§ããããã«ãªããŸãã ãã®äŸã§ã¯ until() ã¡ãœãããåŒã³åºããŠããªããããããã©ã«ãã®ä¿æééã§ãã 24 æéã䜿çšãããŸãã
æåŸã«ããŠã£ã³ã㊠ãªãã·ã§ã³ã®æåŸã®ããããã³ã°ããŠã£ã³ããŠã«é²ã¿ãŸãã
ã¹ã©ã€ã (ããžã£ã³ãã³ã°ã) ãŠã£ã³ããŠ
ã¹ã©ã€ãã£ã³ã°/ãããã³ã° ãŠã£ã³ããŠã¯ã¿ã³ããªã³ã° ãŠã£ã³ããŠã«äŒŒãŠããŸãããè¥å¹²ã®éãããããŸãã ã¹ã©ã€ãã£ã³ã° ãŠã£ã³ããŠã¯ãæè¿ã®ã€ãã³ããåŠçããããã®æ°ãããŠã£ã³ããŠãäœæããåã«ãæéééãçµäºãããŸã§åŸ æ©ããŸããã ãŠã£ã³ããŠæéãããçãåŸ æ©ééã®åŸã«ãæ°ããèšç®ãéââå§ãããŸãã
ã¿ã³ããªã³ã° ãŠã£ã³ããŠãšãžã£ã³ãã³ã° ãŠã£ã³ããŠã®éãã説æããããã«ã蚌åžååŒæã®ååŒãã«ãŠã³ãããäŸã«æ»ããŸãããã ç§ãã¡ã®ç®æšã¯äŸç¶ãšããŠãã©ã³ã¶ã¯ã·ã§ã³æ°ãã«ãŠã³ãããããšã§ãããã«ãŠã³ã¿ãŒãæŽæ°ãããŸã§ãã£ãšåŸ æ©ããå¿ èŠã¯ãããŸããã 代ããã«ãããçãééã§ã«ãŠã³ã¿ãŒãæŽæ°ããŸãã ããšãã°ãå³ã«ç€ºãããã«ããã©ã³ã¶ã¯ã·ã§ã³æ°ã¯åŒãç¶ã 20 ç§ããšã«ã«ãŠã³ãããŸãããã«ãŠã³ã¿ã¯ 5 ç§ããšã«æŽæ°ãããŸãã 5.15ã ãã®å Žåãæçµçã«ããŒã¿ãéè€ãã XNUMX ã€ã®çµæãŠã£ã³ããŠã衚瀺ãããŸãã
ãªã¹ã 5.7 ã¯ãã¹ã©ã€ãã£ã³ã° ãŠã£ã³ããŠãå®çŸ©ããã³ãŒãã瀺ããŠããŸã (src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java ã«ãããŸã)ã
ã¿ã³ããªã³ã° ãŠã£ã³ããŠã¯ãadvancedBy() ã¡ãœãããžã®åŒã³åºããè¿œå ããããšã§ãããã³ã° ãŠã£ã³ããŠã«å€æã§ããŸãã 瀺ãããŠããäŸã§ã¯ãä¿åéé㯠15 åã§ãã
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãéèšçµæãæéæ ã«å¶éããæ¹æ³ã説æããŸããã ãã®ã»ã¯ã·ã§ã³ã§ç¹ã«æ¬¡ã® XNUMX ã€ã®ããšãèŠããŠãããŠãã ããã
- ã»ãã·ã§ã³ ãŠã£ã³ããŠã®ãµã€ãºã¯ãæéã§ã¯ãªãããŠãŒã¶ãŒã®ã¢ã¯ãã£ããã£ã«ãã£ãŠå¶éãããŸãã
- ãã¿ã³ããªã³ã°ããŠã£ã³ããŠã¯ãäžå®æéå ã®ã€ãã³ãã®æŠèŠãæäŸããŸãã
- ãžã£ã³ã ãŠã£ã³ããŠã®æéã¯åºå®ãããŠããŸãããé »ç¹ã«æŽæ°ãããããããã¹ãŠã®ãŠã£ã³ããŠã«éè€ãããšã³ããªãå«ãŸããå ŽåããããŸãã
次ã«ãæ¥ç¶ã®ããã« KTable ã KStream ã«å€æããæ¹æ³ãåŠã³ãŸãã
5.3.3. KStream ãªããžã§ã¯ããš KTable ãªããžã§ã¯ãã®æ¥ç¶
第 4 ç« ã§ã¯ãXNUMX ã€ã® KStream ãªããžã§ã¯ãã®æ¥ç¶ã«ã€ããŠèª¬æããŸããã 次ã«ãKTable ãš KStream ãæ¥ç¶ããæ¹æ³ãåŠç¿ããå¿ èŠããããŸãã ããã¯æ¬¡ã®ãããªåçŽãªçç±ã§å¿ èŠã«ãªãå ŽåããããŸãã KStream ã¯ã¬ã³ãŒãã®ã¹ããªãŒã ã§ãããKTable ã¯ã¬ã³ãŒãæŽæ°ã®ã¹ããªãŒã ã§ãããå Žåã«ãã£ãŠã¯ãKTable ããã®æŽæ°ã䜿çšããŠã¬ã³ãŒã ã¹ããªãŒã ã«è¿œå ã®ã³ã³ããã¹ããè¿œå ãããå ŽåããããŸãã
蚌åžååŒæã®ååŒæ°ã«é¢ããããŒã¿ãååŸããé¢é£ããæ¥çã®èšŒåžååŒæã®ãã¥ãŒã¹ãšçµã¿åãããŠã¿ãŸãããã ãã§ã«æã£ãŠããã³ãŒããèæ ®ããŠããããéæããããã«äœãããå¿ èŠããããã次ã«ç€ºããŸãã
- æ ªåŒååŒæ°ã®ããŒã¿ãå«ã KTable ãªããžã§ã¯ãã KStream ã«å€æããããŒããã®éæèšå·ã«å¯Ÿå¿ããæ¥çš®ã瀺ãããŒã«çœ®ãæããŸãã
- 蚌åžååŒæãã¥ãŒã¹ã®ãããã¯ããããŒã¿ãèªã¿åã KTable ãªããžã§ã¯ããäœæããŸãã ãã®æ°ãã KTable ã¯ç£æ¥åéããšã«åé¡ãããŸãã
- ãã¥ãŒã¹ã®æŽæ°æ å ±ãæ¥çã»ã¯ã¿ãŒããšã®èšŒåžååŒæã®ååŒæ°ã«é¢ããæ å ±ãšçµã³ä»ããŸãã
次ã«ããã®ã¢ã¯ã·ã§ã³ãã©ã³ãå®è¡ããæ¹æ³ãèŠãŠã¿ãŸãããã
KTable ã KStream ã«å€æãã
KTable ã KStream ã«å€æããã«ã¯ã次ã®æé ãå®è¡ããå¿ èŠããããŸãã
- KTable.toStream() ã¡ãœãããåŒã³åºããŸãã
- KStream.map ã¡ãœãããåŒã³åºããŠãããŒãæ¥çåã«çœ®ãæããŠãWindow ã€ã³ã¹ã¿ã³ã¹ãã Transactionsummary ãªããžã§ã¯ããååŸããŸãã
ãããã®æäœã次ã®ããã«é£éãããŸã (ã³ãŒãã¯ãã¡ã€ã« src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java ã«ãããŸã) (ãªã¹ã 5.8)ã
KStream.map æäœãå®è¡ããŠãããããè¿ããã KStream ã€ã³ã¹ã¿ã³ã¹ã¯ãæ¥ç¶ã§äœ¿çšããããšãã«èªåçã«åããŒãã£ã·ã§ã³åãããŸãã
å€æããã»ã¹ã¯å®äºããŸããã次ã«ãæ ªåŒãã¥ãŒã¹ãèªã¿åãããã® KTable ãªããžã§ã¯ããäœæããå¿ èŠããããŸãã
æ ªåŒãã¥ãŒã¹çšã®KTableã®äœæ
幞ããªããšã«ãKTable ãªããžã§ã¯ãã®äœæã«ã¯ 5 è¡ã®ã³ãŒãããããããŸãã (ã³ãŒã㯠src/main/java/bbejeck/chapter_5.9/CountingWindowingAndKtableJoinExample.java ã«ãããŸã) (ãªã¹ã XNUMX)ã
æåå Serdes ãèšå®ã§äœ¿çšããããããSerde ãªããžã§ã¯ããæå®ããå¿
èŠããªãããšã«æ³šæããŠãã ããã ãŸããEARLIEST åæã䜿çšãããšãããŒãã«ã®æåããã¬ã³ãŒããå
¥åãããŸãã
ããã§ãæåŸã®ã¹ãããã§ããæ¥ç¶ã«é²ãããšãã§ããŸãã
ãã¥ãŒã¹æŽæ°ãšãã©ã³ã¶ã¯ã·ã§ã³æ°ããŒã¿ãçµã³ä»ãã
ã€ãªãããäœãããšã¯é£ãããããŸããã é¢é£ããæ¥çã®æ ªåŒãã¥ãŒã¹ããªãå Žåã«åããŠãå·Šçµåã䜿çšããŸã (å¿ èŠãªã³ãŒãã¯ãã¡ã€ã« src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java ã«ãããŸã) (ãªã¹ã 5.10)ã
ãã® leftJoin æŒç®åã¯éåžžã«åçŽã§ãã 第 4 ç« ã®çµåãšã¯ç°ãªããKStream-KTable çµåãå®è¡ããå ŽåãKTable ã«ã¯ããŒããšã«ãšã³ããªã XNUMX ã€ã ãååšãããããJoinWindow ã¡ãœããã¯äœ¿çšãããŸããã ãã®ãããªæ¥ç¶ã«ã¯æéã®å¶éããããŸãããã¬ã³ãŒã㯠KTable ã«ååšããããååšããŸããã äž»ãªçµè«: KTable ãªããžã§ã¯ãã䜿çšãããšãæŽæ°é »åºŠã®äœãåç
§ããŒã¿ã§ KStream ã匷åã§ããŸãã
次ã«ãKStream ããã€ãã³ãã匷åããããå¹ççãªæ¹æ³ãèŠãŠãããŸãã
5.3.4. GlobalKTable ãªããžã§ã¯ã
ã芧ã®ãšãããã€ãã³ã ã¹ããªãŒã ã匷åããããã€ãã³ã ã¹ããªãŒã ã«ã³ã³ããã¹ããè¿œå ããå¿ èŠããããŸãã 第 4 ç« ã§ã¯ 4 ã€ã® KStream ãªããžã§ã¯ãéã®æ¥ç¶ã«ã€ããŠèª¬æããåã®ã»ã¯ã·ã§ã³ã§ã¯ KStream ãš KTable éã®æ¥ç¶ã«ã€ããŠèª¬æããŸããã ãããã®ãã¹ãŠã®ã±ãŒã¹ã§ãããŒãæ°ããã¿ã€ããŸãã¯å€ã«ãããã³ã°ãããšãã«ãããŒã¿ ã¹ããªãŒã ãååå²ããå¿ èŠããããŸãã åããŒãã£ã·ã§ã³åã¯æ瀺çã«è¡ãããå Žåãããã°ãKafka Streams ã«ãã£ãŠèªåçã«è¡ãããå ŽåããããŸãã ããŒãå€æŽãããã¬ã³ãŒããæ°ããã»ã¯ã·ã§ã³ã«é 眮ãããå¿ èŠããããããåããŒãã£ã·ã§ã³åãå¿ èŠã§ããããããªããšæ¥ç¶ãäžå¯èœã«ãªããŸã (ããã«ã€ããŠã¯ã第 4.2.4 ç« ã®ã»ã¯ã·ã§ã³ XNUMX ã®ãããŒã¿ã®åããŒãã£ã·ã§ã³åãã»ã¯ã·ã§ã³ã§èª¬æããŸãã)ã
åããŒãã£ã·ã§ã³åã«ã¯ã³ã¹ããããã
åããŒãã£ã·ã§ã³åã«ã¯ã³ã¹ããããããŸããäžéãããã¯ãäœæããããéè€ããããŒã¿ãå¥ã®ãããã¯ã«ä¿åãããããããã®è¿œå ã®ãªãœãŒã¹ ã³ã¹ãã§ãã ãŸãããã®ãããã¯ããã®æžã蟌ã¿ãšèªã¿åãã«ããã¬ã€ãã³ã·ãå¢å ããããšãæå³ããŸãã ããã«ãè€æ°ã®ã¢ã¹ãã¯ããŸãã¯ãã£ã¡ã³ã·ã§ã³éã§çµåããå¿ èŠãããå Žåã¯ãçµåããã§ãŒã³ããã¬ã³ãŒããæ°ããããŒã§ãããããåããŒãã£ã·ã§ã³åããã»ã¹ãå床å®è¡ããå¿ èŠããããŸãã
ããå°ããªããŒã¿ã»ãããžã®æ¥ç¶
å Žåã«ãã£ãŠã¯ãæ¥ç¶ãããåç §ããŒã¿ã®éãæ¯èŒçå°ããããããã®å®å šãªã³ããŒãåããŒãã«ããŒã«ã«ã«ç°¡åã«é©åãããããšãã§ããŸãã ãã®ãããªç¶æ³ã®ããã«ãKafka Streams 㯠GlobalKTable ã¯ã©ã¹ãæäŸããŸãã
GlobalKTable ã€ã³ã¹ã¿ã³ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ããã¹ãŠã®ããŒã¿ãåããŒãã«ã¬ããªã±ãŒããããããäžæã§ãã ãŸãããã¹ãŠã®ããŒã¿ãåããŒãã«ååšããããããã¹ãŠã®ããŒãã£ã·ã§ã³ã§äœ¿çšã§ããããã«ãåç §ããŒã¿ ããŒã«ãã£ãŠã€ãã³ã ã¹ããªãŒã ãåå²ããå¿ èŠã¯ãããŸããã GlobalKTable ãªããžã§ã¯ãã䜿çšããŠããŒã¬ã¹çµåãè¡ãããšãã§ããŸãã ãã®æ©èœã説æããããã«ãåã®äŸã® XNUMX ã€ã«æ»ã£ãŠã¿ãŸãããã
KStream ãªããžã§ã¯ãã GlobalKTable ãªããžã§ã¯ãã«æ¥ç¶ãã
ã»ã¯ã·ã§ã³ 5.3.2 ã§ã¯ãè²·ãæã«ããçºæ¿ååŒã®ãŠã£ã³ããŠéèšãå®è¡ããŸããã ãã®éèšã®çµæã¯æ¬¡ã®ããã«ãªããŸãã
{customerId='074-09-3705', stockTicker='GUTM'}, 17
{customerId='037-34-5184', stockTicker='CORK'}, 16
ãããã®çµæã¯ç®çãæãããŸãããã顧客ã®ååãšå®å šãªäŒç€Ÿåã衚瀺ãããŠããã°ãããã«äŸ¿å©ã«ãªã£ãã§ãããã 顧客åãšäŒç€Ÿåãè¿œå ããã«ã¯ãéåžžã®çµåãå®è¡ã§ããŸãããXNUMX ã€ã®ã㌠ãããã³ã°ãšåããŒãã£ã·ã§ã³åãè¡ãå¿ èŠããããŸãã GlobalKTable ã䜿çšãããšããã®ãããªæäœã®ã³ã¹ããåé¿ã§ããŸãã
ãããè¡ãã«ã¯ããªã¹ã 5.11 ã® countStream ãªããžã§ã¯ã (察å¿ããã³ãŒã㯠src/main/java/bbejeck/chapter_5/GlobalKTableExample.java ã«ãããŸã) ã䜿çšããããã XNUMX ã€ã® GlobalKTable ãªããžã§ã¯ãã«æ¥ç¶ããŸãã
ããã«ã€ããŠã¯ãã§ã«èª¬æããã®ã§ç¹°ãè¿ããŸããã ãã ããèªã¿ãããããããã«ãtoStream().map é¢æ°ã®ã³ãŒãã¯ã€ã³ã©ã€ã³ ã©ã ãåŒã§ã¯ãªãé¢æ°ãªããžã§ã¯ãã«æœè±¡åãããŠããããšã«æ³šæããŠãã ããã
次ã®ã¹ãããã§ã¯ãGlobalKTable ã® 5 ã€ã®ã€ã³ã¹ã¿ã³ã¹ã宣èšããŸã (瀺ãããŠããã³ãŒãã¯ããã¡ã€ã« src/main/java/bbejeck/chapter_5.12/GlobalKTableExample.java ã«ãããŸã) (ãªã¹ã XNUMX)ã
ãããã¯åã¯åæåã䜿çšããŠèšè¿°ãããããšã«æ³šæããŠãã ããã
ãã¹ãŠã®ã³ã³ããŒãã³ãã®æºåãã§ããã®ã§ãããšã¯æ¥ç¶çšã®ã³ãŒããèšè¿°ããã ãã§ã (ã³ãŒãã¯ãã¡ã€ã« src/main/java/bbejeck/chapter_5/GlobalKTableExample.java ã«ãããŸã) (ãªã¹ã 5.13)ã
ãã®ã³ãŒãã«ã¯ XNUMX ã€ã®çµåããããŸãããã©ã¡ãã®çµæãåå¥ã«äœ¿çšãããªããããçµåãããŠããŸãã çµæã¯æäœå
šäœã®çµäºæã«è¡šç€ºãããŸãã
äžèšã®çµåæäœãå®è¡ãããšã次ã®ãããªçµæãåŸãããŸãã
{customer='Barney, Smith' company="Exxon", transactions= 17}
æ¬è³ªã¯å€ãã£ãŠããŸãããããããã®çµæã¯ããæ確ã«èŠããŸãã
第 4 ç« ãŸã§é¡ã£ãŠã¿ããšããã§ã«ããã€ãã®ã¿ã€ãã®æ¥ç¶ãå®éã«åäœããŠããããšãããããŸãã ãããã¯è¡šã«ãªã¹ããããŠããŸãã 5.2. ãã®è¡šã¯ãKafka Streams ã®ããŒãžã§ã³ 1.0.0 ã®æç¹ã§ã®æ¥ç¶æ©èœãåæ ããŠããŸãã å°æ¥ã®ãªãªãŒã¹ã§ã¯äœããå€æŽãããå¯èœæ§ããããŸãã
æåŸã«ãåºæ¬ã埩ç¿ããŸããããããŒã«ã«ç¶æ
ã䜿çšããŠã€ãã³ã ã¹ããªãŒã (KStream) ãæ¥ç¶ããã¹ããªãŒã (KTable) ãæŽæ°ã§ããŸãã ãŸãã¯ãåç
§ããŒã¿ã®ãµã€ãºã倧ããããªãå Žåã¯ãGlobalKTable ãªããžã§ã¯ãã䜿çšã§ããŸãã GlobalKTables ã¯ããã¹ãŠã®ããŒãã£ã·ã§ã³ãå Kafka Streams ã¢ããªã±ãŒã·ã§ã³ ããŒãã«ã¬ããªã±ãŒãããããŒãã©ã®ããŒãã£ã·ã§ã³ã«å¯Ÿå¿ãããã«é¢ä¿ãªãããã¹ãŠã®ããŒã¿ãå©çšã§ããããã«ããŸãã
次ã«ãKafka ã¹ããªãŒã æ©èœã«ã€ããŠèª¬æããŸãããã®æ©èœã®ãããã§ãKafka ãããã¯ããã®ããŒã¿ãæ¶è²»ããã«ç¶æ ã®å€åã芳å¯ã§ããŸãã
5.3.5. ã¯ãšãªå¯èœãªç¶æ
ãã§ã«ç¶æ ã«é¢ä¿ããããã€ãã®æäœãå®è¡ããŠãããçµæã¯åžžã«ã³ã³ãœãŒã«ã«åºåãããã (éçºç®ç)ããããã¯ã«æžã蟌ãŸããŸã (éçšç®ç)ã çµæããããã¯ã«æžã蟌ãå Žåãçµæã衚瀺ããã«ã¯ Kafka ã³ã³ã·ã¥ãŒããŒã䜿çšããå¿ èŠããããŸãã
ãããã®ãããã¯ããã®ããŒã¿ã®èªã¿åãã¯ããããªã¢ã©ã€ãºã ãã¥ãŒã®äžçš®ãšã¿ãªãããšãã§ããŸãã ãã®ç®çã®ããã«ãWikipedia ã®ãããªã¢ã©ã€ãºã ãã¥ãŒã®å®çŸ©ã䜿çšã§ããŸããã...ã¯ãšãªã®çµæãå«ãç©çããŒã¿ããŒã¹ ãªããžã§ã¯ãã ããšãã°ããªã¢ãŒã ããŒã¿ã®ããŒã«ã« ã³ããŒãããŒãã«ã®è¡ãåã®ãµãã»ãããçµåçµæãéèšã«ãã£ãŠåŸãããæŠèŠããŒãã«ãªã©ã§ããã (https://en.wikipedia.org/wiki) /ãããªã¢ã©ã€ãºã_ãã¥ãŒ)ã
Kafka Streams ã䜿çšãããšãç¶æ ã¹ãã¢ã«å¯ŸããŠå¯Ÿè©±åã®ã¯ãšãªãå®è¡ã§ããããããããã®å®äœåããããã¥ãŒãçŽæ¥èªã¿åãããšãã§ããŸãã ç¶æ ã¹ãã¢ãžã®ã¯ãšãªã¯èªã¿åãå°çšæäœã§ããããšã«æ³šæããããšãéèŠã§ãã ããã«ãããã¢ããªã±ãŒã·ã§ã³ãããŒã¿ãåŠçããŠãããšãã«èª€ã£ãŠç¶æ ã®äžæŽåãçºçããããšãå¿é ããå¿ èŠããªããªããŸãã
ç¶æ ã¹ãã¢ãçŽæ¥ã¯ãšãªã§ããæ©èœã¯éèŠã§ãã ããã¯ãæåã« Kafka ã³ã³ã·ã¥ãŒããŒããããŒã¿ããã§ããããªããŠããããã·ã¥ããŒã ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããšãæå³ããŸãã ãŸããããŒã¿ãå床æžã蟌ãå¿ èŠããªããããã¢ããªã±ãŒã·ã§ã³ã®å¹çãåäžããŸãã
- ããŒã¿ã®å±ææ§ã®ãããã§ãããã«ã¢ã¯ã»ã¹ã§ããŸãã
- ããŒã¿ã¯å€éšã¹ãã¬ãŒãžã«æžã蟌ãŸããªããããããŒã¿ã®éè€ãæé€ãããŸãã
èŠããŠãããŠããã ãããäž»ãªç¹ã¯ãã¢ããªã±ãŒã·ã§ã³å ããç¶æ ãçŽæ¥ã¯ãšãªã§ããããšã§ãã ããã«ãã£ãŠåŸããããã£ã³ã¹ã¯ããã匷調ããŠãããããããšã¯ãããŸããã Kafka ããã®ããŒã¿ãæ¶è²»ããã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ããŒã¹ã«ã¬ã³ãŒããä¿åãã代ããã«ãç¶æ ã¹ãã¢ã«ã¯ãšãªãå®è¡ããŠåãçµæãåŸãããšãã§ããŸãã ã¹ããŒã ã¹ãã¢ãžã®çŽæ¥ã¯ãšãªã¯ãã³ãŒããå°ãªããªã (ã³ã³ã·ã¥ãŒããŒãäžèŠ)ããœãããŠã§ã¢ãå°ãªããªããŸã (çµæãä¿åããããŒã¿ããŒã¹ ããŒãã«ãå¿ èŠãªããªããŸã)ã
ãã®ç« ã§ã¯ããªãã®å 容ã説æããã®ã§ãã¹ããŒã ã¹ãã¢ã«å¯Ÿãã察話åã¯ãšãªã®èª¬æã¯ãããŸã§ã«ããŠãããŸãã ããããå¿é ããªãã§ãã ããã第 9 ç« ã§ã¯ã察話åã¯ãšãªãåããåçŽãªããã·ã¥ããŒã ã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã ãã®ç« ãšåã®ç« ã®äŸã®äžéšã䜿çšããŠã察話åã¯ãšãªãšãããã Kafka Streams ã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããæ¹æ³ã瀺ããŸãã
ãµããªãŒ
- KStream ãªããžã§ã¯ãã¯ãããŒã¿ããŒã¹ãžã®æ¿å ¥ã«çžåœããã€ãã³ãã®ã¹ããªãŒã ãè¡šããŸãã KTable ãªããžã§ã¯ãã¯æŽæ°ã¹ããªãŒã ãè¡šããããŒã¿ããŒã¹ã®æŽæ°ã«äŒŒãŠããŸãã KTable ãªããžã§ã¯ãã®ãµã€ãºã¯å¢å ãããå€ãã¬ã³ãŒãã¯æ°ããã¬ã³ãŒãã«çœ®ãæããããŸãã
- KTable ãªããžã§ã¯ãã¯éèšæäœã«å¿ èŠã§ãã
- ãŠã£ã³ããŠæäœã䜿çšãããšãéèšãããããŒã¿ãã¿ã€ã ãã±ããã«åå²ã§ããŸãã
- GlobalKTable ãªããžã§ã¯ãã®ãããã§ãããŒãã£ã·ã§ãã³ã°ã«é¢ä¿ãªããã¢ããªã±ãŒã·ã§ã³å ã®ã©ãããã§ãåç §ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸãã
- KStreamãKTableãããã³ GlobalKTable ãªããžã§ã¯ãéã®æ¥ç¶ãå¯èœã§ãã
ãããŸã§ãé«ã¬ãã«ã® KStream DSL ã䜿çšã㊠Kafka Streams ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããšã«çŠç¹ãåœãŠãŠããŸããã é«ã¬ãã«ã®ã¢ãããŒãã䜿çšãããšããã¡ããšããç°¡æœãªããã°ã©ã ãäœæã§ããŸãããããã䜿çšãããšãã¬ãŒããªããçºçããŸãã DSL KStream ã䜿çšãããšããããšã¯ãå¶åŸ¡ã®åºŠåããæžãããŠã³ãŒãã®ç°¡æœæ§ãé«ããããšãæå³ããŸãã 次ã®ç« ã§ã¯ãäœã¬ãã«ã®ãã³ãã©ãŒ ããŒã API ãèŠãŠãä»ã®ãã¬ãŒããªããè©ŠããŸãã ããã°ã©ã ã¯ä»¥åããé·ããªããŸãããå¿ èŠãªã»ãŒãã¹ãŠã®ãã³ãã©ãŒ ããŒããäœæã§ããããã«ãªããŸãã
âæ¬æžã®è©³çŽ°ã«ã€ããŠã¯ããã¡ããã芧ãã ããã
â ããããžããªã®å Žå ã¯ãŒãã³å©çšã§25ïŒ å²åŒ - ã«ãã«ã¹ããªãŒã
âçŽçã®æžç±ã®ä»£éããæ¯æãããã ããšãé»åæžç±ãã¡ãŒã«ã§éä¿¡ãããŸãã
åºæïŒ habr.com