Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah" Hello, reer Khabro! Buugani wuxuu ku haboon yahay horumariye kasta oo raba inuu fahmo habaynta dunta. Fahamka barnaamijyada la qaybiyay waxay kaa caawin doontaa inaad si fiican u fahamto Kafka iyo Kafka durdurrada. Way fiicnaan lahayd in la ogaado qaabka Kafka laftiisa, laakiin tani maahan lagama maarmaan: Waxaan kuu sheegi doonaa wax kasta oo aad u baahan tahay. Horumariyeyaasha Kafka ee khibradda leh iyo kuwa cusubba waxay si isku mid ah u baran doonaan sida loo abuuro codsiyada socodsiinta socodka xiisaha leh iyagoo isticmaalaya maktabadda Kafka Streams ee buuggan. Horumarinta Java ee dhex-dhexaadka ah iyo kuwa horumaray ee horeba u yaqaanay fikradaha sida taxanaha taxanaha ah waxay baran doonaan inay adeegsadaan xirfadahooda si ay u abuuraan codsiyada Kafka Streams. Koodhka isha ee buuggu waxa uu ku qoran yahay Java 8 waxana uu si mug leh u isticmaala Java 8 lambda word syntax, markaa ogaanshaha sida loola shaqeeyo lambda (xitaa luuqad kale oo barnaamij ah) ayaa ku iman doonta anfaca.

Qoraal. 5.3. Isku-darka iyo hawlgallada daaqadaha

Qaybtan, waxaan u gudbi doonaa si aan u sahamiyo qaybaha ugu rajada badan ee Kafka Streams Ilaa hadda waxaanu daboolnay dhinacyada soo socda ee durdurrada Kafka:

  • abuurista topology processing;
  • isticmaalka gobolka ee codsiyada qulqulka;
  • fulinta isku xirka qulqulka xogta;
  • farqiga udhaxeeya durdurrada dhacdooyinka (KStream) iyo durdurrada cusboonaysiinta (KTable).

Tusaalooyinka soo socda waxaynu isugu keeni doonaa dhammaan qaybahaas. Waxa kale oo aad baran doontaa wax ku saabsan daaqada, sifada kale ee weyn ee codsiyada qulqulka. Tusaalahayaga ugu horreeya wuxuu noqon doonaa isku-dar fudud.

5.3.1. Isku darka iibka saamiyada ee qaybta warshadaha

Isku-darka iyo kooxaynta ayaa ah aaladaha muhiimka ah marka la shaqaynayo xogta qulqulka. Baaritaanka diiwaanada gaarka ah sida la helay inta badan kuma filna. Si loo soo saaro macluumaad dheeraad ah xogta, waxaa lagama maarmaan ah in la kooxeeyo oo la isku daro.

Tusaalahan, waxaad gashan doontaa dharka ganacsadaha maalinlaha ah ee u baahan inuu la socdo mugga iibka saamiyada shirkadaha dhowr warshadood. Gaar ahaan, waxaad xiisaynaysaa shanta shirkadood ee leh saamiga ugu badan ee iibka warshad kasta.

Isku-darka noocan oo kale ah wuxuu u baahan doonaa dhowr tillaabo oo soo socda si loogu turjumo xogta qaabka la rabo (oo ku hadlaya ereyo guud).

  1. Abuur mawduuc mawduuc ku salaysan oo daabaca macluumaadka ganacsiga saamiyada cayriin. Waa in aan khariidadda shay ka mid ah StockTransaction shay ka mid ah ShareVolume. Xaqiiqdu waxay tahay in shayga StockTransaction uu ka kooban yahay xogta iibka badan, laakiin waxaan kaliya u baahanahay xogta ku saabsan tirada saamiyada la iibiyo.
  2. Kooxda ShareVolume ee xogta saamiyada. Marka lagu soo ururiyo calaamad ahaan, waxaad u burburin kartaa xogtan isu geyn hoose oo ah mugga iibka saamiyada. Waxaa xusid mudan in habka KStream.groupBy uu soo celiyo tusaale nooca KGroupedStream. Waxaadna heli kartaa tusaale KTable adiga oo sii waca habka KGroupedStream.reduce.

Waa maxay interface-ka KGroupedStream

Hababka KStream.groupBy iyo KStream.groupByKey waxay soo celiyaan tusaale KGroupedStream. KGroupedStream waa matalaad dhex dhexaad ah oo ah qulqulka dhacdooyinka ka dib marka furayaasha la isugu geeyo. Looma jeedo in si toos ah loola shaqeeyo. Taa beddelkeeda, KGroupedStream waxaa loo isticmaalaa hawlgallada isku-darka, taas oo had iyo jeer keenta KTable. Oo maadaama natiijada hawlgallada isku-darka ah ay yihiin KTable oo ay isticmaalaan dukaanka gobolka, waxaa suurtogal ah in dhammaan wixii cusub ee natiijada ah aan loo sii dirin dhuumaha.

Habka KTable.groupBy wuxuu soo celiyaa KGroupedTable la mid ah - matalaad dhex dhexaad ah ee qulqulka cusboonaysiinta, oo fure lagu ururiyay.

Aynu nasasho yar qaadano oo eegno sawirka. 5.9, taas oo ku tusinaysa waxa aynu gaadhnay. Topology-gan waa inuu mar horeba aad u yaqaannaa.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Aynu hadda eegno koodka topology-gan (waxaa laga heli karaa faylka src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Liiska 5.2).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Koodhka la bixiyay waxaa lagu kala soocaa soo koobiddiisa iyo mugga weyn ee ficillada lagu sameeyay dhowr sadar. Waxa laga yaabaa in aad wax cusub ku aragto halbeegga koowaad ee habka dhiska Noocan tirinta ah waxaa loo isticmaali karaa in lagu qeexo istaraatijiyad dib-u-dejineed ee KStream kasta ama KTable oo ka horraysa ikhtiyaarka dib-u-dejinta ee qaabeynta.

