An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama" Dia duit, cónaitheoirí Khabro! Tá an leabhar seo oiriúnach d'aon fhorbróir atá ag iarraidh próiseáil snáithe a thuiscint. Cabhróidh tuiscint níos fearr ar ríomhchlárú dáilte leat Sruthanna Kafka agus Kafka a thuiscint níos fearr. Bheadh ​​​​sé deas eolas a bheith agat ar chreat Kafka féin, ach níl sé seo riachtanach: inseoidh mé duit gach rud atá uait. Foghlaimeoidh forbróirí agus novices Kafka a bhfuil taithí acu araon conas feidhmchláir phróiseála srutha suimiúla a chruthú ag baint úsáide as leabharlann Kafka Streams sa leabhar seo. Foghlaimeoidh forbróirí meántéarmacha agus ardchéime Java a bhfuil eolas acu cheana féin ar choincheapa cosúil le sraithiú a gcuid scileanna a chur i bhfeidhm chun feidhmchláir Kafka Streams a chruthú. Tá cód foinse an leabhair scríofa i Java 8 agus baintear úsáid shuntasach as comhréir slonn lambda Java 8, agus mar sin beidh a fhios agat conas oibriú le feidhmeanna lambda (fiú i dteanga ríomhchláraithe eile) áisiúil.

Sliocht. 5.3. Oibríochtaí comhiomlánaithe agus fuinneoige

Sa chuid seo, bogfaimid ar aghaidh chun iniúchadh a dhéanamh ar na codanna is bisiúla de Shruthanna Kafka. Go dtí seo tá na gnéithe seo a leanas de Shruthanna Kafka clúdaithe againn:

  • topology próiseála a chruthú;
  • úsáid stáit in iarratais sruthú;
  • naisc sruth sonraí a fheidhmiú;
  • difríochtaí idir sruthanna imeachta (KStream) agus sruthanna nuashonraithe (KTable).

Sna samplaí seo a leanas tabharfaimid na heilimintí seo go léir le chéile. Foghlaimeoidh tú freisin faoi fhuinneoga, gné iontach eile d’fheidhmchláir sruthú. Comhiomlánú simplí a bheidh sa chéad sampla againn.

5.3.1. Comhiomlánú na ndíolachán stoic de réir earnála tionscail

Is uirlisí ríthábhachtacha iad comhiomlánú agus grúpáil agus tú ag obair le sonraí sruthaithe. Is minic nach leor scrúdú a dhéanamh ar thaifid aonair de réir mar a fhaightear iad. Chun faisnéis bhreise a bhaint as sonraí, is gá iad a ghrúpáil agus a chomhcheangal.

Sa sampla seo, beidh tú a chur ar an éadaí trádálaí lae a bhfuil gá a rianú ar an méid díolacháin de stoic cuideachtaí i dtionscail éagsúla. Go sonrach, tá suim agat sna cúig chuideachta leis na díolacháin scaireanna is mó i ngach tionscal.

Teastóidh na céimeanna éagsúla seo a leanas le comhiomlánú den sórt sin chun na sonraí a aistriú go dtí an fhoirm inmhianaithe (ag labhairt i dtéarmaí ginearálta).

  1. Cruthaigh foinse ábharbhunaithe a fhoilsíonn faisnéis trádála stoc amh. Beidh orainn réad den chineál StockTransaction a mhapáil chuig réad den chineál ShareVolume. Is é an pointe go bhfuil meiteashonraí díolacháin sa réad StockTransaction, ach níl de dhíth orainn ach sonraí faoi líon na scaireanna atá á ndíol.
  2. Grúpáil sonraí ShareVolume de réir siombail stoic. Nuair a bheidh tú grúpáilte de réir siombaile, is féidir leat na sonraí seo a ghrúpáil ina bhfo-iomlán de mhéideanna na ndíolachán stoic. Is fiú a thabhairt faoi deara go dtugann an modh KStream.groupBy cás den chineál KGroupedStream ar ais. Agus is féidir leat sampla KTable a fháil ach glaoch breise a chur ar an modh KGroupedStream.reduce.

Cad é an comhéadan KGroupedStream

Tugann na modhanna KStream.groupBy agus KStream.groupByKey sampla de KGroupedStream ar ais. Is léiriú idirmheánach é KGroupedStream de shruth imeachtaí tar éis é a ghrúpáil de réir eochracha. Níl sé beartaithe ar chor ar bith le haghaidh obair dhíreach leis. Ina áit sin, úsáidtear KGroupedStream le haghaidh oibríochtaí comhiomlánaithe, a mbíonn KTable i gcónaí mar thoradh air. Agus ós rud é gur KTable toradh na n-oibríochtaí comhiomlánaithe agus go n-úsáideann siad stór stáit, is féidir nach seolfar gach nuashonrú dá bharr níos faide síos an phíblíne.

Tugann an modh KTable.groupBy KGroupedTable comhchosúil ar ais - léiriú idirmheánach den sruth nuashonruithe, athghrúpáilte le heochair.

