Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk" Hallo Habrites! Hierdie boek is geskik vir enige ontwikkelaar wat streaming wil verstaan. Om verspreide programmering te verstaan, sal jou help om Kafka en Kafka Streams beter te verstaan. Dit sal lekker wees om die Kafka-raamwerk self te ken, maar dit is nie nodig nie: ek sal jou alles vertel wat jy nodig het. Ervare Kafka-ontwikkelaars sowel as beginners sal met hierdie boek leer hoe om interessante stroomtoepassings te bou deur die Kafka Streams-biblioteek te gebruik. IntermediΓͺre tot gevorderde Java-ontwikkelaars, wat reeds vertroud is met konsepte soos serialisering, sal leer hoe om hul vaardighede toe te pas om Kafka Streams-toepassings te bou. Die boek se bronkode is in Java 8 geskryf en maak baie gebruik van die Java 8 lambda-uitdrukkingsintaksis, so om te weet hoe om met lambda-funksies te werk (selfs in 'n ander programmeertaal) sal handig te pas kom.

Uittreksel. 5.3. Aggregasie en venster bedrywighede

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±Π΅Ρ‰Π°ΡŽΡ‰ΠΈΡ… частСй Kafka Streams. Пока ΠΌΡ‹ рассмотрСли ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ аспСкты Kafka Streams:

  • skepping van verwerkingstopologie;
  • gebruik van staat in stroomtoepassings;
  • die uitvoering van datastroomverbindings;
  • verskille tussen gebeurtenisstrome (KStream) en opdateringstrome (KTable).

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ собСрСм всС эти элСмСнты Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΌΠΈ опСрациями β€” Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ нашим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ простоС Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

5.3.1. Samevoeging van aandeelverkope volgens industrie

АгрСгированиС ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° β€” ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ инструмСнты ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. ИсслСдования ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… записСй ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ поступлСния часто оказываСтся нСдостаточно. Для извлСчСния ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ ΠΈΡ… Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Π°ΠΌ прСдстоит ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡΡ‚ΡŽΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈΠ΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ Ρ‚Ρ€Π΅ΠΉΠ΄Π΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π°ΠΊΡ†ΠΈΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… отраслях ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ. Π’ частности, вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ ΠΏΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ с наибольшими объСмами ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π°ΠΊΡ†ΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· отраслСй ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ.

Для ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ агрСгирования потрСбуСтся нСсколько ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… шагов ΠΏΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²ΠΈΠ΄ (Ссли Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π² ΠΎΠ±Ρ‰ΠΈΡ… Ρ‡Π΅Ρ€Ρ‚Π°Ρ…).

  1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ источник Π½Π° основС Ρ‚ΠΎΠΏΠΈΠΊΠ°, ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‰ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ Ρ‚ΠΎΡ€Π³ΠΎΠ²Π»Π΅ акциями. Нам придСтся ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° StockTransaction Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° ShareVolume. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ StockTransaction содСрТит ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄Π°ΠΆ, Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ количСствС ΠΏΡ€ΠΎΠ΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π°ΠΊΡ†ΠΈΠΉ.
  2. Π‘Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ShareVolume ΠΏΠΎ символам Π°ΠΊΡ†ΠΈΠΉ. ПослС Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΠΎ символам ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… сумм объСмов ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π°ΠΊΡ†ΠΈΠΉ. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ KStream.groupBy Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр Ρ‚ΠΈΠΏΠ° KGroupedStream. А ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ экзСмпляр KTable ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹Π·Π²Π°Π² Π΄Π°Π»Π΅Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ KGroupedStream.reduce.

Wat is die KGroupedStream-koppelvlak

Die KStream.groupBy- en KStream.groupByKey-metodes gee 'n KGroupedStream-instansie terug. KGroupedStream is 'n intermediΓͺre voorstelling van die stroom gebeurtenisse na groepering volgens sleutels. Dit is glad nie ontwerp om direk met hom te werk nie. In plaas daarvan word KGroupedStream gebruik vir samevoegingsbewerkings wat altyd 'n KTable tot gevolg het. En aangesien die resultaat van die samevoegingsoperasies 'n KTable is en hulle 'n staatswinkel gebruik, is dit moontlik dat nie alle opdaterings in die resultaat verder in die pyplyn gestuur word nie.

ΠœΠ΅Ρ‚ΠΎΠ΄ KTable.groupBy Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ KGroupedTable β€” ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ прСдставлСниС ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ.

Π‘Π΄Π΅Π»Π°Π΅ΠΌ нСбольшой ΠΏΠ΅Ρ€Π΅Ρ€Ρ‹Π² ΠΈ посмотрим Π½Π° рис. 5.9, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Π΅Π³ΠΎ ΠΌΡ‹ добились. Π­Ρ‚Π° топология Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Π°ΠΌ ΡƒΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΠ°.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
ВзглянСм Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π° ΠΊΠΎΠ΄ для этой Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (листинг 5.2).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Bogenoemde kode is opvallend vir sy beknoptheid en groot volume aksies wat in verskeie reΓ«ls uitgevoer word. Jy sal dalk iets nuuts in die eerste parameter van die builder.stream-metode opmerk: die waarde van die AutoOffsetReset.EARLIEST opgesomde tipe (daar is ook LATEST), wat met die Consumed.withOffsetResetPolicy-metode gestel word. Hierdie opgesomde tipe kan gebruik word om 'n offset-terugstellingstrategie vir elke KStream of KTable te spesifiseer, en geniet voorkeur bo die offset-terugstellinginstelling vanaf die konfigurasie.