KooxdaByKey iyo KooxdaBy

Interface-ka KStream wuxuu leeyahay laba hab oo lagu kooxeeyo diiwaannada: GroupByKey iyo GroupBy. Labaduba waxay soo celiyaan miiska KGrouped, markaa waxaa laga yaabaa inaad la yaabto farqiga u dhexeeya iyaga iyo goorta la isticmaalayo?

Habka GroupByKey waxa la isticmaalaa marka furayaasha KStream ay horayba aanay u faaruqin. Iyo tan ugu muhiimsan, "waxay u baahan tahay dib-u-qaybin" calanka waligiis lama dejin.

Habka GroupBy wuxuu u qaadanayaa inaad bedeshay furayaasha kooxaynta, markaa calanka dib u qaybinta ayaa loo dejiyay run. Samaynta isku-darka, isku-darka, iwm. ka dib habka KooxdaBy waxay keeni doontaa dib-u-qaybin toos ah.
Soo koobid: Mar kasta oo ay suurtogal tahay, waa inaad isticmaashaa GroupByKey intii aad isticmaali lahayd GroupBy.

Way caddahay waxa khariidadaha qiimaha iyo kooxuhu sameeyaan, markaa aynu eegno wadarta () habka (laga helo src/main/java/bbejeck/model/ShareVolume.java) (Liiska 5.3).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Habka ShareVolume.sum wuxuu soo celinayaa wadarta guud ee mugga iibka saamiyada, iyo natiijada dhammaan silsiladda xisaabinta waa shay KTable ah. . Hadda waxaad fahantay doorka KTable uu ciyaaro. Marka walxaha ShareVolume ay yimaadaan, shayga KTable ee u dhigma waxa uu kaydiyaa cusboonaysiinta hadda jirta. Waxaa muhiim ah in la xasuusto in dhammaan cusbooneysiinta ay ka muuqdaan saamigii hore ee VolumeKTable, laakiin dhammaantood lama sii dirin.

Waxaan markaa isticmaalnaa KTable-kan si aan isugu geyno (tiro saamiyo ah oo la kala iibsado) si aan u gaadhno shanta shirkadood ee leh saamiga ugu sarreeya ee lagu kala iibsado warshad kasta. Ficiladayada kiiskan waxay la mid noqon doonaan kuwa isku-darka koowaad.

  1. Samee koox kale Hawlgalka si loo kooxeeyo Shakhsiga ShareVolume ee warshadaha.
  2. Bilow soo koobida walxaha ShareVolume Markan shayga isku-darka ahi waa saf mudnaan go'an. Safkan go'an, kaliya shanta shirkadood ee leh saamiga ugu badan ee la iibiyay ayaa la hayaa.
  3. Khariidadda safafka cutubka hore u samee qiime xargo oo ku soo celi shanta kayd ee ugu badan ee la kala iibsado tiro ahaan warshad ahaan.
  4. Natiijooyinka u qor qaab xardhan mawduuca.

Jaantuska Jaantuska 5.10 wuxuu muujinayaa garaafka socodka xogta. Sida aad arki karto, wareegga labaad ee farsamaynta waa mid fudud.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Hadda oo aan si cad u fahamnay qaabka wareeggan labaad ee habaynta, waxaan u jeesan karnaa koodka isha (waxa aad ka heli doontaa faylka src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Liiska 5.4) .

Bilawgani waxa uu ka kooban yahay doorsoome Queue go'an. Kani waa shay caadadii ah oo adabtarada u ah java.util.TreeSet kaas oo loo isticmaalo in lagu raad raaco natiijooyinka N sare ee hoos u dhaca saamiyada la kala gadanayo.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Waxaad hore u aragtay wicitaanada groupBy iyo mapValues, markaa geli mayno kuwaas (waxaanu wacnay habka KTable.toStream sababtoo ah habka KTable.print waa la jaray). Laakiin weli ma aadan arag nooca KTable ee wadarta() , marka waxaan ku qaadan doonaa waqti yar ka hadalka taas.

Sida aad xasuusato, waxa KTable ka dhigaya mid ka duwan in diiwaannada leh furayaasha isku midka ah loo tixgeliyo cusbooneysiin. KTable wuxuu ku beddelaa gelidii hore mid cusub. Isku darka waxay u dhacdaa si la mid ah: diiwaanadii ugu dambeeyay ee furaha la mid ah ayaa la isku daray. Marka diiwaanku yimaado, waxaa lagu daraa tusaale ahaan fasalka FixedSizePriorityQueue iyadoo la isticmaalayo adder (parameterka labaad ee habka wadarta wicitaanka), laakiin haddii diiwaan kale uu horay u jiray isla furaha, markaas rikoorkii hore waa la saarayaa iyadoo la adeegsanayo kala-goynta (xaddiga saddexaad ee gudaha). habka wadareedka wac).

Dhammaan tani waxay ka dhigan tahay in ururiyeheenna, FixedSizePriorityQueue, uusan dhammaan qiyamka ku ururin hal fure, laakiin wuxuu kaydiyaa wadarta dhaqdhaqaaqa ee tirada N ee noocyada ugu badan ee saamiyada. Geli kasta oo soo gala waxa uu ka kooban yahay wadarta tirada saamiyada ilaa hadda la iibiyay. KTable ayaa ku siin doonta macluumaadka ku saabsan saamiyada shirkadaha hadda ugu badan ee la kala iibsado, iyada oo aan u baahnayn isu geynta cusbooneysiinta kasta.