Glacaimis sos gairid agus breathnaímid ar Fíor. 5.9, a thaispeánann an méid atá bainte amach againn. Ba cheart go mbeadh an topology seo an-eolach agat cheana féin.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Breathnaímid anois ar an gcód don topology seo (is féidir é a fháil sa chomhad src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Liostú 5.2).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Déantar idirdhealú idir an cód a thugtar mar gheall ar a ghiorracht agus a líon mór gníomhartha a dhéantar i roinnt línte. Seans go dtabharfaidh tú faoi deara rud éigin nua sa chéad pharaiméadar den mhodh builder.stream: luach den chineál enum AutoOffsetReset.EARLIEST (tá LATEST ann freisin), socraithe ag baint úsáide as an modh Consumed.withOffsetResetPolicy. Is féidir an cineál áirithe seo a úsáid chun straitéis athshocraithe fhritháireamh a shonrú do gach KStream nó KTable agus bíonn tosaíocht aige ar an rogha athshocraithe fritháirimh ón gcumraíocht.

GroupByKey agus GroupBy

Tá dhá mhodh ag comhéadan KStream chun taifid a ghrúpáil: GroupByKey agus GroupBy. Tugann an bheirt acu KGroupedTable ar ais, mar sin b'fhéidir go bhfuil tú ag smaoineamh cad é an difríocht idir iad agus cathain a úsáidfidh siad cén ceann?

Úsáidtear an modh GroupByKey nuair atá na heochracha sa KSstream neamhfholamh cheana féin. Agus an rud is tábhachtaí, níor socraíodh riamh an bhratach “éilíonn ath-dheighilt”.

Glacann an modh GroupBy leis go bhfuil na heochracha grúpála athraithe agat, agus mar sin tá an bhratach athscartha socraithe mar a bheidh fíor. Má dhéantar nascanna léirithe, comhbhailiúcháin, etc. tar éis an mhodha GroupBy, déanfar athdheighilt uathoibríoch mar thoradh air.
Achoimre: Nuair is féidir, ba cheart duit GroupByKey a úsáid seachas GroupBy.

Tá sé soiléir cad a dhéanann na luachanna léarscáileanna agus modhanna grúpaBy, mar sin déanaimis féachaint ar an modh sum() (le fáil in src/main/java/bbejeck/model/ShareVolume.java) (Liostú 5.3).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Tugann an modh ShareVolume.sum iomlán reatha an méid díolacháin stoic ar ais, agus is é toradh an tslabhra iomláin ríomhanna ná réad KTable . Anois tuigeann tú an ról atá ag KTable. Nuair a thagann réada ShareVolume, stórálann an réad KTable comhfhreagrach an nuashonrú reatha is déanaí. Tá sé tábhachtach a mheabhrú go léirítear gach nuashonrú sa shareVolumeKTable roimhe seo, ach ní sheoltar iad go léir a thuilleadh.

Bainimid úsáid ansin as an KTable seo chun comhiomlán a dhéanamh (de réir líon na scaireanna a thrádáiltear) chun na cúig chuideachta a bhfuil an líon is airde scaireanna a thrádáiltear i ngach tionscal acu a aimsiú. Beidh ár ngníomhartha sa chás seo cosúil leis na cinn don chéad chomhiomlán.

  1. Déan oibríocht groupBy eile chun oibiachtaí aonair ShareVolume a ghrúpáil de réir tionscail.
  2. Tosaigh ag déanamh achoimre ar rudaí ShareVolume. An uair seo is scuaine tosaíochta de mhéid seasta é an réad comhiomlánaithe. Sa scuaine méid seasta seo, ní choinnítear ach na cúig chuideachta a bhfuil na méideanna is mó scaireanna díolta acu.
  3. Mapáil na scuainí ón alt roimhe seo chuig luach teaghrán agus cuir ar ais na cúig stoc is mó a thrádáiltear de réir uimhreacha de réir tionscail.
  4. Scríobh na torthaí leis an topaic i bhfoirm teaghrán.

I bhFíor. Taispeánann Fíor 5.10 an graf topology sreafa sonraí. Mar a fheiceann tú, tá an dara babhta próiseála simplí go leor.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Anois go bhfuil tuiscint shoiléir againn ar struchtúr an dara babhta próiseála seo, is féidir linn dul chuig a cód foinse (gheobhaidh tú é sa chomhad src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Liostú 5.4) .

Tá athróg seastaQueue sa tosaitheoir seo. Is réad saincheaptha é seo atá ina oiriúntóir do java.util.TreeSet a úsáidtear chun na torthaí N barr a rianú in ord íslitheach na scaireanna a thrádáiltear.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Tá na glaonna groupBy agus mapValues ​​feicthe agat cheana féin, mar sin ní rachaimid isteach iontu sin (tá an modh KTable.toStream ag glaoch orainn toisc go bhfuil an modh KTable.print dímheasta). Ach níl an leagan KTable de aggregate() feicthe agat go fóill, mar sin caithfimid beagán ama ag plé leis sin.

De réir mar a chuimhníonn tú, is é an rud a dhéanann KTable difriúil ná go meastar taifid a bhfuil na heochracha céanna acu mar nuashonruithe. Cuirtear ceann nua in ionad an tseaniontrála KTable. Tarlaíonn comhiomlánú ar an mbealach céanna: déantar na taifid is déanaí leis an eochair chéanna a chomhiomlánú. Nuair a thagann taifead, cuirtear leis an gcás ranga FixedSizePriorityQueue é ag baint úsáide as adder (an dara paraiméadar sa ghlao ar an modh comhiomlán), ach má tá taifead eile ann cheana féin leis an eochair chéanna, baintear an seantaifead trí úsáid a bhaint as dealaitheoir (an tríú paraiméadar i an modh comhiomlán glao).