GroupByKey en GroupBy

Π’ интСрфСйсС KStream Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ записСй: GroupByKey ΠΈ GroupBy. Оба Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ KGroupedTable, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρƒ вас ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ вопрос: Π² Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…?

ΠœΠ΅Ρ‚ΠΎΠ΄ GroupByKey примСняСтся, ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΡŽΡ‡ΠΈ Π² KStream ΡƒΠΆΠ΅ нСпустыС. А Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ„Π»Π°Π³ Β«Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ сСкционирования» Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ устанавливался.

ΠœΠ΅Ρ‚ΠΎΠ΄ GroupBy ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ мСняли ΠΊΠ»ΡŽΡ‡ΠΈ для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρ„Π»Π°Π³ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ сСкционирования установлСн Π² true. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ послС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° GroupBy соСдинСний, агрСгирования ΠΈ Ρ‚. ΠΏ. ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ автоматичСскому ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ ΡΠ΅ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.
Opsomming: Jy moet GroupByKey gebruik, nie GroupBy nie, waar moontlik.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ mapValues ΠΈ groupBy β€” понятно, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ взглянСм Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ sum() (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/model/ShareVolume.java) (листинг 5.3).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Die ShareVolume.sum-metode gee die subtotaal van die aandeelverkoopvolume terug, en die resultaat van die hele berekeningsketting is 'n KTable-objek . Nou verstaan ​​jy watter rol KTable speel. Wanneer ShareVolume-voorwerpe aankom, word die nuutste bygewerkte opdatering in die ooreenstemmende KTable-voorwerp gestoor. Dit is belangrik om te onthou dat alle opdaterings in die vorige shareVolumeKTable weerspieΓ«l word, maar nie almal word verder gestuur nie.

Π”Π°Π»Π΅Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этого KTable ΠΌΡ‹ выполняСм Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΏΠΎ количСству ΠΏΡ€ΠΎΠ΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π°ΠΊΡ†ΠΈΠΉ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ с наибольшими объСмами ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π°ΠΊΡ†ΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· отраслСй ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ. Наши дСйствия ΠΏΡ€ΠΈ этом Π±ΡƒΠ΄ΡƒΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ дСйствиям ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ.

  1. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ groupBy для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ShareVolume ΠΏΠΎ отраслям ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ.
  2. ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ShareVolume. На этот Ρ€Π°Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ агрСгирования прСдставляСт собой ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΏΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρƒ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ с наибольшими количСствами ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π°ΠΊΡ†ΠΈΠΉ.
  3. ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π° Π² строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΡΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΠΎ количСству Π°ΠΊΡ†ΠΈΠΉ ΠΏΠΎ отраслям ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ.
  4. Skryf die resultate in stringvorm by die onderwerp neer.