Waxaan baranay inaan samayno laba shay oo muhiim ah:

  • qiyamka kooxda ee KTable furaha guud;
  • Samee hawlgalo faa'iido leh sida isku-dubarid iyo isku-dubarid qiimayaashan kooxaysan.

Ogaanshaha sida loo fuliyo hawlgalladan waa muhiim in la fahmo macnaha xogta ku dhex socota codsiga Kafka Streams iyo fahamka macluumaadka ay sido.

Waxaan sidoo kale isu keennay qaar ka mid ah fikradaha muhiimka ah ee horay looga hadlay buuggan. Cutubka 4-aad, waxaanu kaga hadalnay sida khaladka loogu dulqaadan karo, gobolka deegaanku uu muhiim ugu yahay arjiga baahinta. Tusaalaha ugu horreeya ee cutubkani waxa uu muujiyay sababta ay dawlad-goboleedku muhiim u tahay-waxa ay ku siinaysaa awoodda aad kula socon karto macluumaadka aad hore u aragtay. Gelitaanka maxalligu waxa uu ka fogaanayaa daahitaanka shabakada, taas oo ka dhigaysa arjiga mid waxtar badan oo khalad u adkaysta.

Markaad samaynayso hawlgal kasta oo duubis ah ama isugeyn, waa inaad sheegtaa magaca dukaanka gobolka. Hawlgallada duubista iyo isku-darka waxay soo celiyaan tusaale KTable ah, KTable-kuna wuxuu isticmaalaa kaydinta gobolka si uu natiijooyinkii hore ugu beddelo kuwo cusub. Sidaad aragteen, dhammaan wixii cusbooneed laguma soo dejiyo dhuumaha, tanina waa muhiim sababtoo ah hawlgallada isku-darka waxa loogu talagalay inay soo saaraan xog kooban. Haddii aadan codsan gobolka maxalliga ah, KTable wuxuu soo gudbin doonaa dhammaan natiijooyinka isku-darka iyo duubista.

Marka xigta, waxaan eegi doonaa fulinta hawlgallada sida isku-darka muddo cayiman gudahood - waxa loogu yeero hawlgallada daaqadaha.

5.3.2. Hawlaha daaqada

Qaybtii hore, waxaan ku soo bandhignay isku-dar iyo isku-dar. Codsigu wuxuu sameeyay isku-dubarid joogto ah oo mugga iibka saamiyada, oo ay ku xigto isku-darka shanta saami ee ugu badan ee lagu kala iibsado sarrifka.

Mararka qaarkood isku-darka joogtada ah ee noocaas ah iyo natiijooyinka duubista ayaa lagama maarmaan ah. Mararka qaarkoodna waxaad u baahan tahay inaad qabato hawlo wakhti go'an oo keliya ah. Tusaale ahaan, xisaabi inta wax kala beddelashada ah ee lagu sameeyay saamiyada shirkad gaar ah 10kii daqiiqo ee u dambeeyay. Ama immisa isticmaale ayaa gujiyay banner xayeysiis cusub 15kii daqiiqo ee u dambeeyay. Codsigu waxa laga yaabaa inuu qabto hawlgalladan oo kale dhawr jeer, laakiin leh natiijooyin khuseeya oo keliya muddo cayiman (waqtiga daaqadaha).

Tirinta wax kala beddelashada iibsadaha

Tusaalaha soo socda, waxaanu la socon doonaa wax kala iibsiga saamilayda ee ganacsatada kala duwan -ha ahaado ururo waaweyn ama maalgeliyayaal caqli badan.

Waxaa jira laba sababood oo suurtagal ah oo raadraacan ah. Mid ka mid ah iyaga ka mid ah waa baahida loo qabo in la ogaado waxa ay hoggaamiyeyaasha suuqa iibsanayaan / iibinayaan. Haddii ciyaartoydan waaweyn iyo maalgashadayaasha casriga ahi ay arkaan fursad, waxay macno samaynaysaa in la raaco istiraatiijiyadooda. Sababta labaad waa rabitaanka ah in la ogaado calaamad kasta oo suurtagal ah ee ganacsiga sharci-darrada ah. Si aad tan u sameyso, waxaad u baahan doontaa inaad falanqeyso isku-xirnaanta iibka iibka ee waaweyn oo leh war-saxaafadeedyo muhiim ah.

Dabagalka noocan ahi waxa uu ka kooban yahay tallaabooyinka soo socda:

  • abuurista qulqulka akhrinta mawduuca wax kala iibsiga;
  • kooxaynta diiwaanada soo gala aqoonsiga iibsadaha iyo astaanta saamiyada. U yeedhida habka kooxda waxay soo celinaysaa tusaale fasalka KGroupedStream;
  • Habka KGroupedStream.windowedBy wuxuu soo celiyaa qulqulka xogta ee ku xaddidan daaqadda waqtiga, kaas oo ogolaanaya isku darka daaqadaha. Iyadoo ku xiran nooca daaqada, midkood TimeWindowedKStream ama SessionWindowedKStream waa la soo celinayaa;
  • xisaabaadka macaamilka ee hawlgalka isku-darka. Qulqulka xogta daaqadaha ayaa go'aaminaya in diiwaan gaar ah lagu xisaabtamayo tiradan;
  • qorista natiijooyinka mawduuc ama u soo saarida konsole inta lagu jiro horumarka.

Topology ee codsigan waa mid sahlan, laakiin sawir cad oo ku saabsan ayaa waxtar leh. Bal aan eegno sawirka. 5.11.

Marka xigta, waxaan eegi doonaa shaqada daaqadaha iyo koodka u dhigma.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"

Noocyada daaqadaha

Waxaa jira saddex nooc oo daaqadaha Kafka Streams:

  • kalfadhi;
  • "tumble" (tumbling);
  • simbiriirixid/boodboodid.