Ciallaíonn sé seo go léir nach ndéanann ár gcomhbhailitheoir, FixedSizePriorityQueue, na luachanna go léir a chomhiomlánú le heochair amháin, ach go stórálann sé suim ghluaiste de chainníochtaí na stoc N is mó a thrádáiltear. Tá líon iomlán na scaireanna a díoladh go dtí seo i ngach iontráil isteach. Tabharfaidh KTable faisnéis duit faoi na scaireanna cuideachtaí is mó a thrádáiltear faoi láthair, gan gá le comhiomlánú rollach ar gach nuashonrú.

D’fhoghlaimíomar dhá rud tábhachtach a dhéanamh:

  • luachanna grúpa in KTable le heochair choiteann;
  • oibríochtaí úsáideacha a dhéanamh ar nós rolladh suas agus comhiomlánú ar na luachanna grúpáilte seo.

Tá sé tábhachtach go mbeadh a fhios agat conas na hoibríochtaí seo a dhéanamh chun brí na sonraí a ghluaiseann trí fheidhmchlár Kafka Streams a thuiscint agus chun an fhaisnéis a iompraíonn sé a thuiscint.

Tá cuid de na príomhchoincheapa a pléadh níos luaithe sa leabhar seo tugtha le chéile againn freisin. I gCaibidil 4, phléamar cé chomh tábhachtach is atá stát áitiúil locht-fhulangach le haghaidh feidhmchlár sruthaithe. Léirigh an chéad sampla sa chaibidil seo cén fáth a bhfuil an stát áitiúil chomh tábhachtach sin - ligeann sé duit súil a choinneáil ar an bhfaisnéis atá feicthe agat cheana féin. Seachnaíonn rochtain áitiúil moilleanna líonra, rud a fhágann go mbeidh an feidhmchlár níos feidhmiúla agus níos resistant ó thaobh earráidí.

Agus aon oibríocht rollta nó comhiomlánaithe á déanamh agat, ní mór duit ainm an stórais stáit a shonrú. Tugann na hoibríochtaí rolladh suas agus comhiomlánaithe sampla KTable ar ais, agus úsáideann an KTable stóráil stáit chun torthaí nua a chur in ionad na seanthorthaí. Mar a chonaic tú, ní sheoltar gach nuashonrú ar an bpíblíne, agus tá sé seo tábhachtach mar go bhfuil oibríochtaí comhiomlánaithe deartha chun faisnéis achomair a sholáthar. Mura gcuireann tú stát áitiúil i bhfeidhm, cuirfidh KTable na torthaí comhiomlánaithe agus rollta suas ar aghaidh.

Ansin, féachfaimid ar oibríochtaí a dhéanamh mar chomhiomlánú laistigh de thréimhse shonrach ama - oibríochtaí fuinneoige mar a thugtar orthu.

5.3.2. Oibríochtaí fuinneoige

Sa chuid roimhe seo, thugamar isteach convolution sleamhnáin agus comhiomlánú. Rinne an t-iarratas rolladh suas leanúnach ar dhíolacháin stoic agus ina dhiaidh sin comhiomlánaíodh na cúig stoc is mó a thrádáiltear ar an malartán.

Uaireanta is gá comhiomlánú leanúnach agus rolladh suas torthaí den sórt sin. Agus uaireanta ní mór duit oibríochtaí a dhéanamh ach amháin thar thréimhse áirithe ama. Mar shampla, ríomh cé mhéad idirbheart malairte a rinneadh le scaireanna de chuid cuideachta ar leith le 10 nóiméad anuas. Nó cé mhéad úsáideoir a chliceáil ar bhratach fógraíochta nua le 15 nóiméad anuas. Féadfaidh feidhmchlár oibríochtaí den sórt sin a dhéanamh go minic, ach le torthaí nach mbaineann ach le tréimhsí sonraithe ama (fuinneoga ama).

Idirbhearta malairte an cheannaitheora a chomhaireamh

Sa chéad sampla eile, déanfaimid idirbhearta stoic a rianú ar fud trádálaithe iolracha - eagraíochtaí móra nó airgeadaithe aonair cliste.

Tá dhá chúis fhéideartha leis an rianú seo. Ceann acu is ea an gá a bheith ar an eolas faoi na cinn atá á gceannach ag na ceannairí margaidh nó ag díol. Má fheiceann na himreoirí móra agus na hinfheisteoirí sofaisticiúla seo deis, tá ciall leis a straitéis a leanúint. Is é an dara chúis atá leis ná fonn aon chomharthaí féideartha de thrádáil chos istigh mídhleathach a fheiceáil. Chun seo a dhéanamh, beidh ort anailís a dhéanamh ar an gcomhghaol idir spikes díolacháin mhóra agus preaseisiúintí tábhachtacha.

Is éard atá i rianú den sórt sin na céimeanna seo a leanas:

  • sruth a chruthú le léamh ón topaic stoc-idirbheart;
  • taifid ag teacht isteach a ghrúpáil de réir ID an cheannaitheora agus siombail stoic. Má chuirtear glaoch ar an modh groupBy, seolann tú sampla den rang KGroupedStream ar ais;
  • Filleann an modh KGroupedStream.windowedBy sruth sonraí atá teoranta d'fhuinneog ama, a cheadaíonn comhiomlánú fuinneog. Ag brath ar an gcineál fuinneoige, cuirtear sruth TimeWindowedKstream nó SessionWindowedKSstream ar ais;
  • comhaireamh idirbheart don oibríocht chomhiomlánaithe. Cinneann an sreabhadh sonraí fuinneoige cibé an gcuirtear taifead áirithe san áireamh sa chomhaireamh seo;
  • torthaí a scríobh chuig topaic nó iad a aschur chuig an consól le linn forbartha.