На рис. 5.10 ΠΏΠΎΠΊΠ°Π·Π°Π½ Π³Ρ€Π°Ρ„ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ двиТСния Π΄Π°Π½Π½Ρ‹Ρ…. Как Π²Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΡ€ΡƒΠ³ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ достаточно прост.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ρ‡Π΅Ρ‚ΠΊΠΎ уяснив сСбС структуру этого Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π΅Π³ΠΎ исходному ΠΊΠΎΠ΄Ρƒ (Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π΅Π³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (листинг 5.4).

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ Π΅ΡΡ‚ΡŒ пСрСмСнная fixedQueue. Π­Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ β€” Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ для java.util.TreeSet, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСтся для отслСТивания N Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² порядкС убывания количСства ΠΏΡ€ΠΎΠ΄Π°Π½Π½Ρ‹Ρ… Π°ΠΊΡ†ΠΈΠΉ.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ с Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ groupBy ΠΈ mapValues, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π½Π° Π½ΠΈΡ… ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ (ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ KTable.toStream, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ KTable.print считаСтся ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ). Но Π²Ρ‹ ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ KTable-Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° aggregate(), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π΅Π³ΠΎ обсуТдСниС.

Soos u onthou, is KTable anders deurdat rekords met dieselfde sleutel as opdaterings beskou word. KTable vervang die ou inskrywing met die nuwe een. Aggregasie werk op 'n soortgelyke manier: die jongste rekords met dieselfde sleutel word saamgevoeg. Wanneer 'n inskrywing aankom, word dit by 'n instansie van die FixedSizePriorityQueue-klas gevoeg deur 'n adder te gebruik (die tweede parameter in die oproep na die saamgevoegde metode), maar as 'n ander inskrywing reeds bestaan ​​met dieselfde sleutel, dan word die ou inskrywing verwyder met die aftrekker (die derde parameter in die oproep na die totale metode).

Dit beteken alles dat ons aggregator, FixedSizePriorityQueue, glad nie alle waardes met een sleutel saamvoeg nie, maar 'n rollende som van N hoeveelhede van die mees verhandelde soorte aandele stoor. Elke inkomende inskrywing bevat die totale aantal aandele wat tot dusver verkoop is. KTable sal jou inligting gee oor watter aandele tans die meeste verkoop, deurlopende samevoeging van elke opdatering is nie nodig nie.

Ons het geleer om twee belangrike dinge te doen:

  • groepeer waardes in KTable volgens hul gemeenskaplike sleutel;
  • Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½Π°Π΄ этими сгруппированными значСниями Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ свСртка ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

Π£ΠΌΠ΅Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π°ΠΆΠ½ΠΎ для понимания смысла Π΄Π°Π½Π½Ρ‹Ρ…, двиТущихся Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Kafka Streams, ΠΈ выяснСния Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ½ΠΈ нСсут.

Ons het ook van die sleutelbegrippe wat vroeΓ«r in hierdie boek bespreek is, bymekaar gebring. In Hoofstuk 4 het ons die belangrikheid van foutverdraagsame, plaaslike staat in 'n stroomtoepassing bespreek. Die eerste voorbeeld in hierdie hoofstuk het gewys hoekom plaaslike staat so belangrik isβ€”dit gee jou die vermoΓ« om tred te hou met watter inligting jy reeds gesien het. Plaaslike toegang vermy netwerkvertragings, wat die toepassing meer doeltreffend en foutverdraagsaam maak.

Wanneer u enige oprol- of samevoegingsbewerking uitvoer, moet u die naam van die staatswinkel spesifiseer. Die vou- en totale bewerkings gee 'n KTable-instansie terug, en die KTable gebruik 'n staatswinkel om ou resultate met nuwes te vervang. Soos u gesien het, word nie alle opdaterings verder in die pyplyn gestuur nie, en dit is belangrik, aangesien samevoegingsbewerkings ontwerp is om opsommende inligting te verkry. As jy nie die plaaslike staat toepas nie, sal KTable al die resultate van samevoeging en vermindering verder stuur.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ посмотрим Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΊΠ°ΠΊ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ β€” Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ (windowing operations).

5.3.2. Vensterbedrywighede

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ познакомились со Β«ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΠΌΠΈΒ» свСрткой ΠΈ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΡƒΡŽ свСртку объСма ΠΏΡ€ΠΎΠ΄Π°ΠΆ Π°ΠΊΡ†ΠΈΠΉ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ пяти Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π½Π° Π±ΠΈΡ€ΠΆΠ΅ Π°ΠΊΡ†ΠΈΠΉ.

Soms is sulke voortdurende samevoeging en konvolusie van resultate nodig. En soms moet u slegs operasies oor 'n gegewe tydperk uitvoer. Byvoorbeeld, om te bereken hoeveel ruiltransaksies in die laaste 10 minute met die aandele van 'n spesifieke maatskappy gemaak is. Of hoeveel gebruikers die afgelope 15 minute op 'n nuwe banieradvertensie geklik het. 'n Toepassing kan sulke bewerkings herhaaldelik uitvoer, maar met resultate wat slegs verband hou met gespesifiseerde tydintervalle (tydvensters).

Tel ruiltransaksies deur koper

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ займСмся отслСТиваниСм Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΠΎ нСскольким Ρ‚Ρ€Π΅ΠΉΠ΄Π΅Ρ€Π°ΠΌ β€” Π»ΠΈΠ±ΠΎ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌ организациям, Π»ΠΈΠ±ΠΎ ΡΠΌΡ‹ΡˆΠ»Π΅Π½Ρ‹ΠΌ финансистам-ΠΎΠ΄ΠΈΠ½ΠΎΡ‡ΠΊΠ°ΠΌ.

Daar is twee moontlike redes vir hierdie dop. Een daarvan is die behoefte om te weet wat die markleiers koop/verkoop. As hierdie groot spelers en gesofistikeerde beleggers 'n geleentheid vir hulself sien, maak dit sin om hul strategie te volg. Die tweede rede is die begeerte om enige moontlike tekens van onwettige transaksies met behulp van binne-inligting raak te sien. Om dit te doen, sal jy die korrelasie van groot verkoopspieke met belangrike persvrystellings moet ontleed.

Hierdie opsporing bestaan ​​uit die volgende stappe:

  • skep 'n draad vir lees uit die voorraadtransaksie-onderwerp;
  • Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° входящих записСй ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ покупатСля ΠΈ Π±ΠΈΡ€ΠΆΠ΅Π²ΠΎΠΌΡƒ символу Π°ΠΊΡ†ΠΈΠΈ. Π’Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° groupBy Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ экзСмпляр класса KGroupedStream;
  • Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ KGroupedStream.windowedBy ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΎΠΊΠ½ΠΎΠΌ, Ρ‡Ρ‚ΠΎ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΠΎΠΊΠ½Π° возвращаСтся Π»ΠΈΠ±ΠΎ TimeWindowedKStream, Π»ΠΈΠ±ΠΎ SessionWindowedKStream;
  • подсчСт Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ агрСгирования. ΠžΠΊΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π΄Π°Π½Π½Ρ‹Ρ… опрСдСляСт, учитываСтся Π»ΠΈ ΠΏΡ€ΠΈ этом подсчСтС конкрСтная запись;
  • запись Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² Ρ‚ΠΎΠΏΠΈΠΊ ΠΈΠ»ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΈΡ… Π² консоль Π²ΠΎ врСмя Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Вопология Π΄Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния проста, Π½ΠΎ наглядная Π΅Π΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° Π½Π΅ ΠΏΠΎΠΌΠ΅ΡˆΠ°Π΅Ρ‚. ВзглянСм Π½Π° рис. 5.11.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΊΠΎΠ½Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"

Tipes vensters

Daar is drie tipes vensters in Kafka Streams:

  • sessie;
  • "tuimel" (tuimel);
  • gly / "spring" (gly / huppel).

КакоС Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ β€” зависит ΠΎΡ‚ бизнСс-Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ. Β«ΠšΡƒΠ²Ρ‹Ρ€ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡΒ» ΠΈ Β«ΠΏΡ€Ρ‹Π³Π°ΡŽΡ‰ΠΈΠ΅Β» ΠΎΠΊΠ½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ограничСния сСансовых связаны с дСйствиями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ β€” Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСанса (-ΠΎΠ²) опрСдСляСтся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅ΠΌ, насколько Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ. Π“Π»Π°Π²Π½ΠΎΠ΅ β€” Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС Ρ‚ΠΈΠΏΡ‹ ΠΎΠΊΠΎΠ½ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° ΠΌΠ΅Ρ‚ΠΊΠ°Ρ… Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ записСй, Π° Π½Π΅ Π½Π° систСмном Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ Π½Π°ΡˆΡƒ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡŽ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΊΠΎΠ½. ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, для Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΊΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ измСнится, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΈΠΏΠ° ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Sessie vensters

БСансовыС ΠΎΠΊΠ½Π° сильно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠΊΠΎΠ½. Они ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, сколько Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ΠΈΠ»ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‚ΠΎΠΉ сущности, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ). БСансовыС ΠΎΠΊΠ½Π° Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π°ΠΌΠΈ бСздСйствия.