Midkee aad dooranaysaa waxay ku xidhan tahay shuruudaha ganacsigaaga. Daaqadaha boodboodka iyo boodboodka waa kuwo waqti xaddidan, halka daaqadaha fadhiga ay xaddidan yihiin dhaqdhaqaaqa isticmaalaha—muddada casharrada waxaa lagu go'aamiyaa oo keliya sida uu isticmaaluhu u firfircoon yahay. Waxa ugu weyn ee la xasuusto waa in dhammaan noocyada daaqadaha ay ku saleysan yihiin taariikhda/waqtiga shambabada ee gelinta, ma aha waqtiga nidaamka.

Marka xigta, waxaan hirgelineynaa topology-gayada mid kasta oo ka mid ah noocyada daaqadaha. Koodhka oo dhammaystiran waxa la siin doonaa oo keliya tusaalaha ugu horreeya; noocyada kale ee daaqadaha waxba isbeddeli maayaan marka laga reebo nooca hawlgalka daaqadda.

Daaqadaha fadhiga

Daaqadaha fadhiga aad bay uga duwan yihiin dhammaan noocyada kale ee daaqadaha. Waxay ku xaddidan yihiin ma aha wax aad u badan waqtiga iyo waxqabadka isticmaalaha (ama hawsha cidda aad jeclaan lahayd inaad la socoto). Daaqadaha fadhiga waxa lagu xadeeyaa xilliyada hawl la'aanta.

Jaantuska 5.12 wuxuu muujinayaa fikradda daaqadaha fadhiga. Kalfadhiga yari wuxuu ku milmi doonaa fadhiga bidixdiisa. Fadhiga dhanka midigna wuxuu noqon doonaa mid kala gooni ah sababtoo ah waxay daba socotaa muddo dheer oo hawl-qabad la'aan ah. Daaqadaha fadhigu waxay ku saleysan yihiin waxqabadka isticmaalaha, laakiin isticmaal shaambada taariikhda/waqtiga laga soo galiyay si loo go'aamiyo kalfadhiga gelitaanka iska leh.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"

Isticmaalka daaqadaha fadhiga si aad ula socoto wax kala iibsiga saamiyada