Tá topology an fheidhmchláir seo simplí, ach bheadh ​​pictiúr soiléir de ina chuidiú. A ligean ar ghlacadh le breathnú ar Fig. 5.11.

Ansin, féachfaimid ar fheidhmiúlacht oibríochtaí fuinneoige agus ar an gcód comhfhreagrach.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"

Cineálacha fuinneoga

Tá trí chineál fuinneoga i Sruthanna Kafka:

  • seisiúnach ;
  • “tumbling” (tumbling);
  • sleamhnú/hopping.

Cén ceann a roghnaíonn tú ag brath ar do riachtanais ghnó. Tá teorainn ama ag fuinneoga tumbling agus léimneach, agus tá fuinneoga seisiúin teoranta ag gníomhaíocht úsáideora—is ar cé chomh gníomhach is atá an t-úsáideoir amháin a shocraítear fad an tseisiúin/na seisiúin. Is é an rud is mó le cuimhneamh ná go bhfuil gach cineál fuinneoige bunaithe ar stampaí dáta/ama na n-iontrálacha, ní ar am an chórais.

Ansin, cuirimid ár topology i bhfeidhm le gach ceann de na cineálacha fuinneoige. Ní thabharfar an cód iomlán ach sa chéad sampla; i gcás cineálacha eile fuinneoga ní athrófar aon rud ach amháin an cineál oibríochta fuinneoige.

Fuinneoga seisiúin

Tá fuinneoga seisiúin an-difriúil ó gach cineál fuinneoga eile. Tá siad teoranta nach bhfuil an oiread sin ama agus ag gníomhaíocht an úsáideora (nó gníomhaíocht an eintitis ar mhaith leat a rianú). Tá tréimhsí neamhghníomhaíochta teorannaithe ag fuinneoga seisiúin.

Léiríonn Fíor 5.12 coincheap na bhfuinneoga seisiúin. Déanfaidh an seisiún níos lú cumasc leis an seisiún ar chlé. Agus beidh an seisiún ar dheis ar leithligh toisc go leanann sé tréimhse fhada neamhghníomhaíochta. Tá fuinneoga seisiúin bunaithe ar ghníomhaíocht úsáideora, ach bain úsáid as stampaí dáta/ama ó iontrálacha chun a chinneadh cé acu seisiún lena mbaineann an iontráil.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"

Ag baint úsáide as fuinneoga seisiúin chun idirbhearta stoic a rianú