Рисунок 5.12 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ понятиС сСансовых ΠΎΠΊΠΎΠ½. МСньший сСанс Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΠΈΠ²Π°Ρ‚ΡŒΡΡ с сСансом слСва ΠΎΡ‚ Π½Π΅Π³ΠΎ. А сСанс справа Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ слСдуСт Π·Π° Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΎΠΌ бСздСйствия. БСансовыС ΠΎΠΊΠ½Π° ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π½Π° дСйствиях ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΠ· записСй для опрСдСлСния Ρ‚ΠΎΠ³ΠΎ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ сСансу относится запись.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"

Gebruik sessievensters om ruiltransaksies op te spoor

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ сСансовыми ΠΎΠΊΠ½Π°ΠΌΠΈ для Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… транзакциях. РСализация сСансовых ΠΎΠΊΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π² листингС 5.5 (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ этой Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ Π²Ρ‹ ΡƒΠΆΠ΅ встрСчали, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΡƒΠΆΠ΄Ρ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΡƒΡ‚ снова. Но Π΅ΡΡ‚ΡŒ здСсь ΠΈ нСсколько Π½ΠΎΠ²Ρ‹Ρ… элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ сСйчас обсудим.

ΠŸΡ€ΠΈ всякой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ groupBy ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ выполняСтся какая-Π»ΠΈΠ±ΠΎ опСрация агрСгирования (Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, свСртка ΠΈΠ»ΠΈ подсчСт количСства). МоТно Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π½Π°ΠΊΠΎΠΏΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с Π½Π°Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠΌ ΠΈΡ‚ΠΎΠ³ΠΎΠΌ, ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ записи Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π°.

Код ΠΈΠ· листинга 5.5 выполняСт подсчСт количСства Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… сСансовых ΠΎΠΊΠΎΠ½. На рис. 5.13 эти дСйствия Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ пошагово.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° windowedBy(SessionWindows.with(twentySeconds).until(fifteenMinutes)) ΠΌΡ‹ создаСм сСансовоС ΠΎΠΊΠ½ΠΎ с ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ бСздСйствия 20 сСкунд ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠΌ сохранСния 15 ΠΌΠΈΠ½ΡƒΡ‚. Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π» бСздСйствия 20 сСкунд ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ запись, которая поступит Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… 20 сСкунд ΠΎΡ‚ окончания ΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Π»Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ сСанса Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ (Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ) сСанс.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Vervolgens spesifiseer ons watter samevoegingsbewerking om in die sessievenster uit te voer - tel in hierdie geval. As die inkomende skrywe verder gaan as die ledige interval (aan weerskante van die datum/tydstempel), dan skep die toepassing 'n nuwe sessie. 'n Volhardingsinterval beteken om 'n sessie vir 'n sekere tyd lewendig te hou en laat data toe wat verder gaan as die sessie se ledige tydperk, maar steeds aangeheg kan word. Daarbenewens stem die begin en einde van die nuwe sessie as gevolg van die samesmelting ooreen met die vroegste en jongste datum-/tydstempels.

Рассмотрим нСсколько записСй ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° count, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ сСансы (Ρ‚Π°Π±Π». 5.1).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
ΠŸΡ€ΠΈ поступлСнии записСй ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сСансы с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ окончания мСньшС Ρ‡Π΅ΠΌ тСкущая ΠΌΠ΅Ρ‚ΠΊΠ° Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ β€” ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» бСздСйствия ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π½Π°Ρ‡Π°Π»Π° большС Ρ‡Π΅ΠΌ тСкущая ΠΌΠ΅Ρ‚ΠΊΠ° Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ + ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» бСздСйствия. Π‘ ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ этого Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ записи ΠΈΠ· Ρ‚Π°Π±Π». 5.1 ΡΠ»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ сСанс ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

1. ΠŸΠ΅Ρ€Π²ΠΎΠΉ поступаСт запись 1, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ врСмя Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π²Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ окончания ΠΈ Ρ€Π°Π²Π½ΠΎ 00:00:00.

2. Π”Π°Π»Π΅Π΅ поступаСт запись 2, ΠΈ ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ сСансы, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π΅ Ρ€Π°Π½ΡŒΡˆΠ΅ 23:59:55 ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π½Π΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ 00:00:35. Находим запись 1 ΠΈ объСдиняСм сСансы 1 ΠΈ 2. Π‘Π΅Ρ€Π΅ΠΌ врСмя Π½Π°Ρ‡Π°Π»Π° сСанса 1 (Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅Π΅) ΠΈ врСмя окончания сСанса 2 (Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ наш Π½ΠΎΠ²Ρ‹ΠΉ сСанс начинаСтся Π² 00:00:00 ΠΈ заканчиваСтся Π² 00:00:15.

3. ΠŸΠΎΡΡ‚ΡƒΠΏΠ°Π΅Ρ‚ запись 3, ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ сСансы ΠΌΠ΅ΠΆΠ΄Ρƒ 00:00:30 ΠΈ 00:01:10 ΠΈ Π½Π΅ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ДобавляСм Π²Ρ‚ΠΎΡ€ΠΎΠΉ сСанс для ΠΊΠ»ΡŽΡ‡Π° 123-345-654,FFBE, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉΡΡ Π² 00:00:50.

4. ΠŸΠΎΡΡ‚ΡƒΠΏΠ°Π΅Ρ‚ запись 4, ΠΈ ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ сСансы ΠΌΠ΅ΠΆΠ΄Ρƒ 23:59:45 ΠΈ 00:00:25. На этот Ρ€Π°Π· находятся ΠΎΠ±Π° сСанса β€” 1 ΠΈ 2. ВсС Ρ‚Ρ€ΠΈ сСанса ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½, с Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Π½Π°Ρ‡Π°Π»Π° 00:00:00 ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ окончания 00:00:15.

Hier is 'n paar belangrike dinge om in gedagte te hou uit hierdie afdeling:

  • сСансы β€” Π½Π΅ ΠΎΠΊΠ½Π° фиксированного Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сСанса опрСдСляСтся Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ;
  • ΠΌΠ΅Ρ‚ΠΊΠΈ Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π² Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ событиС Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ сСанс ΠΈΠ»ΠΈ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ бСздСйствия.

Vervolgens sal ons die volgende tipe venster bespreek - "tuimel" vensters.

"Tuimelende" vensters

Β«ΠšΡƒΠ²Ρ‹Ρ€ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡΒ» (tumbling) ΠΎΠΊΠ½Π° Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ события, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ всС Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Π΅ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 20 сСкунд, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ собираСтС всС события Π·Π° этот ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ 20-сСкундного ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΎΠΊΠ½ΠΎ «кувыркаСтся» ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ 20-сСкундный ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» наблюдСния. Рисунок 5.14 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ эту ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, всС ΠΏΠΎΡΡ‚ΡƒΠΏΠΈΠ²ΡˆΠΈΠ΅ Π·Π° послСдниС 20 сСкунд события Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΎΠΊΠ½ΠΎ. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΠΈ этого ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ создаСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ.

Π’ листингС 5.6 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄, Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ использованиС Β«ΠΊΡƒΠ²Ρ‹Ρ€ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡΒ» ΠΎΠΊΠΎΠ½ для Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 20 сСкунд Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Благодаря этому Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΎΠΌΡƒ измСнСнию Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° TimeWindows.of ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΊΡƒΠ²Ρ‹Ρ€ΠΊΠ°ΡŽΡ‰Π΅Π΅ΡΡΒ» ΠΎΠΊΠ½ΠΎ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° until(), вслСдствиС Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» сохранСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ€Π°Π²Π½Ρ‹ΠΉ 24 часам.

НаконСц, ΠΏΠΎΡ€Π° ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ послСднСму ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΠΊΠΎΠ½ β€” Β«ΠΏΡ€Ρ‹Π³Π°ΡŽΡ‰ΠΈΠΌΒ» (hopping) ΠΎΠΊΠ½Π°ΠΌ.

Glyende ("springende") vensters

Π‘ΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΠ΅/Β«ΠΏΡ€Ρ‹Π³Π°ΡŽΡ‰ΠΈΠ΅Β» (sliding/hopping) ΠΎΠΊΠ½Π° ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Β«ΠΊΡƒΠ²Ρ‹Ρ€ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡΒ», Π½ΠΎ с нСбольшим ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ. Π‘ΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΠ΅ ΠΎΠΊΠ½Π° Π½Π΅ ΠΆΠ΄ΡƒΡ‚ окончания ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ созданиСм Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅Π΄Π°Π²Π½ΠΈΡ… событий. Они Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Π½ΠΎΠ²Ρ‹Π΅ вычислСния послС ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° оТидания, мСньшСго Ρ‡Π΅ΠΌ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΊΠ½Π°.

Om die verskille tussen "tuimel" en "spring" vensters te illustreer, kom ons gaan terug na die voorbeeld van die tel van voorraadtransaksies. Ons doelwit is steeds om die aantal transaksies te tel, maar ons wil nie heeltyd wag voordat ons die teller opdateer nie. In plaas daarvan sal ons die teller met korter tussenposes opdateer. Ons sal byvoorbeeld steeds die aantal transaksies elke 20 sekondes tel, maar die teller elke 5 sekondes opdateer, soos in Fig. 5.15. In hierdie geval het ons drie resultaatvensters met oorvleuelende data.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Π’ листингС 5.7 ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ для задания ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰ΠΈΡ… ΠΎΠΊΠΎΠ½ (Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Β«ΠšΡƒΠ²Ρ‹Ρ€ΠΊΠ°ΡŽΡ‰Π΅Π΅ΡΡΒ» ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Β«ΠΏΡ€Ρ‹Π³Π°ΡŽΡ‰Π΅Π΅Β» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ добавлСния Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° advanceBy(). Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» сохранСния Ρ€Π°Π²Π΅Π½ 15 ΠΌΠΈΠ½ΡƒΡ‚Π°ΠΌ.

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Π»ΠΈ Π² этом Ρ€Π°Π·Π΄Π΅Π»Π΅, ΠΊΠ°ΠΊ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ агрСгирования Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΎΠΊΠ½Π°ΠΌΠΈ. Π’ частности, Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠ»ΠΈ ΠΈΠ· этого Ρ€Π°Π·Π΄Π΅Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ Π²Π΅Ρ‰ΠΈ:

  • Ρ€Π°Π·ΠΌΠ΅Ρ€ сСансовых ΠΎΠΊΠΎΠ½ ограничиваСтся Π½Π΅ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΊΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ;
  • "Tumble" vensters gee 'n idee van gebeure binne 'n gegewe tydperk;
  • Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Β«ΠΏΡ€Ρ‹Π³Π°ΡŽΡ‰ΠΈΡ…Β» ΠΎΠΊΠΎΠ½ фиксирована, Π½ΠΎ ΠΎΠ½ΠΈ часто ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²ΠΎ всСх ΠΎΠΊΠ½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ записи.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ KTable ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² KStream для соСдинСния.

5.3.3. Verbind KStream en KTable-voorwerpe

Π’ Π³Π»Π°Π²Π΅ 4 ΠΌΡ‹ обсуТдали соСдинСниС Π΄Π²ΡƒΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² KStream. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ прСдстоит Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ KTable ΠΈ KStream. ΠŸΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ простой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅. KStream β€” ΠΏΠΎΡ‚ΠΎΠΊ записСй, Π° KTable β€” ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ записСй, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ контСкст ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΡƒ записСй с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈΠ· KTable.

Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ количСствС Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΈ соСдиним ΠΈΡ… с Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹ΠΌΠΈ новостями ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ отраслям ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ этого с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ ΠΊΠΎΠ΄Π°.

  1. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ KTable с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ количСствС Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ Π² KStream с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΊΠ»ΡŽΡ‡Π° Π½Π° ΠΊΠ»ΡŽΡ‡, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Ρ€Π°ΡΠ»ΡŒ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Π΄Π°Π½Π½ΠΎΠΌΡƒ символу Π°ΠΊΡ†ΠΈΠΉ.
  2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ KTable, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ‚ΠΎΠΏΠΈΠΊΠ° с Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹ΠΌΠΈ новостями. Π­Ρ‚ΠΎΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ KTable Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎ отраслям ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ.
  3. Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ обновлСния новостСй с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ количСствС Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΠΎ отраслям ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ.

Kom ons kyk nou hoe om hierdie aksieplan te implementeer.

Skakel KTable om na KStream

Om KTable na KStream om te skakel, moet jy die volgende doen.

  1. Roep die KTable.toStream() metode.
  2. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° KStream.map Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ отрасли ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ, послС Ρ‡Π΅Π³ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ· экзСмпляра Windowed ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ TransactionSummary.

ΠœΡ‹ свяТСм эти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΎΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (листинг 5.8).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ выполняСм ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ KStream.map, Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ сСкционированиС для Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ экзСмпляра KStream производится автоматичСски ΠΏΡ€ΠΈ Π΅Π³ΠΎ использовании Π² соСдинСнии.

ΠœΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΠΈ процСсс прСобразования, Π΄Π°Π»Π΅Π΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ KTable для чтСния Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… новостСй.

Skep 'n KTable vir voorraadnuus

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° KTable достаточно ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π° (этот ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (листинг 5.9).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Serde ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ трСбуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² настройках ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ строковыС Serde. Π’Π°ΠΊΠΆΠ΅ благодаря ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ пСрСчислСния EARLIEST Ρ‚Π°Π±Π»ΠΈΡ†Π° заполняСтся записями Π² самом Π½Π°Ρ‡Π°Π»Π΅.

Nou kan ons aanbeweeg na die laaste stap – die verbinding.

Koppel nuusopdaterings met transaksietellingdata

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ соСдинСния Π½Π΅ прСдставляСт слоТностСй. ΠœΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π»Π΅Π²Ρ‹ΠΌ соСдинСниСм Π½Π° случай, Ссли ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ отрасли ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΡΡ‚ΠΈ Π½Π΅Ρ‚ Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… новостСй (Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (листинг 5.10).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Hierdie leftJoin-operateur is redelik eenvoudig. Anders as die koppelings in Hoofstuk 4, word die JoinWindow-metode nie gebruik nie, want wanneer 'n KStream-KTable-koppeling gemaak word, is daar net een inskrywing in die KTable vir elke sleutel. So 'n verband is nie in tyd beperk nie: die inskrywing bestaan ​​óf in die KTable Γ³f dit bestaan ​​nie. Sleutel wegneemetes: Deur KTable-voorwerpe te gebruik, kan jy 'n KStream verryk met minder gereeld bygewerkte verwysingsdata.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ рассмотрим Π±ΠΎΠ»Π΅Π΅ эффСктивный способ обогащСния событий ΠΈΠ· KStream.

5.3.4. GlobalKTable voorwerpe

Soos u verstaan, is daar 'n behoefte om die gebeurtenisstrome te verryk of konteks daarby te voeg. In Hoofstuk 4 het jy die verbinding van twee KStream-voorwerpe gesien, en in die vorige afdeling het jy die verbinding van KStream en KTable gesien. In al hierdie gevalle is dit nodig om die datastroom te herpartisioneer wanneer sleutels na 'n nuwe tipe of waarde gekarteer word. Soms word herpartisionering eksplisiet gedoen, en soms doen Kafka Streams dit outomaties. Die herpartisionering is nodig omdat die sleutels verander het en die rekords in die nuwe partisies moet beland of die koppeling sal nie moontlik wees nie (dit is bespreek in Hoofstuk 4, "Data Herpartisionering" in Afdeling 4.2.4).

Herpartisionering het 'n prys

Herpartisionering kom teen 'n koste - bykomende hulpbronkoste vir die skep van intermediΓͺre onderwerpe, die stoor van duplikaatdata in 'n ander onderwerp; dit beteken ook verhoogde latensie as gevolg van skryf na en lees van daardie onderwerp. Ook, as jy op meer as een aspek of dimensie wil aansluit, moet jy kettingverbinding maak, rekords met nuwe sleutels karteer en die herverdelingsproses weer laat loop.

Koppel aan kleiner datastelle

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях объСм справочных Π΄Π°Π½Π½Ρ‹Ρ…, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ планируСтся соСдинСниС, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅Π²Π΅Π»ΠΈΠΊ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π½Ρ‹Π΅ ΠΈΡ… ΠΊΠΎΠΏΠΈΠΈ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ локально Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡƒΠ·Π»ΠΎΠ². Для ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ситуаций Π² Kafka Streams прСдусмотрСн класс GlobalKTable.

GlobalKTable-gevalle is uniek omdat die toepassing alle data na elk van die nodusse repliseer. En aangesien elkeen van die nodusse al die data het, is dit nie nodig om die gebeurtenisstroom deur die verwysingsdatasleutel te partisieer sodat dit vir alle partisies beskikbaar is nie. U kan ook sleutellose verbindings uitvoer deur GlobalKTable-voorwerpe te gebruik. Kom ons gaan terug na een van die vorige voorbeelde om hierdie moontlikheid te demonstreer.

Koppel KStream-voorwerpe aan GlobalKTable-voorwerpe

Π’ ΠΏΠΎΠ΄Ρ€Π°Π·Π΄Π΅Π»Π΅ 5.3.2 ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΎΠΊΠΎΠ½Π½ΠΎΠ΅ Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΡ€ΠΆΠ΅Π²Ρ‹Ρ… Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ ΠΏΠΎ покупатСлям. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ этого агрСгирования выглядСли ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

{customerId='074-09-3705', stockTicker='GUTM'}, 17
{customerId='037-34-5184', stockTicker='CORK'}, 16

Π₯отя эти Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ соотвСтствовали поставлСнной Ρ†Π΅Π»ΠΈ, Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Ссли Π±Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ имя ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ имя покупатСля ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ соСдинСния, Π½ΠΎ ΠΏΡ€ΠΈ этом понадобится произвСсти Π΄Π²Π° отобраТСния ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ сСкционированиС. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ GlobalKTable ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

Для этого ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ countStream ΠΈΠ· листинга 5.11 (ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/GlobalKTableExample.java), соСдинив Π΅Π³ΠΎ с двумя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ GlobalKTable.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
ΠœΡ‹ ΡƒΠΆΠ΅ обсуТдали это Ρ€Π°Π½Π΅Π΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ стану ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ. Но ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ toStream().map Ρ€Π°Π΄ΠΈ удобочитаСмости абстрагирован Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вмСсто встраиваСмого лямбда-выраТСния.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этап β€” объявлСниС Π΄Π²ΡƒΡ… экзСмпляров GlobalKTable (ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (листинг 5.12).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ названия Ρ‚ΠΎΠΏΠΈΠΊΠΎΠ² ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ пСрСчисляСмых Ρ‚ΠΈΠΏΠΎΠ².

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ всС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ для соСдинСния (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (листинг 5.13).

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Π₯отя Π² этом ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π΄Π²Π° соСдинСния, ΠΎΠ½ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ выводятся Π² ΠΊΠΎΠ½Ρ†Π΅ всСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈ запускС Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ соСдинСния Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΈΠ΄Π°:

{customer='Barney, Smith' company="Exxon", transactions= 17}

Die essensie het nie verander nie, maar hierdie resultate lyk meer verstaanbaar.

Если ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π³Π»Π°Π²Ρƒ 4, Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ нСсколько Ρ‚ΠΈΠΏΠΎΠ² соСдинСний Π² дСйствии. Они пСрСчислСны Π² Ρ‚Π°Π±Π». 5.2. Π­Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ возмоТности соСдинСния, Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ для вСрсии 1.0.0 Kafka Streams; Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… выпусках, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ помСняСтся.

Die boek "Kafka-strome in aksie. Toepassings en mikrodienste vir intydse werk"
Ten slotte, laat ek jou herinner aan die belangrikste ding: jy kan gebeurtenisstrome (KStream) en strome (KTable) bywerk deur die plaaslike staat te koppel. Daarbenewens, as die grootte van die verwysingsdata nie te groot is nie, kan jy die GlobalKTable-objek gebruik. GlobalKTable repliseer alle partisies na elk van die nodusse van die Kafka Streams-toepassing, om sodoende te verseker dat alle data beskikbaar is, ongeag met watter partisie die sleutel ooreenstem.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Kafka Streams, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ измСнСния состояния Π±Π΅Π· потрСблСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ‚ΠΎΠΏΠΈΠΊΠ° Kafka.

5.3.5. Versoekbare staat

ΠœΡ‹ ΡƒΠΆΠ΅ выполняли нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с участиСм состояния ΠΈ всСгда Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² консоль (для Ρ†Π΅Π»Π΅ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ) ΠΈΠ»ΠΈ записывали ΠΈΡ… Π² Ρ‚ΠΎΠΏΠΈΠΊ (для Ρ†Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ эксплуатации). ΠŸΡ€ΠΈ записи Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Π² Ρ‚ΠΎΠΏΠΈΠΊ приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒ Kafka для ΠΈΡ… просмотра.

Die lees van data uit hierdie onderwerpe kan as 'n soort gematerialiseerde sienings beskou word. Vir ons take kan ons die definisie van 'n gematerialiseerde siening van Wikipedia gebruik: "... 'n fisiese databasisobjek wat die resultate van 'n navraag bevat. Dit kan byvoorbeeld 'n plaaslike kopie van afgeleΓ« data wees, of 'n subset van die rye en/of kolomme van 'n tabel of aansluitingsresultaat, of 'n spiltabel wat deur samevoeging verkry is” (https://en.wikipedia.org/wiki) /Materialized_view).

Kafka Streams Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ запросы (interactive queries) ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌ состояния, Ρ‡Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСпосрСдствСнного чтСния этих ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… прСдставлСний. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ запрос ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Ρƒ состояния носит Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Β«Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния». Благодаря этому Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π±ΠΎΡΡ‚ΡŒΡΡ случайно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ состояниС нСсогласованным Π²ΠΎ врСмя ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ нСпосрСдствСнных запросов ΠΊ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°ΠΌ состояния ΠΈΠΌΠ΅Π΅Ρ‚ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Она Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ прилоТСния β€” ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ Π±Π΅Π· нСобходимости сначала ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ потрСбитСля Kafka. ΠŸΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΠΎΠ½Π° ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ прилоТСния, благодаря Ρ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ трСбуСтся снова Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅:

  • as gevolg van die ligging van die data, kan hulle vinnig verkry word;
  • ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π²ΠΎ внСшнСС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

Die belangrikste ding wat ek wil hΓͺ jy moet onthou, is dat jy die staat direk vanaf die aansoek kan navraag doen. Die moontlikhede wat dit vir jou bied, kan nie oorskat word nie. In plaas daarvan om data van Kafka af te verbruik en rekords in die databasis vir die toepassing te stoor, kan u die staatwinkels navraag doen met dieselfde resultaat. Om direk na staatwinkels te vra, beteken minder kode (geen verbruiker) en minder sagteware (geen behoefte aan 'n databasistabel om resultate te stoor nie).

Ons het baie inligting in hierdie hoofstuk behandel, so ons sal ons bespreking van interaktiewe navrae oor staatswinkels vir 'n oomblik stop. Maar moenie bekommerd wees nie: in Hoofstuk 9 sal ons 'n eenvoudige dashboard-toepassing met interaktiewe navrae skep. Dit sal sommige van die voorbeelde in hierdie en vorige hoofstukke gebruik om interaktiewe navrae te demonstreer en hoe om dit by Kafka Streams-toepassings te voeg.

Opsomming

  • ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ KStream ΠΎΠ»ΠΈΡ†Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ событий, сравнимыС со вставками Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ KTable ΠΎΠ»ΠΈΡ†Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, ΠΎΠ½ΠΈ большС схоТи с обновлСниями Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…. Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° KTable Π½Π΅ растСт, старыС записи Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹ΠΌΠΈ.
  • KTable-objekte word benodig vir samevoegingsbewerkings.
  • Venster laat jou toe om saamgestelde data in tydbakke af te breek.
  • Благодаря ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ GlobalKTable ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ справочным Π΄Π°Π½Π½Ρ‹ΠΌ Π² любой Ρ‚ΠΎΡ‡ΠΊΠ΅ прилоТСния, нСзависимо ΠΎΡ‚ разбиСния ΠΏΠΎ сСкциям.
  • Verbindings tussen KStream, KTable en GlobalKTable voorwerpe is moontlik.

Tot dusver het ons daarop gefokus om Kafka Streams-toepassings te bou deur die hoΓ«vlak DSL KStream te gebruik. Alhoewel die hoΓ«vlakbenadering jou toelaat om netjiese en bondige programme te skep, verteenwoordig die gebruik daarvan 'n sekere kompromie. Werk met DSL KStream beteken om kode meer bondig te maak ten koste van minder beheer. In die volgende hoofstuk kyk ons ​​na die lae-vlak hanteerder node API en probeer ander afwegings. Programme sal langer word as wat dit tot dusver was, maar ons sal byna enige hanteerdernodus kan skep wat ons nodig mag hΓͺ.

β†’ Meer besonderhede oor die boek kan gevind word by uitgewer se webwerf

β†’ Vir Khabrozhiteli, 'n 25% afslag op die koepon - Kafka-strome

β†’ По Ρ„Π°ΠΊΡ‚Ρƒ ΠΎΠΏΠ»Π°Ρ‚Ρ‹ Π±ΡƒΠΌΠ°ΠΆΠ½ΠΎΠΉ вСрсии ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° e-mail высылаСтся элСктронная ΠΊΠ½ΠΈΠ³Π°.

Bron: will.com

Voeg 'n opmerking