Aynu isticmaalno daaqadaha fadhiga si aan u qabsano macluumaadka ku saabsan wax kala beddelashada. Hirgelinta daaqadaha fadhiga waxa lagu muujiyay Liiska 5.5 (kaas oo laga heli karo src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Waxaad horeyba u aragtay inta badan qaliinada topology-gan, markaa uma baahnid inaad mar kale halkan ku eegto. Laakiin waxa kale oo jira dhawr waxyaalood oo cusub halkan, kuwaas oo aan hadda ka hadli doono.

Hawlgalka koox kastaa waxa ay fulisaa nooc ka mid ah hawlgallada isku-darka ah (isku-darka, duubista, ama tirinta). Waxaad samayn kartaa isku-darka wadarta guud ee socda, ama isku darka daaqadaha, kaas oo ku xisaabtamaya diiwaanada gudaha daaqada wakhti cayiman.

Koodhka ku jira Liiska 5.5 waxa uu tiriyaa tirada wax kala iibsiga gudaha daaqadaha fadhiga. Jaantuska 5.13 Ficiladan waxaa loo falanqeeyay tallaabo tallaabo.

Adigoo wacaya windowedBy(SessionWindows.with( labaatanSeconds) .ilaa(shan iyo toban daqiiqo)) waxa aanu samaynaa daaqad kalfadhi oo aan shaqaynayn oo ah 20 ilbiriqsi iyo u dhaxe joogto ah oo ah 15 daqiiqo. Muddada shaqo la'aanta ah ee 20 ilbiriqsi waxay ka dhigan tahay in arjiga uu ku jiri doono gelitaan kasta oo ku yimaada 20 ilbiriqsi gudahood dhamaadka ama bilowga fadhiga hadda galay fadhiga hadda (firfircoon).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Marka xigta, waxaan cadeyneynaa hawlgalka isku-darka ah ee loo baahan yahay in lagu sameeyo daaqada fadhiga - kiiskan, tiri. Haddii galitaanka soo galaya uu ka dhaco meel ka baxsan daaqada dhaqdhaqaaqa (dhinaca taariikhda/waqtiga shaambada), codsigu wuxuu abuuraa fadhi cusub. Inta u dhexaysa haynta macneheedu waxa weeye joogteynta fadhiga wakhti go'an oo ogolanaya xogta daahday ee dhaaftay wakhtiga hawl la'aanta laakiin wali lagu lifaaqi karo. Intaa waxaa dheer, bilowga iyo dhammaadka kalfadhiga cusub ee ka dhashay isku-darka waxay u dhigmaan shaambada taariikhda/waqtiga ugu horreysa iyo tan ugu dambeysa.

Aynu eegno dhowr waxyaalood oo laga soo galay habka tirinta si aan u aragno sida fadhiyadu u shaqeeyaan (Shaxda 5.1).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Marka diiwaanadu yimaadaan, waxaanu raadinaa fadhiyo jira oo wata fure isku mid ah, wakhti dhamaadka ka yar wakhtiga xaadirka ah ee taariikhda/waqtiga shaambada - inta u dhaxaysa dhaqdhaqaaq la'aanta, iyo wakhtiga bilawga ah ee ka weyn wakhtiga hadda/waqtiga shaambada + waxqabad la'aanta. Iyadoo tan xisaabta lagu daro, afar qoraal oo miiska laga soo saaray. 5.1 waxa la isugu daray hal fadhi sida soo socota.

1. Diiwaanka 1 ayaa imanaya marka hore, markaa wakhtiga bilawga ahi waxa uu la mid yahay wakhtiga dhamaadka waana 00:00:00.

2. Marka xigta, gelitaanka 2 ayaa imanaysa, waxaanan raadinaynaa kalfadhi aan ka horrayn 23:59:55 oo bilaabma ugu dambayn 00:00:35. Waxaan helnaa rikoorka 1 waxaanan isku darnaa kalfadhiyada 1 iyo 2. Waxaan qaadnaa wakhtiga bilawga ah ee casharka 1 (hore) iyo dhamaadka wakhtiga fadhiga 2 (ka dib), si uu fadhigayaga cusub u bilaabo 00:00:00 oo uu dhammaanayo 00: 00:15.

3. Diiwaanka 3 ayaa yimid, waxaanu raadinaa kalfadhiyo u dhexeeya 00:00:30 iyo 00:01:10 waxna ma helin. Ku dar fadhi labaad furaha 123-345-654,FFBE, bilaabma oo dhammaanaya 00:00:50.

4. Diiwaanka 4 ayaa yimid waxaanan raadineynaa kulamo u dhexeeya 23:59:45 iyo 00:00:25. Markan labada kulan ee 1 iyo 2 ayaa la helay. Dhammaan saddexda kulan ayaa la isku daray hal, with a start time of 00:00:00 iyo dhammaadka wakhtiga 00:00:15.

Laga soo bilaabo waxa lagu qeexay qaybtan, waxaa habboon in la xasuusto nuancesyada muhiimka ah ee soo socda:

  • fadhiyadu maaha daaqado cabbir go'an. Muddada fadhiga waxa lagu go'aamiyaa hawsha muddo cayiman gudaheed;
  • Taariikhda/wakhtiga shaambada ee xogta ayaa go'aamisa in dhacdadu ku dhacayso fadhi jira ama inta lagu jiro xilli aan shaqayn.

Marka xigta waxaan ka wada hadli doonaa nooca xiga ee daaqada - "tumbling" daaqadaha.

daaqadaha "Turmayaaya".

Daaqadaha tumanaya waxay qabtaan dhacdooyinka ku dhaca waqti go'an gudahooda. Bal qiyaas inaad u baahan tahay inaad qabato dhammaan macaamilada saamiyada shirkad gaar ah 20 ilbiriqsi kasta, si aad u ururiso dhammaan dhacdooyinka muddadaas. Dhammaadka 20-da ilbiriqsi, daaqaddu way soo rogtay oo waxay u guuraysaa 20-ilbiriqsi cusub oo indho-indhayn ah. Jaantuska 5.14 ayaa muujinaya xaaladan.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Sida aad arki karto, dhammaan dhacdooyinka la helay 20-kii ilbiriqsi ee ugu dambeeyay waxay ku jiraan daaqadda. Dhamaadka wakhtigan, daaqad cusub ayaa la abuurayaa.

Liistada 5.6 waxay tusinaysaa kood muujinaya isticmaalka daaqadaha tumanaya si loo qabto wax kala iibsiga saamiyada 20 sekan kasta (laga helay src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Isbeddelkan yar oo lagu sameeyay habka TimeWindows.of, waxaad isticmaali kartaa daaqada tuman. Tusaalahani ma wacayo ilaa () habka, markaa inta u dhaxaysa haynta caadiga ah ee 24 saacadood ayaa la isticmaali doonaa.

Ugu dambeyntii, waa waqtigii loo gudbi lahaa meesha ugu dambeysa ee fursadaha daaqadaha - "hopping" daaqadaha.

Daaqadaha silbanaya ("boodboodaya")

Daaqadaha silbanaya/boodboodaya waxay la mid yihiin daaqadaha tuman, laakiin farqi yar baa leh. Daaqadaha silbanaya ma sugaan ilaa dhammaadka wakhtiga u dhexeeya ka hor inta aan la abuurin daaqad cusub oo lagu socodsiiyo dhacdooyinkii dhawaa. Waxay bilaabaan xisaabin cusub ka dib muddada sugitaanka oo ka yar muddada daaqada.

Si loo muujiyo faraqa u dhexeeya daaqadaha tumashada iyo boodboodka, aan ku soo noqonno tusaalaha tirinta wax kala beddelashada saamiyada. Hadafkayagu wali waa inaanu tirinno tirada wax kala iibsiga, laakiin ma doonayno inaan sugno wakhtiga oo dhan ka hor inta aan la cusboonaysiin miiska miiska. Taa baddalkeeda, waxaan cusbooneysiin doonaa miiska waqtiyo gaaban. Tusaale ahaan, waxaan weli tirin doonaa tirada wax kala iibsiga 20-kii ilbiriqsi kasta, laakiin cusbooneysii miiska 5 ilbiriqsi kasta, sida ka muuqata shaxanka. 5.15. Xaaladdan oo kale, waxaan ku dhammaaneynaa seddex natiijo oo daaqad ah oo leh xog is dulsaaran.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Liistada 5.7 waxay tusinaysaa koodka lagu qeexayo daaqadaha simbiriiraxan (laga helay src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Daaqad tumanaysa waxa loo rogi karaa daaqad hopping ah iyadoo lagu daro wicitaanka habka hore-By(). Tusaalaha la muujiyey, inta u dhaxaysa badbaadintu waa 15 daqiiqo.

Waxaad ku aragtay qaybtan sida loo xaddido natiijooyinka isku-darka wakhtiga daaqadaha. Si gaar ah, waxa aan rabaa in aad saddexdan arrimood ee soo socda ka xasuusato qaybtan:

  • cabbirka fadhiga daaqadaha laguma xaddidna muddada, laakiin dhaqdhaqaaqa isticmaalaha;
  • Daaqadaha "turuntu" waxay bixiyaan dulmar guud oo ku saabsan dhacdooyinka wakhti go'an gudahooda;
  • Muddada boodboodka daaqadaha waa go'an, laakiin si joogto ah ayaa loo cusboonaysiiyaa waxaana laga yaabaa inay ku jiraan gelis is dulsaaran dhammaan daaqadaha.

Marka xigta, waxaan baran doonaa sida loogu beddelo KTable a KStream xiriir.

5.3.3. Isku xirka KStream iyo KTable walxaha

Cutubka 4, waxaanu ka wada hadalnay isku xidhka laba walxood oo KStream ah. Hadda waa inaan baranaa sida loo xiro KTable iyo KStream. Tan waxaa laga yaabaa in loo baahdo sababahan fudud dartood. KStream waa durdur diiwaanno ah, KTable-na waa qulqulka cusboonaysiinta rikoodhada, laakiin mararka qaarkood waxaa laga yaabaa inaad rabto inaad ku darto xaalad dheeraad ah qulqulka rikoodhada adoo isticmaalaya cusbooneysiinta KTable.

Aynu soo qaadano xogta tirada wax kala beddelashada saamiyada oo aynu ku darsano wararka sarrifka saamiyada ee warshadaha khuseeya. Waa kuwan waxa aad u baahan tahay inaad samayso si aad tan u gaadho marka la eego koodkii aad hore u haysatay.

  1. U beddel shay KTable xog ku saabsan tirada wax kala iibsiga saamiyada KStream, oo ay ku xigto ku beddelka furaha furaha tilmaamaya qaybta warshadaha ee u dhiganta astaantan saamiyada.
  2. Samee shay KTable ah oo akhriya xogta mawduuca leh wararka sarrifka saamiyada. KTable-kan cusub waxaa loo kala saari doonaa qaybta warshadaha.
  3. Ku xidh wararka cusub ee macluumaadka ku saabsan tirada wax kala beddelashada saamiyada qaybta warshadaha.

Hadda aan aragno sida loo hirgeliyo qorshe hawleedkan.

U beddel KTable KStream

Si aad KTable ugu beddesho KStream waxaad u baahan tahay inaad samayso waxa soo socda.

  1. Wac habka KTable.toStream().
  2. Adigoo wacaya habka KStream.map, ku beddel furaha magaca warshadaha, ka dibna ka soo saar shayga Kooban ee Tusaalaha Daaqadaha.

Waxaannu u xidhi doonaa hawlgaladan sida soo socota (koodka waxa laga heli karaa faylka src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Liiska 5.8).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Sababtoo ah waxaan fulineynaa hawlgalka KStream.map, tusaalaha KStream ee la soo celiyay si toos ah ayaa loo qaybiyaa marka loo isticmaalo isku xirka.

Waxaan dhameystirnay habka beddelka, marka xigta waxaan u baahanahay inaan abuurno shayga KTable si loo akhriyo wararka saamiyada.

Abuuritaanka KTable ee wararka saamiyada

Nasiib wanaag, abuurista shayga KTable waxay qaadataa hal xariiq oo kood ah (koodka waxaa laga heli karaa src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Liiska 5.9).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Waxaa xusid mudan in aan loo baahnayn walxaha Serde in la cayimo, maadaama xargaha Serdes loo isticmaalo goobaha. Sidoo kale, adoo isticmaalaya tirinta UGU HORREEYA, miiska waxaa ka buuxsamay diiwaanno bilowga hore.

Hadda waxaan u gudbi karnaa tallaabada ugu dambeysa - isku xirka.

Ku xidhida wararka cusub iyo xogta tirinta wax kala iibsiga

Samaynta xidhiidh ma aha mid adag. Waxaan isticmaali doonaa ku biirista bidix haddii ay dhacdo in aysan jirin wararka saamiyada warshadaha khuseeya (koodka lagama maarmaanka ah waxaa laga heli karaa faylka src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Liiska 5.10).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Hawlwadeenkan leftJoin waa mid fudud. Si ka duwan ku biirista cutubka 4, habka JoinWindow looma isticmaalo sababtoo ah marka la samaynayo ku biirista KStream-KTable, waxaa jira hal gelitaan oo kaliya ee KTable ee fure kasta. Xidhiidhka noocan oo kale ah kuma koobna wakhtiga: diiwaanku waa mid ku jira KTable ama maqan yahay. Gabagabada ugu weyn: Isticmaalka walxaha KTable waxaad ku kobcin kartaa KStream xogta tixraaca oo aan si joogto ah loo cusboonaysiin.

Hadda waxaan eegi doonaa hab ka hufan oo lagu tayeeyo dhacdooyinka KStream.

5.3.4. GlobalKTable walxaha

Sida aad arki karto, waxaa jirta baahi loo qabo in la tayeeyo durdurrada dhacdooyinka ama lagu daro macnaha guud iyaga. Cutubka 4aad waxaad ku aragtay xidhiidhka ka dhexeeya laba walxood oo KStream ah, qaybta horena waxaad ku aragtay xidhiidhka ka dhexeeya KStream iyo KTable. Dhammaan kiisaskan, waxaa lagama maarmaan ah in dib loo qaybiyo qulqulka xogta marka la samaynayo furayaasha nooc ama qiime cusub. Mararka qaarkood dib u qaybinta si cad ayaa loo sameeyaa, mararka qaarkoodna Kafka Streams ayaa si toos ah u sameeya. Dib-u-qaybintu waa lagama maarmaan sababtoo ah furayaasha ayaa isbeddelay, diiwaanaduna waa inay ku dhammaadaan qaybo cusub, haddii kale xiriirku wuxuu noqon doonaa mid aan macquul ahayn (tani waxaa looga hadlay cutubka 4, qaybta "Dib-u-qaybinta xogta" ee qaybta 4.2.4).

Dib-u-qaybintu waxay leedahay kharash

Dib-u-qaybintu waxay u baahan tahay kharash - kharashyo dheeraad ah oo kheyraad ah si loo abuuro mawduucyo dhexdhexaad ah, kaydinta xogta nuqul ka mid ah mawduuc kale; waxa kale oo ay la macno tahay daahitaan korodhay oo ay ugu wacan tahay qorista iyo akhrinta mawduucan. Intaa waxaa dheer, haddii aad u baahan tahay in aad ku biirto in ka badan hal dhinac ama cabbir, waa in aad silsiladda xidhidhiyaha ku biirtaa, khariidad diiwaanka furayaal cusub, oo aad mar kale socodsiisaa habka dib-qaybinta.

Ku xidhida xog-ururinta yaryar

Xaaladaha qaarkood, mugga xogta tixraaca ee lagu xidhidhiyaa waa mid aad u yar, sidaas darteed koobiyada dhamaystiran waxay si fudud ugu haboonaan karaan gudaha meel kasta. Xaaladaha sidan oo kale ah, Kafka Streams waxay bixisaa fasalka GlobalKTable.

Tusaalooyinka GlobalKTable waa kuwo gaar ah sababtoo ah codsigu wuxuu ku celceliyaa dhammaan xogta mid kasta oo ka mid ah noodhka. Oo maadaama dhammaan xogta ay ku taal nood kasta, looma baahna in la qaybiyo qulqulka dhacdada iyada oo la adeegsanayo furaha xogta tixraaca si ay u hesho dhammaan qaybaha. Waxa kale oo aad samayn kartaa isku xidho aan furaha lahayn adiga oo isticmaalaya walxaha GlobalKTable. Aan ku laabano mid ka mid ah tusaalayaashii hore si aan u muujino sifadan.

Ku xidhida walxaha KStream iyo walxaha GlobalKTable

Qaybta 5.3.2, waxaanu samaynay isku darka daaqada ee macaamil ganacsi ee iibsadayaasha. Natiijadii ka soo baxday isu geyntan ayaa u ekaa sidan:

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

In kasta oo natiijooyinkani ay u adeegeen ujeeddada, waxay noqon lahayd mid aad waxtar u leh haddii magaca macmiilka iyo magaca shirkadda oo buuxa sidoo kale la soo bandhigi lahaa. Si aad ugu darto magaca macmiilka iyo magaca shirkadda, waxaad samayn kartaa ku biirista caadiga ah, laakiin waxaad u baahan doontaa inaad samayso laba khariidad oo muhiim ah iyo dib u qaybinta. GlobalKTable waxaad ka fogaan kartaa qiimaha hawlgallada noocaas ah.

Si tan loo sameeyo, waxaanu isticmaali doonaa shayga countStream liiska 5.11 (koodka u dhigma waxaa laga heli karaa src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) oo ku xidho laba GlobalKTable shay.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Horay ayaan tan uga wada hadalnay, markaa ku celin maayo. Laakiin waxaan ogsoonahay in koodhka ku jira toStream () shaqada khariidadda uu la soo koobo shay shaqaynaya halkii uu ka ahaan lahaa odhaah lambda ah oo gudaha ah si loo akhriyo.

Tallaabada xigta waa in lagu dhawaaqo laba tusaale oo GlobalKTable ah (koodka la muujiyay waxaa laga heli karaa faylka src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Liiska 5.12).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"

Fadlan ogow in magacyada mawduucyada lagu sifeeyay iyadoo la isticmaalayo noocyo la tiriyey.

Hadda oo aan haysano dhammaan qaybaha diyaarsan, waxa hadhay waa in la qoro koodhka isku xirka (kaas oo laga heli karo faylka src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Liiska 5.13).

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
In kasta oo ay jiraan laba xidhmo oo ku jira koodhkan, way xidhan yihiin sababtoo ah midkoodna natiijadooda si gaar ah looma isticmaalo. Natiijooyinka waxaa la soo bandhigay dhamaadka hawlgalka oo dhan.

Markaad socodsiiso hawlgalka isku-darka sare, waxaad heli doontaa natiijooyin sidan oo kale ah:

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

Nuxurku isma bedelin, laakiin natiijooyinkani waxay u muuqdaan kuwo cad.

Haddii aad hoos u tirto cutubka 4, waxaad hore u aragtay dhawr nooc oo xidhiidhineed oo shaqaynaya. Waxay ku qoran yihiin shaxda. 5.2. Shaxdani waxa ay ka tarjumaysaa awoodaha isku xidhka ee nooca 1.0.0 ee Kafka Streams; Wax baa laga yaabaa inay isbeddelaan sii daynta mustaqbalka.

Buugga “Kafka Streams in Action. Codsiyada iyo adeegyada yar yar ee shaqada waqtiga-dhabta ah"
Si aan wax u soo koobno, aan dib u soo koobno ​​aasaaska: waxaad ku xiri kartaa qulqulka dhacdooyinka (KStream) oo waxaad cusbooneysiin kartaa durdurrada (KTable) adoo isticmaalaya gobolka maxalliga ah. Haddii kale, haddii cabbirka xogta tixraacu aanay aad u weynayn, waxaad isticmaali kartaa shayga GlobalKTable. GlobalKTables waxay ku celceliyaan dhammaan qaybaha qayb kasta oo Kafka Streams codsiga noodhka, hubinta in dhammaan xogta la heli karo iyada oo aan loo eegin qaybta furaha u dhigma.

Marka xigta waxaan arki doonaa qaabka Kafka Streams, taas oo ay ugu wacan tahay inaan ilaalin karno isbeddelada gobolka annaga oo aan isticmaalin xogta mawduuca Kafka.

5.3.5. Xaalad la waydiin karo

Waxaan horey u sameynay dhowr hawlgal oo ku lug leh gobolka oo had iyo jeer natiijooyinka ku soo saara konsole (ujeeddooyin horumarineed awgeed) ama u qor mawduuc (ujeeddooyin wax soo saar). Markaad natiijooyinka u qorayso mawduuc, waa inaad isticmaashaa macaamilka Kafka si aad u aragto.

Akhrinta xogta mawduucyadan waxaa loo qaadan karaa nooc ka mid ah aragtida dhabta ah. Ujeeddadeenna, waxaan u isticmaali karnaa qeexidda aragtida la maaday ee Wikipedia: “... shay xog-ururineed oo ka kooban natiijooyinka weydiinta. Tusaale ahaan, waxay noqon kartaa koobi maxalli ah oo xog fog ah, ama qayb hoose oo ka mid ah safafka iyo/ama tiirarka miiska ama ku biirista natiijooyinka, ama shaxda kooban ee lagu helay isku-darka” (https://en.wikipedia.org/wiki /Arragti_Materialized_).

Kafka Streams sidoo kale wuxuu kuu ogolaanayaa inaad ku socodsiiso weydiimaha isdhexgalka ee dukaamada gobolka, taasoo kuu ogolaaneysa inaad si toos ah u akhrido aragtiyadan la taaban karo. Waxaa muhiim ah in la ogaado in weydiinta dukaanka gobolku ay tahay hawlgal akhrin kaliya ah. Tani waxay hubinaysaa inaadan ka werwerin inaad si lama filaan ah gobolka uga dhigto mid aan is-waafaqayn inta codsigaagu ku socdo xogta.

Awoodda aad si toos ah u waydiin karto dukaamada gobolka waa muhiim. Tani waxay ka dhigan tahay inaad abuuri karto codsiyada dashboardka adigoon marka hore ka soo qaadan xogta macaamiisha Kafka. Waxa kale oo ay kordhisaa waxtarka codsiga, sababtoo ah ma jirto baahi loo qabo in mar kale la qoro xogta:

  • Thanks to goobta xogta, si dhakhso ah ayaa loo heli karaa;
  • nuqul ka mid ah xogta waa la tirtiray, maadaama aan loo qorin kaydinta dibadda.

Waxa ugu weyn ee aan rabo in aad xasuusato waa in aad si toos ah uga sheegi karto codsigaaga dhexdiisa. Fursadaha ay tani ku siinayso lama soo koobi karo. Halkii aad ka cuni lahayd xogta Kafka oo aad ku kaydin lahayd diiwaannada kaydka xogta codsiga, waxaad waydiin kartaa dukaamada gobolka oo leh natiijo isku mid ah. Weydiinta tooska ah ee dukaamada gobolka waxay ka dhigan tahay kood ka yar (macmiil ma jiro) iyo software ka yar (looma baahna miiska macluumaadka si loo kaydiyo natiijooyinka).

Waxaan cutubkan ku soo koobnay wax yar oo ka mid ah dhulka, marka waxaan ka tagi doonaa dooddeena ku saabsan weydiimaha isdhexgalka ee ka dhanka ah dukaamada gobolka hadda. Laakin ha werwerin: cutubka 9, waxaanu ku abuuri doonaa codsi dashboard fudud oo leh su'aalo is dhexgal ah. Waxay isticmaali doontaa qaar ka mid ah tusaalooyinka cutubyadan iyo kuwii hore si ay u muujiyaan weydiimaha isdhexgalka iyo sida aad ugu dari karto codsiyada Kafka Streams.

Soo koobid

  • Walxaha KStream waxay matalaan durdurrada dhacdooyinka, marka la barbar dhigo gelinta xogta xogta. Walxaha KTable waxay u taagan yihiin cusboonaysiinta durdurrada, sida cusboonaysiinta xogta. Baaxadda shayga KTable ma koraan, diiwaanadii hore waxaa lagu bedelay kuwo cusub.
  • Walxaha KTable ayaa looga baahan yahay hawlgallada isku-darka.
  • Isticmaalka hawlgallada daaqadaha, waxaad u qaybin kartaa xogta la isku daray baaldiyada waqtiga.
  • Thanks to GlobalKTable walxaha, waxaad geli kartaa xogta tixraaca meel kasta oo codsiga ah, iyadoo aan loo eegin qaybinta.
  • Isku xirka u dhexeeya walxaha KStream, KTable iyo GlobalKTable waa suurtagal.

Ilaa hadda, waxaanu diirada saarnay dhisitaanka codsiyada Kafka Streams anagoo adeegsanayna heerka sare ee KStream DSL. Inkasta oo habka heerka sare uu kuu ogolaanayaa inaad abuurto barnaamijyo hufan oo kooban, adoo isticmaalaya waxay ka dhigan tahay ganacsi-off. La shaqaynta DSL KStream macnaheedu waa kordhinta kooban ee koodkaaga adiga oo yaraynaya heerka xakamaynta. Cutubka soo socda, waxaan ku eegi doonaa maamulaha heerka hoose API iyo isku day ganacsi-offs kale. Barnaamijyadu waxay ka badnaan doonaan sidii ay ahaan jireen markii hore, laakiin waxaan awood u yeelan doonaa inaan abuurno ku dhawaad ​​noodhka gacanta ee aan u baahan karno.

→ Faahfaahin dheeraad ah oo ku saabsan buugga waxaad ka heli kartaa at website-ka daabacaha

→ Habrozhiteli 25% qiimo dhimis iyadoo la isticmaalayo coupon - Kafka durdurrada

→ Marka la bixiyo kharashka nooca warqadda ee buugga, buug elektaroonig ah ayaa lagu soo diri doonaa e-mail.

Source: www.habr.com

Add a comment