Bainimis úsáid as fuinneoga seisiúin chun faisnéis a ghabháil faoi idirbhearta malairte. Taispeántar cur i bhfeidhm fuinneoga seisiúin i Liostú 5.5 (atá le fáil in src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Tá an chuid is mó de na hoibríochtaí sa topology seo feicthe agat cheana féin, mar sin ní gá breathnú orthu arís anseo. Ach tá roinnt gnéithe nua anseo freisin, a phléfaimid anois.

Is gnách go ndéanann oibríocht ghrúpa ar bith oibríocht chomhiomlánaithe de chineál éigin (comhiomlánú, rolladh suas nó comhaireamh). Is féidir leat comhiomlánú carnach a dhéanamh le hiomlán reatha, nó comhiomlánú fuinneoige, a chuireann taifid san áireamh laistigh de fhuinneog ama sonraithe.

Áiríonn an cód i Liostú 5.5 líon na n-idirbheart laistigh de fhuinneoga seisiúin. I bhFíor. 5.13 déantar anailís ar na gníomhartha seo céim ar chéim.

Trí ghlao a chur ar windowedBy(SessionWindows.with(ficheSeconds).go dtí (fifteenMinutes)) cruthaímid fuinneog seisiúin le eatramh neamhghníomhaíochta 20 soicind agus eatramh marthanachta de 15 nóiméad. Ciallaíonn eatramh díomhaoin 20 soicind go n-áireofar san fheidhmchlár aon iontráil a thagann laistigh de 20 soicind ó dheireadh nó ó thús an tseisiúin reatha isteach sa seisiún reatha (gníomhach).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Ansin, sonraímid cén oibríocht chomhiomlánaithe is gá a dhéanamh i bhfuinneog an tseisiúin - sa chás seo, comhaireamh. Má thiteann iontráil isteach lasmuigh den fhuinneog neamhghníomhaíochta (ar gach taobh den stampa dáta/ama), cruthaíonn an feidhmchlár seisiún nua. Ciallaíonn eatramh coinneála seisiún a choinneáil ar feadh méid áirithe ama agus ceadaíonn sé sonraí déanacha a shíneann thar thréimhse neamhghníomhaíochta an tseisiúin ach is féidir a cheangal fós. Ina theannta sin, comhfhreagraíonn tús agus deireadh an tseisiúin nua a eascraíonn as an gcumasc don stampa dáta/ama is luaithe agus is déanaí.

Breathnaímid ar chúpla iontráil ón modh comhairimh féachaint conas a oibríonn seisiúin (Tábla 5.1).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Nuair a thagann taifid, féachaimid le haghaidh seisiúin atá ann cheana féin leis an eochair chéanna, am deiridh níos lú ná an dáta / stampa ama reatha - eatramh neamhghníomhaíochta, agus am tosaithe níos mó ná an dáta / stampa ama reatha + eatramh neamhghníomhaíochta. Ag cur seo san áireamh, ceithre iontráil ón tábla. Déantar 5.1 a chumasc in aon seisiún amháin mar seo a leanas.

1. Tagann taifead 1 ar dtús, mar sin tá an t-am tosaigh comhionann leis an am deiridh agus is é 00:00:00.

2. Ar aghaidh, sroicheann iontráil 2, agus táimid ag iarraidh seisiúin a chríochnaíonn tráth nach luaithe ná 23:59:55 agus a thosaíonn tráth nach déanaí ná 00:00:35. Faighimid taifead 1 agus cuirtear seisiúin 1 agus 2 le chéile. Déanaimid am tosaigh seisiún 1 (níos luaithe) agus am deiridh seisiún 2 (níos déanaí), ionas go dtosaíonn ár seisiún nua ag 00:00:00 agus críochnaíonn sé ag 00:00: 15:XNUMX.

3. Tagann taifead 3, féachaimid le haghaidh seisiúin idir 00:00:30 agus 00:01:10 agus ní aimsímid aon. Cuir an dara seisiún leis an eochair 123-345-654,FFBE, ag tosú agus ag críochnú ag 00:00:50.

4. Tagann taifead 4 agus táimid ag lorg seisiúin idir 23:59:45 agus 00:00:25. An uair seo aimsítear an dá sheisiún 1 agus 2. Cuirtear na trí sheisiún ar fad le chéile i gceann amháin, le ham tosaithe 00:00:00 agus am deiridh de 00:00:15.

Ón méid a thuairiscítear san alt seo, is fiú cuimhneamh ar na nuances tábhachtacha seo a leanas:

  • ní fuinneoga de mhéid seasta iad na seisiúin. Is é an ghníomhaíocht laistigh de thréimhse áirithe ama a chinnfidh fad seisiún;
  • Cinneann na stampaí dáta/ama sna sonraí cibé an dtagann an t-imeacht laistigh de sheisiún reatha nó le linn tréimhse díomhaoin.

Ansin déanfaimid plé ar an gcéad chineál eile fuinneoige - fuinneoga “tumbling”.

"Tumbling" fuinneoga

Gabhann fuinneoga tumbling imeachtaí a thagann laistigh de thréimhse áirithe ama. Samhlaigh gur gá duit gach idirbheart stoic de chuid cuideachta áirithe a ghabháil gach 20 soicind, mar sin bailíonn tú na himeachtaí go léir le linn na tréimhse ama sin. Ag deireadh an eatraimh 20 soicind, rollaíonn an fhuinneog os a chionn agus bogann sé chuig eatramh breathnóireachta 20 soicind nua. Léiríonn Fíor 5.14 an cás seo.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Mar a fheiceann tú, tá gach imeacht a fuarthas le 20 soicind anuas san áireamh sa fhuinneog. Ag deireadh na tréimhse ama seo, cruthaítear fuinneog nua.

Taispeánann liostú 5.6 cód a thaispeánann úsáid fuinneoga tumbling chun idirbhearta stoic a ghabháil gach 20 soicind (le fáil in src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Leis an athrú beag seo ar an nglao modh TimeWindows.of, is féidir leat fuinneog tumbling a úsáid. Ní thugtar an modh until() ar an sampla seo, mar sin úsáidfear an t-eatramh coinneála réamhshocraithe 24 uair.

Ar deireadh, tá sé in am chun bogadh ar aghaidh go dtí an ceann deireanach de na roghanna fuinneoige - "hopping" fuinneoga.

Sleamhnáin ("léim") fuinneoga

Tá fuinneoga sleamhnáin/hopping cosúil le fuinneoga tumbling, ach le difríocht bheag. Ní fhanann fuinneoga sleamhnáin go dtí deireadh an eatraimh ama sula gcruthaítear fuinneog nua chun imeachtaí le déanaí a phróiseáil. Tosaíonn siad ríomhaireachtaí nua tar éis eatramh feithimh níos lú ná ré na fuinneoige.

Chun na difríochtaí idir fuinneoga tumbling agus léim a léiriú, déanaimis filleadh ar an sampla maidir le hidirbhearta stocmhalartáin a chomhaireamh. Is é an sprioc atá againn fós líon na n-idirbheart a chomhaireamh, ach nílimid ag iarraidh fanacht leis an méid iomlán ama roimh an gcuntar a nuashonrú. Ina áit sin, déanfaimid an cuntar a nuashonrú ag eatraimh níos giorra. Mar shampla, déanfaimid líon na n-idirbheart a chomhaireamh go fóill gach 20 soicind, ach déanaimid an gcuntar a nuashonrú gach 5 soicind, mar a thaispeántar i bhFíor. 5.15. Sa chás seo, deireadh muid suas le trí fhuinneog torthaí le sonraí forluiteacha.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Taispeánann liostú 5.7 an cód chun fuinneoga sleamhnáin a shainiú (le fáil in src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Is féidir fuinneog tumbling a thiontú go fuinneog hopping trí ghlao a chur leis an modh advanceBy(). Sa sampla a thaispeántar, is é 15 nóiméad an t-eatramh coigilte.

Chonaic tú sa chuid seo conas torthaí comhiomlánaithe a theorannú d’fhuinneoga ama. Go háirithe, ba mhaith liom go gcuimhneoidh tú na trí rud seo a leanas ón alt seo:

  • tá méid na bhfuinneog seisiúin teoranta ní ag tréimhse ama, ach ag gníomhaíocht úsáideora;
  • soláthraíonn fuinneoga “tumbling” forbhreathnú ar imeachtaí laistigh de thréimhse áirithe ama;
  • Tá fad na bhfuinneog léime socraithe, ach déantar iad a nuashonrú go minic agus d’fhéadfadh go mbeadh iontrálacha forluiteacha i ngach fuinneog.

Ansin, beidh muid ag foghlaim conas KTable a thiontú ar ais go KSstream le haghaidh nasc.

5.3.3. Rudaí KSstream agus KTable a nascadh

I gCaibidil 4, phléamar dhá rud KSstream a nascadh. Anois caithfimid foghlaim conas KTable agus KStream a nascadh. D’fhéadfadh go mbeadh gá leis seo ar an gcúis shimplí seo a leanas. Is sruth taifead é KStream, agus is sruth de nuashonruithe taifead é KTable, ach uaireanta b'fhéidir gur mhaith leat comhthéacs breise a chur leis an sruth taifead ag baint úsáide as nuashonruithe ón KTable.

Glacaimis sonraí ar líon na n-idirbheart stocmhalartán agus cuirimid le chéile iad le nuacht stocmhalartáin do na tionscail ábhartha. Seo an méid a chaithfidh tú a dhéanamh chun é seo a bhaint amach i bhfianaise an chóid atá agat cheana féin.

  1. Tiontaigh oibiacht KTable le sonraí ar líon na n-idirbheart stoic ina KSstream, agus ansin cuir an eochair in ionad na heochrach a léiríonn an earnáil tionscail a fhreagraíonn don tsiombail stoic seo.
  2. Cruthaigh oibiacht KTable a léann sonraí ó thopaic le nuacht an stocmhalartáin. Déanfar an KTable nua seo a chatagóiriú de réir earnála tionscail.
  3. Ceangail nuashonruithe nuachta le faisnéis ar líon na n-idirbheart stocmhalartán de réir earnála tionscail.

Anois féachaimis conas an plean gníomhaíochta seo a chur i bhfeidhm.

Tiontaigh KTable go KSstream

Chun KTable a thiontú go KStream ní mór duit na rudaí seo a leanas a dhéanamh.

  1. Glaoigh ar an modh KTable.toStream().
  2. Trí mhodh KStream.map a ghlaoch, cuir ainm an tionscail in ionad an eochair, agus ansin aisghabh an réad TransactionSummary ón ásc Windowed.

Slabhraoimid na hoibríochtaí seo le chéile mar seo a leanas (is féidir an cód a fháil sa chomhad src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Liostú 5.8).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Toisc go bhfuil oibríocht KStream.map á ​​déanamh againn, déantar an t-ásc KStream a cuireadh ar ais a athdheighilt go huathoibríoch nuair a úsáidtear é i nasc.

Táimid tar éis an próiseas tiontaithe a chríochnú, ansin ní mór dúinn réad KTable a chruthú chun nuacht stoc a léamh.

Cruthú KTable le haghaidh nuacht stoc

Ar ámharaí an tsaoil, ní gá ach líne amháin cód a chruthú chun réad KTable a chruthú (is féidir an cód a fháil in src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Liostú 5.9).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Is fiú a thabhairt faoi deara nach gá aon réada Serde a shonrú, ós rud é go n-úsáidtear sreangán Serdes sna socruithe. Chomh maith leis sin, trí úsáid a bhaint as an áireamh is luaithe, líontar an tábla le taifid ón tús.

Anois is féidir linn bogadh ar aghaidh go dtí an chéim dheireanach - nasc.

Nuashonruithe nuachta a nascadh le sonraí comhairimh idirbheart

Níl sé deacair nasc a chruthú. Bainfimid úsáid as ceangal ar chlé ar eagla nach bhfuil aon nuacht stoc ann don tionscal ábhartha (is féidir an cód riachtanach a fháil sa chomhad src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Liostú 5.10).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Tá an t-oibreoir leftJoin seo simplí go leor. Murab ionann agus na nascanna i gCaibidil 4, ní úsáidtear modh JoinWindow mar nuair a bhíonn nascadh KSstream-KTable á dhéanamh, níl ach iontráil amháin sa KTable do gach eochair. Níl teorainn ama lena leithéid de cheangal: tá an taifead sa KTable nó as láthair. An phríomhchonclúid: agus úsáid á baint agat as oibiachtaí KTable is féidir leat KSstream a shaibhriú le sonraí tagartha nach bhfuil chomh nuashonraithe chomh minic sin.

Anois féachfaimid ar bhealach níos éifeachtaí chun imeachtaí KSstream a shaibhriú.

5.3.4. Rudaí GlobalKTable

Mar a fheiceann tú, tá gá le sruthanna imeachtaí a shaibhriú nó comhthéacs a chur leo. I gCaibidil 4 chonaic tú na naisc idir dhá réad KSstream, agus sa chuid roimhe seo chonaic tú an nasc idir KSstream agus KTable. Sna cásanna seo go léir, is gá an sruth sonraí a athdheighilt agus na heochracha á mapáil chuig cineál nó luach nua. Uaireanta déantar repartitioning go sainráite, agus uaireanta déanann Kafka Streams é go huathoibríoch. Tá gá le hathdheighilt toisc go bhfuil na heochracha athraithe agus go gcaithfidh na taifid deireadh a chur le hailt nua, nó beidh sé dodhéanta an nasc a dhéanamh (pléadh é seo i gCaibidil 4, sa rannán “Sonraí athdheighilte” i bhfo-alt 4.2.4).

Tá costas ag baint le hathdheighilt

Éilíonn athdheighilt costais - costais bhreise acmhainní chun topaicí idirmheánacha a chruthú, sonraí dúblacha a stóráil in ábhar eile; ciallaíonn sé chomh maith go bhfuil níos mó mallachta de bharr na scríbhneoireachta agus na léitheoireachta ón ábhar seo. Ina theannta sin, más gá duit a bheith páirteach i níos mó ná gné amháin nó gné amháin, ní mór duit na ceangail a shlabhra, na taifid a mhapáil le heochracha nua, agus an próiseas athdheighilte a reáchtáil arís.

Ag nascadh le tacair shonraí níos lú

I gcásanna áirithe, tá méid na sonraí tagartha atá le nascadh sách beag, mar sin is féidir cóipeanna iomlána de a bheith oiriúnach go háitiúil ar gach nód. I gcásanna mar seo, soláthraíonn Kafka Streams an rang GlobalKTable.

Tá cásanna GlobalKTable uathúil toisc go ndéanann an feidhmchlár na sonraí go léir a mhacasamhlú chuig gach nóid. Agus ós rud é go bhfuil na sonraí go léir i láthair ar gach nód, ní gá sruth na hócáide a dheighilt le heochair sonraí tagartha ionas go mbeidh sé ar fáil do gach deighilt. Is féidir leat nascanna gan eochair a dhéanamh freisin trí úsáid a bhaint as oibiachtaí GlobalKTable. Fillfimid ar cheann de na samplaí roimhe seo chun an ghné seo a léiriú.

Rudaí KSstream a nascadh le réada GlobalKTable

I bhfo-alt 5.3.2, rinne ceannaitheoirí comhiomlánú fuinneoige ar idirbhearta malairte. Bhí cuma rud éigin mar seo ar thorthaí an chomhiomlánaithe seo:

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

Cé gur bhain na torthaí seo leis an gcuspóir, bheadh ​​sé níos úsáidí dá mbeadh ainm an chustaiméara agus ainm iomlán na cuideachta ar taispeáint freisin. Chun ainm an chustaiméara agus ainm na cuideachta a chur leis, is féidir leat gnáth-cheangail a dhéanamh, ach beidh ort dhá phríomh-mhapáil agus athdheighilt a dhéanamh. Le GlobalKTable is féidir leat costas oibríochtaí den sórt sin a sheachaint.

Chun seo a dhéanamh, úsáidfimid an réad countStream ó Liostú 5.11 (is féidir an cód comhfhreagrach a fháil in src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) agus nascfaimid le dhá réad GlobalKTable é.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Tá sé seo pléite againn cheana féin, mar sin ní dhéanfaidh mé arís é. Ach tugaim faoi deara go ndéantar an cód san fheidhm léarscáil toStream().

Is é an chéad chéim eile ná dhá chás de GlobalKTable a dhearbhú (is féidir an cód a thaispeántar a fháil sa chomhad src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Liostú 5.12).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"

Tabhair faoi deara go ndéantar cur síos ar ainmneacha topaicí ag baint úsáide as cineálacha áirimh.

Anois agus na comhpháirteanna go léir réidh againn, níl fágtha ach an cód don nasc a scríobh (atá le fáil sa chomhad src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Liostú 5.13).

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Cé go bhfuil dhá nasc sa chód seo, tá siad slabhraithe toisc nach n-úsáidtear ceachtar dá dtorthaí ar leithligh. Taispeántar na torthaí ag deireadh na hoibríochta ar fad.

Nuair a bheidh an oibríocht chomhpháirtíochta thuas á rith agat, gheobhaidh tú torthaí mar seo:

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

Níor athraigh an bunúsach, ach tá cuma níos soiléire ar na torthaí seo.

Má áirítear tú síos go Caibidil 4, tá cineálacha éagsúla nasc feicthe agat cheana féin i mbun gníomhaíochta. Tá siad liostaithe sa tábla. 5.2. Léiríonn an tábla seo na cumais nascachta amhail leagan 1.0.0 de Kafka Streams; Seans go n-athróidh rud éigin i eisiúintí amach anseo.

An leabhar Kafka Streams in Action. Feidhmchláir agus micreasheirbhísí le haghaidh oibre fíor-ama"
Chun rudaí a chuimilt, déanaimis na bunghnéithe a ghabháil arís: is féidir leat sruthanna imeachta (KStream) a nascadh agus sruthanna (KTable) a nuashonrú ag baint úsáide as an staid áitiúil. Nó, mura bhfuil méid na sonraí tagartha ró-mhór, is féidir leat an réad GlobalKTable a úsáid. Déanann GlobalKTables gach deighilt a mhacasamhlú chuig gach nód feidhmchláir Kafka Streams, ag cinntiú go bhfuil na sonraí go léir ar fáil is cuma cén deighilt lena mbaineann an eochair.

Ansin feicfimid gné Sruthanna Kafka, a bhuíochas sin is féidir linn athruithe stáit a bhreathnú gan sonraí ó thopaic Kafka a chaitheamh.

5.3.5. Staid incheistithe

Rinneamar roinnt oibríochtaí cheana féin a bhaineann le staid agus i gcónaí aschur na torthaí chuig an consól (chun críocha forbartha) nó iad a scríobh chuig ábhar (chun críocha táirgthe). Agus torthaí á scríobh agat ar thopaic, caithfidh tú tomhaltóir Kafka a úsáid chun féachaint orthu.

Is féidir sonraí léitheoireachta ó na hábhair seo a mheas mar chineál tuairimí ábhartha. Chun ár gcríocha, is féidir linn an sainmhíniú ar radharc ábhartha ó Vicipéid a úsáid: “...réad bunachar sonraí fisiciúil ina bhfuil torthaí fiosrúcháin. Mar shampla, d’fhéadfadh sé a bheith ina chóip áitiúil de shonraí cianda, nó ina fho-thacar de na sraitheanna agus/nó de na colúin de thábla nó de na torthaí ceangail, nó tábla achomair a fhaightear trí chomhiomlánú” ( https://en.wikipedia.org/wiki /amharc_ábhartha).

Ligeann Kafka Streams duit fiosrúcháin idirghníomhacha a rith ar shiopaí stáit, rud a ligeann duit na tuairimí ábhartha seo a léamh go díreach. Tá sé tábhachtach a thabhairt faoi deara gur oibríocht inléite amháin é an cheist chuig an stór stáit. Cinntíonn sé seo nach gá duit a bheith buartha faoi staid neamh-chomhsheasmhach a dhéanamh de thaisme agus d’iarratas ag próiseáil sonraí.

Tá an cumas chun siopaí stáit a cheistiú go díreach tábhachtach. Ciallaíonn sé seo gur féidir leat feidhmchláir deais a chruthú gan a bheith ort sonraí a fháil ó thomhaltóir Kafka ar dtús. Méadaíonn sé éifeachtúlacht an iarratais freisin, mar gheall ar an bhfíric nach gá sonraí a scríobh arís:

  • a bhuí le ceantar na sonraí, is féidir iad a rochtain go tapa;
  • cuirtear deireadh le dúbailt sonraí, ós rud é nach bhfuil sé scríofa chuig stóráil sheachtrach.

Is é an rud is mó ba mhaith liom tú a mheabhrú ná gur féidir leat ceisteanna a chur go díreach laistigh d'iarratas. Ní féidir áibhéil a dhéanamh ar na deiseanna a thugann sé seo duit. In ionad sonraí ó Kafka a chaitheamh agus taifid a stóráil i mbunachar sonraí don fheidhmchlár, is féidir leat siopaí stáit a fhiosrú leis an toradh céanna. Ciallaíonn fiosruithe díreacha chuig siopaí stáit níos lú cód (gan tomhaltóir) agus níos lú bogearraí (ní gá tábla bunachar sonraí chun na torthaí a stóráil).

Tá go leor talún clúdaithe againn sa chaibidil seo, mar sin fágfaimid ár bplé ar cheisteanna idirghníomhacha i gcoinne siopaí stáit faoi láthair. Ach ná bí buartha: i gCaibidil 9, cruthóimid feidhmchlár simplí deais le ceisteanna idirghníomhacha. Úsáidfidh sé cuid de na samplaí ón gcaibidlí seo agus roimhe seo chun ceisteanna idirghníomhacha a léiriú agus conas is féidir leat iad a chur le feidhmchláir Kafka Streams.

Achoimre

  • Is ionann réada KSstream agus sruthanna imeachtaí, atá inchomparáide le hionchuir i mbunachar sonraí. Seasann oibiachtaí KTable do shruthanna nuashonraithe, níos mó cosúil le nuashonruithe ar bhunachar sonraí. Ní fhásann méid an réad KTable, cuirtear seantaifid in ionad cinn nua.
  • Tá rudaí KTable ag teastáil le haghaidh oibríochtaí comhiomlánaithe.
  • Ag baint úsáide as oibríochtaí fuinneoige, is féidir leat sonraí comhiomlánaithe a roinnt ina bhuicéid ama.
  • A bhuí le oibiachtaí GlobalKTable, is féidir leat rochtain a fháil ar shonraí tagartha áit ar bith san fheidhmchlár, beag beann ar dheighilt.
  • Is féidir naisc idir réada KSstream, KTable agus GlobalKTable.

Go dtí seo, dhíríomar ar fheidhmchláir Kafka Streams a thógáil ag baint úsáide as an KStream DSL ardleibhéil. Cé go gceadaíonn an cur chuige ardleibhéil duit cláir néata agus achomair a chruthú, is ionann é sin agus trádáil a úsáid. Ag obair le DSL KStream ciallaíonn sé go méadaítear beacht do chóid tríd an méid rialaithe a laghdú. Sa chéad chaibidil eile, féachfaimid ar an API nód láimhseálaí íseal-leibhéal agus déanfaimid iarracht comhbhabhtáil eile. Beidh na cláir níos faide ná mar a bhí siad roimhe seo, ach beimid in ann beagnach aon nód láimhseála a d'fhéadfadh a bheith ag teastáil uainn a chruthú.

→ Tá tuilleadh sonraí faoin leabhar le fáil ag láithreán gréasáin an fhoilsitheora

→ Le haghaidh lascaine 25% Habrozhiteli ag baint úsáide as cúpón - Sruthanna Kafka

→ Nuair a íocfar an leagan páipéir den leabhar, seolfar leabhar leictreonach trí ríomhphost.

Foinse: will.com

Add a comment