Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine" Halo, luchd-còmhnaidh Khabro! Tha an leabhar seo freagarrach airson leasaiche sam bith a tha airson tuigse fhaighinn air giullachd snàithlean. Cuidichidh tuigse air prògraman sgaoilte thu gus tuigse nas fheàrr fhaighinn air Kafka agus Kafka Streams. Bhiodh e math eòlas fhaighinn air frèam Kafka fhèin, ach chan eil seo riatanach: innsidh mi dhut a h-uile dad a dh ’fheumas tu. Ionnsaichidh luchd-leasachaidh eòlach Kafka agus luchd-tòiseachaidh le chèile mar a chruthaicheas iad tagraidhean giullachd sruthan inntinneach a’ cleachdadh leabharlann Kafka Streams san leabhar seo. Ionnsaichidh luchd-leasachaidh Java eadar-mheadhanach agus adhartach a tha mar-thà eòlach air bun-bheachdan leithid sreathachadh na sgilean aca a chleachdadh gus tagraidhean Kafka Streams a chruthachadh. Tha còd stòr an leabhair sgrìobhte ann an Java 8 agus bidh e a’ dèanamh feum mòr de cho-theacs abairt Java 8 lambda, agus mar sin bidh fios agad mar a dh’ obraicheas tu le gnìomhan lambda (eadhon ann an cànan prògramadh eile) feumail.

Earrann. 5.3. Co-chruinneachadh agus obair uinneag

Anns an earrainn seo, gluaisidh sinn air adhart gus sgrùdadh a dhèanamh air na pàirtean as gealltanach de Kafka Streams. Gu ruige seo tha sinn air na taobhan a leanas de Kafka Streams a chòmhdach:

  • cruthachadh topology giollachd;
  • cleachdadh stàite ann an tagraidhean sruthadh;
  • coileanadh cheanglaichean sruth dàta;
  • eadar-dhealachaidhean eadar sruthan tachartais (KStream) agus sruthan ùrachaidh (KTable).

Anns na h-eisimpleirean a leanas bheir sinn na h-eileamaidean sin uile còmhla. Ionnsaichidh tu cuideachd mu uinneag, feart math eile de thagraidhean sruthadh. Bidh a’ chiad eisimpleir againn na chruinneachadh sìmplidh.

5.3.1. Cruinneachadh de reic stoc a rèir roinn gnìomhachais

Tha cruinneachadh agus cruinneachadh nan innealan deatamach nuair a bhios tu ag obair le dàta sruthadh. Gu tric chan eil sgrùdadh air clàran fa leth mar a gheibhear iad gu leòr. Gus fiosrachadh a bharrachd a tharraing bho dhàta, feumar am buidheann agus an cur còmhla.

San eisimpleir seo, cuiridh tu ort deise neach-malairt latha a dh’ fheumas sùil a chumail air meud reic stocan chompanaidhean ann an grunn ghnìomhachasan. Gu sònraichte, tha ùidh agad anns na còig companaidhean leis na reic earrannan as motha anns gach gnìomhachas.

Feumaidh an leithid de cho-chruinneachadh na grunn cheumannan a leanas gus an dàta a thionndadh chun fhoirm a tha thu ag iarraidh (a 'bruidhinn san fharsaingeachd).

  1. Cruthaich stòr stèidhichte air cuspair a dh'fhoillsicheas fiosrachadh malairt stoc amh. Feumaidh sinn nì de ​​sheòrsa StockTransaction a mhapadh gu nì den t-seòrsa ShareVolume. Is e a’ phuing gu bheil meata-dàta reic anns an nì StockTransaction, ach chan fheum sinn ach dàta mun àireamh de earrannan a thathas a’ reic.
  2. Dàta buidhne ShareVolume a rèir samhla stoc. Aon uair 's gu bheil thu air a chruinneachadh le samhla, faodaidh tu an dàta seo a leagail gu fo-iomlan de mheudan reic stoc. Is fhiach a bhith mothachail gu bheil an dòigh KStream.groupBy a’ tilleadh eisimpleir den t-seòrsa KGroupedStream. Agus gheibh thu eisimpleir KTable le bhith a’ cur fios gu modh KGroupedStream.reduce.

Dè a th’ ann an eadar-aghaidh KGroupedStream

Bidh na dòighean KStream.groupBy agus KStream.groupByKey a’ tilleadh eisimpleir de KGroupedStream. Tha KGroupedStream na riochdachadh eadar-mheadhanach de shruth thachartasan às deidh cruinneachadh le iuchraichean. Chan eil e idir an dùil airson obair dhìreach leis. An àite sin, tha KGroupedStream air a chleachdadh airson obair cruinneachaidh, a bhios an-còmhnaidh a’ leantainn gu KTable. Agus leis gur e KTable toradh gnìomhachd cruinneachaidh agus gu bheil iad a’ cleachdadh stòr stàite, tha e comasach nach tèid a h-uile ùrachadh mar thoradh air an sin a chuir nas fhaide sìos an loidhne-phìoban.

Bidh am modh KTable.groupBy a’ tilleadh KGroupedTable coltach ris - riochdachadh eadar-mheadhanach den t-sruth ùrachaidhean, air ath-chruinneachadh le iuchair.

Gabhamaid fois ghoirid agus coimhead air Fig. 5.9, a sheallas na tha sinn air a choileanadh. Bu chòir gum biodh an topology seo gu math eòlach dhut mu thràth.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Bheir sinn sùil a-nis air a’ chòd airson an topology seo (gheibhear e san fhaidhle src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (A’ liostadh 5.2).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Tha an còd a chaidh a thoirt seachad air a chomharrachadh le cho goirid ‘s a tha e agus an àireamh mhòr de ghnìomhan a chaidh a dhèanamh ann an grunn loidhnichean. Is dòcha gu mothaich thu rudeigin ùr anns a’ chiad paramadair den dòigh builder.stream: luach den t-seòrsa enum AutoOffsetReset.EARLIEST (tha LATEST ann cuideachd), air a shuidheachadh a’ cleachdadh modh Consumed.withOffsetResetPolicy. Faodar an seòrsa àireamhachd seo a chleachdadh gus ro-innleachd ath-shuidheachadh dheth a shònrachadh airson gach KStream no KTable agus a’ faighinn prìomhachas thairis air an roghainn ath-shuidheachadh dheth bhon rèiteachadh.

GroupByKey agus GroupBy

Tha dà dhòigh aig eadar-aghaidh KStream airson clàran a chruinneachadh: GroupByKey agus GroupBy. Bidh an dithis a’ tilleadh KGroupedTable, agus mar sin is dòcha gu bheil thu a’ faighneachd dè an diofar a tha eatorra agus cuin a chleachdas tu am fear?

Tha am modh GroupByKey air a chleachdadh nuair a tha na h-iuchraichean san t-sruth KS neo-fholamh mu thràth. Agus as cudromaiche, cha deach a’ bhratach “feumar ath-roinn” a shuidheachadh a-riamh.

Tha an dòigh GroupBy a’ gabhail ris gu bheil thu air na h-iuchraichean buidhneachaidh atharrachadh, agus mar sin tha am bratach ath-chuairteachaidh gu bhith fìor. Le bhith a’ coileanadh aonaidhean, cruinneachaidhean, msaa às deidh modh GroupBy thig ath-roinneadh fèin-ghluasadach.
Geàrr-chunntas: Far an gabh sin dèanamh, bu chòir dhut GroupByKey a chleachdadh seach GroupBy.

Tha e soilleir dè a bhios modhan mapValues ​​agus groupBy a’ dèanamh, mar sin leig dhuinn sùil a thoirt air an dòigh sum() (a lorgar ann an src/main/java/bbejeck/model/ShareVolume.java) (A’ liostadh 5.3).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Bidh an dòigh ShareVolume.sum a’ tilleadh an àireamh iomlan de reic stoc, agus tha toradh an t-sreath àireamhachaidh gu lèir na nì KTable . A-nis tha thu a’ tuigsinn a’ phàirt a tha aig KTable. Nuair a ruigeas nithean ShareVolume, bidh an stuth KTable co-fhreagarrach a’ stòradh an ùrachadh gnàthach as ùire. Tha e cudromach cuimhneachadh gu bheil a h-uile ùrachadh ri fhaicinn anns a’ chuibhreann roimheVolumeKTable, ach chan eil iad uile air an cur nas fhaide.

Bidh sinn an uairsin a’ cleachdadh an KTable seo gus cruinneachadh (a rèir àireamh nan earrannan a chaidh am malairt) gus na còig companaidhean leis na h-àireamhan as àirde de earrannan a tha air am malairt anns gach gnìomhachas a ruighinn. Bidh na gnìomhan againn sa chùis seo coltach ris an fheadhainn airson a’ chiad chruinneachadh.

  1. Dèan buidheann eileLe gnìomhachd gus nithean ShareVolume fa leth a chuir còmhla a rèir gnìomhachas.
  2. Tòisich a’ toirt geàrr-chunntas air nithean ShareVolume. An turas seo tha an nì cruinneachaidh na chiudha prìomhachais meud stèidhichte. Anns a’ chiudha meud stèidhichte seo, chan eil ach na còig companaidhean leis a’ mhòr-chuid de earrannan air an reic air an gleidheadh.
  3. Mapa na ciudhaichean bhon pharagraf roimhe gu luach sreang agus thoir air ais na còig earrannan malairt as àirde a rèir àireamh a rèir gnìomhachas.
  4. Sgrìobh na toraidhean ann an cruth sreang ris a’ chuspair.

Ann am Fig. Tha Figear 5.10 a’ sealltainn graf topology sruthadh dàta. Mar a chì thu, tha an dàrna cuairt de ghiollachd gu math sìmplidh.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
A-nis gu bheil tuigse shoilleir againn air structar an dàrna cuairt de ghiullachd seo, is urrainn dhuinn tionndadh chun chòd stòr aige (gheibh thu e san fhaidhle src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (A’ liostadh 5.4) .

Tha caochladair fixedQueue anns a’ chiad inneal seo. Is e rud àbhaisteach a tha seo a tha na inneal-atharrachaidh airson java.util.TreeSet a thathas a’ cleachdadh gus sùil a chumail air na toraidhean as àirde N ann an òrdugh teàrnaidh nan earrannan a chaidh a mhalairt.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Tha thu air na gairmean groupBy agus mapValues ​​fhaicinn mu thràth, agus mar sin cha tèid sinn a-steach don fheadhainn sin (tha sinn a’ gairm modh KTable.toStream oir chan eil an dòigh KTable.print air a mholadh). Ach chan fhaca thu an tionndadh KTable de aggregate() fhathast, agus mar sin caithidh sinn beagan ùine a’ bruidhinn air sin.

Mar a chuimhnicheas tu, is e an rud a tha a’ fàgail KTable eadar-dhealaichte gu bheilear a’ beachdachadh air clàran leis na h-aon iuchraichean mar ùrachaidhean. Bidh KTable a’ dol an àite an t-seann inntrigeadh le fear ùr. Bidh cruinneachadh a’ tachairt san aon dòigh: tha na clàran as ùire leis an aon iuchair air an cruinneachadh. Nuair a ruigeas clàr, thèid a chur ris an eisimpleir clas FixedSizePriorityQueue a’ cleachdadh adder (an dàrna paramadair anns a’ ghairm modh iomlan), ach ma tha clàr eile ann mu thràth leis an aon iuchair, thèid an seann chlàr a thoirt air falbh le bhith a’ cleachdadh toirt air falbh (an treas paramadair ann an an gairm modh iomlan).

Tha seo uile a’ ciallachadh nach bi an neach-cruinneachaidh againn, FixedSizePriorityQueue, a’ cruinneachadh a h-uile luach le aon iuchair, ach a’ stòradh suim gluasadach de na tha de na seòrsaichean stoc as malairtiche aig N. Anns gach inntrigeadh a thig a-steach tha an àireamh iomlan de earrannan a chaidh a reic gu ruige seo. Bheir KTable fiosrachadh dhut mu na h-earrannan de chompanaidhean as motha a tha air am malairt an-dràsta, gun a bhith feumach air cruinneachadh leantainneach de gach ùrachadh.

Dh’ ionnsaich sinn dà rud cudromach a dhèanamh:

  • luachan buidhne ann an KTable le iuchair chumanta;
  • Dèan gnìomhan feumail leithid sgaoileadh agus cruinneachadh air na luachan buidhne sin.

Tha eòlas air mar a choileanas tu na h-obraichean sin cudromach gus tuigse fhaighinn air brìgh an dàta a tha a’ gluasad tro thagradh Kafka Streams agus tuigsinn dè am fiosrachadh a tha e a’ giùlan.

Tha sinn cuideachd air cuid de na prìomh bhun-bheachdan air an deach beachdachadh na bu thràithe san leabhar seo a thoirt còmhla. Ann an Caibideil 4, bheachdaich sinn air cho cudromach sa tha staid ionadail fulangach ri lochdan airson tagradh sruthadh. Sheall a’ chiad eisimpleir sa chaibideil seo carson a tha staid ionadail cho cudromach - bheir e comas dhut cunntas a chumail air an fhiosrachadh a chunnaic thu mu thràth. Bidh ruigsinneachd ionadail a’ seachnadh dàil lìonra, a’ dèanamh an aplacaid nas gnìomhaiche agus nas seasmhaiche ri mearachdan.

Nuair a bhios tu a’ coileanadh obair rollaidh no cruinneachaidh sam bith, feumaidh tu ainm stòr na stàite a shònrachadh. Bidh na h-obraichean rollaidh is cruinneachaidh a’ tilleadh eisimpleir KTable, agus bidh an KTable a’ cleachdadh stòradh stàite gus feadhainn ùra a chuir an àite seann thoraidhean. Mar a chunnaic thu, chan eil a h-uile ùrachadh air a chuir sìos an loidhne-phìoban, agus tha seo cudromach oir tha gnìomhachd cruinneachaidh air a dhealbhadh gus fiosrachadh geàrr-chunntas a thoirt gu buil. Mura cuir thu stàite ionadail an sàs, cuiridh KTable air adhart a h-uile toradh cruinneachaidh is ro-innse.

An ath rud, seallaidh sinn ri coileanadh obrachaidhean leithid cruinneachadh taobh a-staigh ùine shònraichte - obair uinneig ris an canar.

5.3.2. Obrachaidhean uinneig

Anns an earrainn roimhe seo, thug sinn a-steach sleamhnachadh convolution agus cruinneachadh. Rinn an tagradh sgaoileadh leantainneach de mheud reic stoc, agus an uairsin cruinneachadh de na còig stocan as malairtiche air an iomlaid.

Uaireannan tha feum air a leithid de chruinneachadh leantainneach agus sgaoileadh thoraidhean. Agus uaireannan feumaidh tu obrachadh a-mhàin thar ùine shònraichte. Mar eisimpleir, obraich a-mach cia mheud malairt iomlaid a chaidh a dhèanamh le earrannan de chompanaidh sònraichte anns na 10 mionaidean mu dheireadh. No cia mheud neach-cleachdaidh a bhriog air bratach sanasachd ùr anns na 15 mionaidean mu dheireadh. Faodaidh tagradh an leithid de ghnìomhachd a dhèanamh grunn thursan, ach le toraidhean nach eil a’ buntainn ach ri amannan sònraichte (uinneagan ùine).

A’ cunntadh gnothaichean iomlaid leis a’ cheannaiche

Anns an ath eisimpleir, bidh sinn a’ cumail sùil air gnothaichean stoc thar ioma-luchd-malairt - an dàrna cuid buidhnean mòra no luchd-ionmhais fa-leth.

Tha dà adhbhar ann airson an tracadh seo. Is e aon dhiubh am feum fios a bhith agad dè na stiùirichean margaidh a tha a’ ceannach/reic. Ma chì na cluicheadairean mòra sin agus luchd-tasgaidh sòlaimte cothrom, tha e ciallach an ro-innleachd aca a leantainn. Is e an dàrna adhbhar am miann a bhith a’ faicinn comharran sam bith a dh’ fhaodadh a bhith ann de mhalairt mì-laghail. Gus seo a dhèanamh, feumaidh tu sgrùdadh a dhèanamh air co-dhàimh spìcean reic mòra le fiosan naidheachd cudromach.

Tha an leithid de sgrùdadh air a dhèanamh suas de na ceumannan a leanas:

  • cruthachadh sruth airson leughadh bhon chuspair stoc-ghnothaichean;
  • a’ cruinneachadh chlàran a’ tighinn a-steach a rèir ID ceannaiche agus samhla stoc. Le bhith a’ gairm na buidhneBy method a’ tilleadh eisimpleir den chlas KGroupedStream;
  • Bidh an dòigh KGroupedStream.windowedBy a’ tilleadh sruth dàta cuibhrichte gu uinneag ùine, a leigeas le cruinneachadh uinneig. A rèir an t-seòrsa uinneig, thèid an dàrna cuid TimeWindowedKSstream no SessionWindowedKSstream a thilleadh;
  • cunntas malairt airson an obair cruinneachaidh. Bidh an sruth dàta uinneig a’ dearbhadh a bheil cunntas sònraichte air a ghabhail a-steach sa chunntas seo;
  • a’ sgrìobhadh thoraidhean gu cuspair no gan cur a-mach chun chonsail rè leasachadh.

Tha topology an tagraidh seo sìmplidh, ach bhiodh dealbh soilleir dheth feumail. Bheir sinn sùil air Fig. 5.11.

An uairsin, seallaidh sinn ri gnìomhachd gnìomhachd uinneig agus an còd co-fhreagarrach.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"

Seòrsa uinneagan

Tha trì seòrsaichean uinneagan ann an Kafka Streams:

  • seiseanach;
  • "tumadh";
  • sleamhnachadh/hopping.

Bidh am fear a thaghas tu an urra ri na riatanasan gnìomhachais agad. Tha crìochan-ùine aig uinneagan tumbling is leum, agus tha uinneagan seisean air an cuingealachadh le gnìomhachd luchd-cleachdaidh - tha fad an t-seisein / nan seiseanan air a dhearbhadh a-mhàin air cho gnìomhach sa tha an neach-cleachdaidh. Is e am prìomh rud ri chuimhneachadh gu bheil a h-uile seòrsa uinneag stèidhichte air stampaichean ceann-latha / ùine nan inntrigidhean, chan e ùine an t-siostaim.

An uairsin, bidh sinn a 'cur an gnìomh ar topology le gach seòrsa uinneag. Cha tèid an còd iomlan a thoirt seachad ach anns a’ chiad eisimpleir; airson seòrsachan uinneagan eile cha atharraich dad ach an seòrsa obrachadh uinneige.

Uinneagan seisean

Tha uinneagan seisean glè eadar-dhealaichte bho gach seòrsa uinneag eile. Tha iad cuingealaichte chan ann cho mòr ri ùine ri gnìomhachd an neach-cleachdaidh (no gnìomhachd an eintiteas a bu mhath leat a leantainn). Tha uinneagan seisean air an cuingealachadh le amannan neo-ghnìomhachd.

Tha Figear 5.12 a’ sealltainn bun-bheachd uinneagan seisean. Thig an seisean nas lugha còmhla ris an t-seisean air an taobh chlì. Agus bidh an seisean air an taobh cheart air leth oir tha e a’ leantainn ùine fhada de neo-ghnìomhachd. Tha uinneagan seisean stèidhichte air gnìomhachd luchd-cleachdaidh, ach cleachd stampaichean ceann-latha/ùine bho inntrigidhean gus faighinn a-mach dè an seisean dha am buin an inntrig.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"

A’ cleachdadh uinneagan seisean gus sùil a chumail air gnothaichean stoc

Cleachdaidh sinn uinneagan seisean gus fiosrachadh a ghlacadh mu ghnothaichean iomlaid. Tha buileachadh uinneagan seisean ri fhaicinn ann an Liosta 5.5 (a lorgar ann an src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Tha thu air a’ mhòr-chuid de na h-obraichean anns an topology seo fhaicinn mu thràth, agus mar sin chan fheumar coimhead orra a-rithist an seo. Ach tha grunn eileamaidean ùra an seo cuideachd, air am bi sinn a-nis a’ beachdachadh.

Mar as trice bidh gnìomhachd buidhne sam bith a’ coileanadh seòrsa de dh’ obair cruinneachaidh (cruinneachadh, roiligeadh suas no cunntadh). Faodaidh tu an dàrna cuid co-chruinneachadh tionalach a dhèanamh le àireamh ruith iomlan, no cruinneachadh uinneig, a bheir aire do chlàran taobh a-staigh uinneag ùine ainmichte.

Tha an còd ann an Liosta 5.5 a’ cunntadh an àireamh de ghnothaichean taobh a-staigh uinneagan seisean. Ann am Fig. 5.13 tha na gnìomhan sin air an sgrùdadh ceum air cheum.

Le bhith a’ gairm windowedBy (SessionWindows.with (ficheadSeconds).gus (còig mionaidean deug)) bidh sinn a’ cruthachadh uinneag seisean le eadar-ama neo-ghnìomhachd de 20 diog agus eadar-ama seasmhachd de 15 mionaidean. Tha eadar-ama leisg de 20 diog a’ ciallachadh gum bi an tagradh a’ toirt a-steach inntrigeadh sam bith a ruigeas taobh a-staigh 20 diog bho dheireadh no toiseach an t-seisein làithreach a-steach don t-seisean gnàthach (gnìomhach).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
An ath rud, bidh sinn a’ sònrachadh dè an obair cruinneachaidh a dh’fheumar a dhèanamh ann an uinneag an t-seisein - sa chùis seo, cunnt. Ma tha inntrigeadh a-steach taobh a-muigh na h-uinneige neo-ghnìomhachd (gach taobh den stampa ceann-latha/ùine), cruthaichidh an tagradh seisean ùr. Tha eadar-ama gleidhidh a’ ciallachadh a bhith a’ cumail seisean airson ùine shònraichte agus a’ ceadachadh dàta fadalach a mhaireas nas fhaide na ùine neo-ghnìomhachd an t-seisein ach a dh’ fhaodar a cheangal fhathast. A bharrachd air an sin, tha toiseach is deireadh an t-seisein ùir mar thoradh air an aonadh a rèir an stampa ceann-latha / ùine as tràithe agus as ùire.

Bheir sinn sùil air beagan inntrigidhean bhon dòigh cunntais gus faicinn mar a tha seiseanan ag obair (Clàr 5.1).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Nuair a ruigeas clàran, bidh sinn a’ coimhead airson seiseanan a th’ ann mar-thà leis an aon iuchair, ùine crìochnachaidh nas lugha na an stampa ceann-latha/ùine gnàthach - eadar-ama neo-ghnìomhachd, agus ùine tòiseachaidh nas motha na an stampa ceann-latha/ùine làithreach + ùine neo-ghnìomhachd. A’ gabhail seo a-steach, ceithir pìosan bhon chlàr. Tha 5.1 air an cur còmhla ann an aon seisean mar a leanas.

1. Bidh clàr 1 a 'ruighinn an toiseach, agus mar sin tha an ùine tòiseachaidh co-ionann ris an ùine crìochnachaidh agus is e 00:00:00.

2. An ath rud, thig inntrigeadh 2, agus bidh sinn a 'coimhead airson seiseanan a thig gu crìch gun a bhith nas tràithe na 23:59:55 agus a' tòiseachadh gun a bhith nas fhaide na 00:00:35. Lorgaidh sinn clàr 1 agus cothlamadh seiseanan 1 agus 2. Gabhaidh sinn àm tòiseachaidh seisean 1 (na bu thràithe) agus àm crìochnachaidh seisean 2 (nas fhaide air adhart), gus am bi an seisean ùr againn a’ tòiseachadh aig 00:00:00 agus a’ crìochnachadh aig 00:00: 15:XNUMX.

3. Clàr 3 a 'ruighinn, bidh sinn a' coimhead airson seiseanan eadar 00:00:30 agus 00:01:10 agus chan eil sinn a 'lorg gin. Cuir dàrna seisean ris airson an iuchair 123-345-654,FFBE, a 'tòiseachadh agus a' crìochnachadh aig 00:00:50.

4. Tha clàr 4 a’ ruighinn agus tha sinn a’ coimhead airson seiseanan eadar 23:59:45 agus 00:00:25. An turas seo lorgar an dà chuid seisean 1 agus 2. Tha na trì seiseanan uile air an cur còmhla ann an aon, le ùine tòiseachaidh de 00:00:00 agus àm crìochnachaidh 00:00:15.

Bho na tha air a mhìneachadh anns an earrainn seo, is fhiach cuimhneachadh air na nuances cudromach a leanas:

  • chan e uinneagan meud stèidhichte a th’ ann an seiseanan. Tha fad seisean air a dhearbhadh leis a 'ghnìomhachd taobh a-staigh ùine shònraichte;
  • Bidh na stampaichean ceann-latha / ùine anns an dàta a’ dearbhadh a bheil an tachartas taobh a-staigh seisean a tha ann mu thràth no rè ùine leisg.

An uairsin bruidhnidh sinn mun ath sheòrsa uinneag - uinneagan “tumbling”.

"Tumbling" uinneagan

Bidh uinneagan tumbling a 'glacadh thachartasan a thig taobh a-staigh ùine shònraichte. Smaoinich gum feum thu a h-uile gnothach stoc aig companaidh sònraichte a ghlacadh a h-uile 20 diog, agus mar sin cruinnichidh tu a h-uile tachartas rè na h-ùine sin. Aig deireadh an eadar-ama 20-diog, bidh an uinneag a’ dol thairis agus a’ gluasad gu àm amharc ùr 20-diog. Tha Figear 5.14 a’ sealltainn an t-suidheachaidh seo.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Mar a chì thu, tha a h-uile tachartas a fhuaireadh anns na 20 diog mu dheireadh air a ghabhail a-steach san uinneig. Aig deireadh na h-ùine seo, thèid uinneag ùr a chruthachadh.

Tha liostadh 5.6 a’ sealltainn còd a sheallas cleachdadh uinneagan tumbling gus gnothaichean stoc a ghlacadh gach 20 diog (lorgar ann an src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Leis an atharrachadh beag seo air a’ ghairm modh TimeWindows.of, faodaidh tu uinneag tumbling a chleachdadh. Chan eil an eisimpleir seo a’ toirt iomradh air an dòigh until(), agus mar sin thèid an ùine gleidhidh àbhaisteach de 24 uair a chleachdadh.

Mu dheireadh, tha an t-àm ann gluasad air adhart chun an fhear mu dheireadh de na roghainnean uinneig - uinneagan "hopping".

Sleamhnachadh ("leum") uinneagan

Tha uinneagan sleamhnachaidh/hopping coltach ri uinneagan tumbling, ach le eadar-dhealachadh beag. Cha bhith uinneagan sleamhnachaidh a’ feitheamh gu deireadh na h-ùine seo mus cruthaich iad uinneag ùr gus tachartasan o chionn ghoirid a phròiseasadh. Bidh iad a’ tòiseachadh air àireamhachadh ùr às deidh ùine feitheimh nas lugha na fad na h-uinneige.

Gus na h-eadar-dhealachaidhean eadar uinneagan tumbling agus leum a nochdadh, tillidh sinn chun eisimpleir de bhith a’ cunntadh gnothaichean iomlaid stoc. Is e ar n-amas fhathast an àireamh de ghnothaichean a chunntadh, ach chan eil sinn airson feitheamh ris an ùine gu lèir mus ùraich thu a’ chunntair. An àite sin, bheir sinn ùrachadh air a’ chunntair aig amannan nas giorra. Mar eisimpleir, bidh sinn fhathast a’ cunntadh an àireamh de ghnothaichean gach 20 diog, ach ùraich a’ chunntair gach 5 diog, mar a chithear ann am Fig. 5.15. Anns a 'chùis seo, bidh sinn a' crìochnachadh le trì uinneagan toraidh le dàta a tha a 'dol thairis air.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Tha liostadh 5.7 a’ sealltainn a’ chòd airson uinneagan sleamhnachaidh a mhìneachadh (a lorgar ann an src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Faodar uinneag tumbling a thionndadh gu uinneag hopaidh le bhith a’ cur gairm ris a’ mhodh adhartaisBy (). Anns an eisimpleir a tha air a shealltainn, tha an ùine sàbhalaidh 15 mionaidean.

Chunnaic thu san earrann seo mar a chuireas tu casg air toraidhean cruinneachaidh gu uinneagan ùine. Gu sònraichte, tha mi airson gun cuimhnich thu na trì rudan a leanas bhon roinn seo:

  • tha meud uinneagan seisean cuingealaichte chan ann le ùine, ach le gnìomhachd luchd-cleachdaidh;
  • tha uinneagan “tumbling” a’ toirt sealladh farsaing air tachartasan taobh a-staigh ùine shònraichte;
  • Tha fad uinneagan leum stèidhichte, ach bidh iad air an ùrachadh gu tric agus faodaidh gum bi inntrigidhean a tha a’ dol thairis air a h-uile uinneag.

An ath rud, ionnsaichidh sinn mar a thionndaidheas tu KTable air ais gu KSstream airson ceangal.

5.3.3. A’ ceangal nithean KSstream agus KTable

Ann an Caibideil 4, bheachdaich sinn air dà rud Kstream a cheangal. A-nis feumaidh sinn ionnsachadh mar a cheanglas tu KTable agus KStream. Dh'fhaodadh gum bi feum air seo airson na h-adhbharan sìmplidh a leanas. 'S e sreath de chlàran a th' ann an KStream, agus 's e sreath de dh'ùrachadh chlàran a th' ann an KTable, ach uaireannan 's dòcha gum bi thu airson co-theacs a bharrachd a chur ris an t-sruth clàraidh a' cleachdadh ùrachaidhean bhon KTable.

Gabhamaid dàta air an àireamh de ghnothaichean iomlaid stoc agus cuiridh sinn còmhla iad le naidheachdan iomlaid stoc airson na gnìomhachasan iomchaidh. Seo na dh'fheumas tu a dhèanamh gus seo a choileanadh leis a' chòd a th' agad mu thràth.

  1. Tionndaidh nì KTable le dàta air an àireamh de ghnothaichean stoc gu KSstream, agus an uairsin cuir an iuchair an àite na h-iuchrach a tha a’ comharrachadh roinn a’ ghnìomhachais a tha a rèir an t-samhla stoc seo.
  2. Cruthaich nì KTable a leughas dàta bho chuspair le naidheachdan iomlaid stoc. Bidh an KTable ùr seo air a sheòrsachadh a rèir roinn gnìomhachais.
  3. Ceangail ùrachaidhean naidheachdan le fiosrachadh mun àireamh de ghnothaichean iomlaid stoc a rèir roinn gnìomhachais.

A-nis chì sinn mar a chuireas sinn am plana gnìomh seo an gnìomh.

Tionndaidh KTable gu KSstream

Gus KTable a thionndadh gu KStream feumaidh tu na leanas a dhèanamh.

  1. Cuir fòn gu modh KTable.toStream().
  2. Le bhith a’ gairm modh KStream.map, cuir ainm a’ ghnìomhachais an àite na h-iuchrach, agus an uairsin faigh air ais an nì TransactionSummary bhon eisimpleir Windowed.

Slabhraidh sinn na h-obraichean sin còmhla mar a leanas (gheibhear an còd anns an fhaidhle src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (A’ clàradh 5.8).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Leis gu bheil sinn a’ dèanamh gnìomhachd KStream.map, thèid an t-eisimpleir KStream a th’ air a thilleadh ath-roinn gu fèin-obrachail nuair a thèid a chleachdadh ann an ceangal.

Tha sinn air am pròiseas tionndaidh a chrìochnachadh, an ath rud feumaidh sinn rud KTable a chruthachadh airson naidheachdan stoc a leughadh.

Cruthachadh KTable airson naidheachdan stoc

Gu fortanach, cha toir cruthachadh nì KTable ach aon loidhne de chòd (gheibhear an còd ann an src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (A’ clàradh 5.9).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Is fhiach a bhith mothachail nach eil feum air nithean Serde a shònrachadh, leis gu bheil sreang Serdes air a chleachdadh anns na roghainnean. Cuideachd, le bhith a’ cleachdadh an àireamhachd EARLIEST, tha an clàr air a lìonadh le clàran aig an fhìor thoiseach.

A-nis is urrainn dhuinn gluasad air adhart chun cheum mu dheireadh - ceangal.

A’ ceangal ùrachaidhean naidheachdan le dàta cunntais malairt

Chan eil e doirbh ceangal a chruthachadh. Cleachdaidh sinn ceangal clì air eagal ‘s nach eil naidheachdan stoc ann airson a’ ghnìomhachas iomchaidh (gheibhear an còd riatanach anns an fhaidhle src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (A’ liostadh 5.10).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Tha an gnìomhaiche leftJoin seo gu math sìmplidh. Eu-coltach ris na ceanglaichean ann an Caibideil 4, chan eil modh JoinWindow air a chleachdadh oir nuair a bhios tu a’ coileanadh ceangal KStream-KTable, chan eil ach aon inntrig anns an KTable airson gach iuchair. Chan eil an leithid de cheangal cuingealaichte ann an ùine: tha an clàr anns an KTable no neo-làthaireach. Am prìomh cho-dhùnadh: a’ cleachdadh nithean KTable faodaidh tu KStream a shaidhbhreachadh le dàta iomraidh nach eil cho tric air ùrachadh.

A-nis seallaidh sinn ri dòigh nas èifeachdaiche air tachartasan bho KSstream a shaidhbhreachadh.

5.3.4. Nithean GlobalKTable

Mar a chì thu, tha feum air sruthan tachartais a shaidhbhreachadh no co-theacs a chuir riutha. Ann an Caibideil 4 chunnaic thu na ceanglaichean eadar dà rud KStream, agus anns an earrainn roimhe chunnaic thu an ceangal eadar KStream agus KTable. Anns a h-uile suidheachadh sin, feumar an t-sruth dàta ath-roinn nuair a bhios tu a 'mapadh nan iuchraichean gu seòrsa no luach ùr. Aig amannan thèid ath-thionndadh a dhèanamh gu soilleir, agus uaireannan bidh Kafka Streams ga dhèanamh gu fèin-ghluasadach. Tha feum air ath-sgaradh oir tha na h-iuchraichean air atharrachadh agus feumaidh na clàran crìochnachadh ann an earrannan ùra, air neo bidh an ceangal do-dhèanta (chaidh seo a dheasbad ann an Caibideil 4, anns an earrann “Ath-roinn dàta” ann am fo-earrann 4.2.4).

Tha cosgais aig ath-roinn

Feumaidh ath-roinn cosgaisean - cosgaisean stòrais a bharrachd airson cuspairean eadar-mheadhanach a chruthachadh, a 'stòradh dàta dùblaichte ann an cuspair eile; tha e cuideachd a’ ciallachadh barrachd latency ri linn sgrìobhadh agus leughadh bhon chuspair seo. A bharrachd air an sin, ma dh’ fheumas tu a dhol a-steach thairis air barrachd air aon taobh no taobh, feumaidh tu na ceanglaichean a cheangal, na clàran a mhapadh le iuchraichean ùra, agus am pròiseas ath-sgaradh a ruith a-rithist.

A’ ceangal ri stòran-dàta nas lugha

Ann an cuid de chùisean, tha an tomhas de dhàta iomraidh a tha ri cheangal an ìre mhath beag, agus mar sin faodaidh lethbhric iomlan dheth a bhith a’ freagairt gu h-ionadail air gach nód. Airson suidheachaidhean mar seo, tha Kafka Streams a’ toirt seachad a’ chlas GlobalKTable.

Tha suidheachaidhean GlobalKTable gun samhail leis gu bheil an aplacaid ag ath-aithris a h-uile dàta gu gach nod. Agus leis gu bheil an dàta gu lèir an làthair air gach nód, chan fheumar sruth an tachartais a sgaradh le iuchair dàta iomraidh gus am bi e ri fhaighinn leis a h-uile sgaradh. Faodaidh tu cuideachd ceanglaichean gun iuchair a dhèanamh a’ cleachdadh nithean GlobalKTable. Rachamaid air ais gu aon de na h-eisimpleirean roimhe gus am feart seo a shealltainn.

A’ ceangal nithean Kstream ri nithean GlobalKTable

Ann am fo-earrann 5.3.2, rinn sinn cruinneachadh uinneig de ghnothaichean iomlaid le ceannaichean. Bha toraidhean a’ cho-chruinneachaidh seo a’ coimhead rudeigin mar seo:

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

Ged a bha na toraidhean sin a’ frithealadh an adhbhair, bhiodh e air a bhith na b’ fheumaile nam biodh ainm an neach-ceannach agus ainm iomlan a’ chompanaidh air an taisbeanadh cuideachd. Gus ainm neach-ceannach agus ainm companaidh a chuir ris, faodaidh tu ceangal àbhaisteach a dhèanamh, ach feumaidh tu dà phrìomh mhapa a dhèanamh agus ath-roinn. Le GlobalKTable faodaidh tu cosgais gnìomhachd mar sin a sheachnadh.

Gus seo a dhèanamh, cleachdaidh sinn an nì countStream bho Liosta 5.11 (gheibhear an còd co-fhreagarrach ann an src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) agus ceangail e ri dà rud GlobalKTable.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Tha sinn air seo a dheasbad mu thràth, agus mar sin cha dèan mi a-rithist e. Ach tha mi a’ toirt fa-near gu bheil an còd anns a’ ghnìomh mapa toStream().

Is e an ath cheum dà eisimpleir de GlobalKTable ainmeachadh (gheibhear an còd a chithear anns an fhaidhle src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (A’ clàradh 5.12).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"

Thoir an aire gu bheil ainmean cuspair air am mìneachadh a’ cleachdadh seòrsaichean àireamhaichte.

A-nis gu bheil na pàirtean gu lèir againn deiseil, chan eil air fhàgail ach còd a’ cheangail a sgrìobhadh (a lorgar san fhaidhle src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (A’ clàradh 5.13).

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Ged a tha dà cheangal sa chòd seo, tha iad air an ceangal leis nach eil gin de na toraidhean aca air an cleachdadh air leth. Tha na toraidhean air an taisbeanadh aig deireadh na h-obrach gu lèir.

Nuair a ruitheas tu an obair ceangail gu h-àrd, gheibh thu toraidhean mar seo:

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

Chan eil an fhìrinn air atharrachadh, ach tha na toraidhean sin a’ coimhead nas soilleire.

Ma tha thu a’ cunntadh sìos gu Caibideil 4, tha thu air grunn sheòrsaichean de cheanglaichean fhaicinn ann an gnìomh mar-thà. Tha iad air an liostadh ann an clàr. 5.2. Tha an clàr seo a’ nochdadh na comasan ceangail mar dreach 1.0.0 de Kafka Streams; Dh’ fhaodadh rudeigin atharrachadh ann am fiosan san àm ri teachd.

Tha an leabhar “Kafka Streams in Action. Iarrtasan agus microservices airson obair fìor-ùine"
Gus cùisean a phasgadh suas, leig dhuinn na rudan bunaiteach a thoirt air ais: faodaidh tu sruthan tachartais (KStream) a cheangal agus sruthan ùrachadh (KTable) a’ cleachdadh stàite ionadail. Air an làimh eile, mura bheil meud an dàta iomraidh ro mhòr, faodaidh tu an rud GlobalKTable a chleachdadh. Bidh GlobalKTables ag ath-aithris a h-uile sgaradh gu gach nòta tagraidh Kafka Streams, a’ dèanamh cinnteach gu bheil an dàta gu lèir ri fhaighinn ge bith dè an sgaradh a tha an iuchair a’ freagairt.

An uairsin chì sinn feart Kafka Streams, leis an urrainn dhuinn atharrachaidhean stàite fhaicinn gun a bhith ag ithe dàta bho chuspair Kafka.

5.3.5. Staid chearraideach

Tha sinn mu thràth air grunn obraichean a dhèanamh a’ toirt a-steach stàite agus an-còmhnaidh cuir a-mach na toraidhean chun consol (airson adhbharan leasachaidh) no sgrìobh iad gu cuspair (airson adhbharan cinneasachaidh). Nuair a bhios tu a’ sgrìobhadh thoraidhean gu cuspair, feumaidh tu neach-cleachdaidh Kafka a chleachdadh airson am faicinn.

Faodar beachdachadh air dàta leughaidh bho na cuspairean sin mar sheòrsa de bheachdan susbainteach. Airson ar n-adhbharan, is urrainn dhuinn am mìneachadh air sealladh tàbhachdach a chleachdadh bho Wikipedia: “...rud stòr-dàta fiosaigeach anns a bheil toraidhean ceiste. Mar eisimpleir, dh’ fhaodadh gur e leth-bhreac ionadail de dhàta iomallach a bhiodh ann, no fo-sheata de na sreathan agus/no colbhan de bhòrd no co-thoraidhean, no clàr geàrr-chunntas a gheibhear tro cho-chruinneachadh” ( https://en.wikipedia.org/wiki /materialized_view).

Leigidh Kafka Streams leat ceistean eadar-ghnìomhach a ruith air stòran stàite, a’ toirt cothrom dhut na beachdan tàbhachdach sin a leughadh gu dìreach. Tha e cudromach cuimhneachadh gur e obair leughaidh a-mhàin a th’ anns a’ cheist gu stòr na stàite. Bidh seo a’ dèanamh cinnteach nach fheum thu a bhith draghail mu bhith a’ dèanamh staid neo-chunbhalach gun fhiosta fhad ‘s a tha an tagradh agad a’ giullachd dàta.

Tha an comas ceasnachadh gu dìreach air stòran stàite cudromach. Tha seo a’ ciallachadh gun urrainn dhut tagraidhean deas-bhòrd a chruthachadh gun a bhith agad ri dàta fhaighinn bho neach-cleachdaidh Kafka an-toiseach. Bidh e cuideachd a 'meudachadh èifeachdas an tagraidh, air sgàth' s nach eil feum air dàta a sgrìobhadh a-rithist:

  • taing do sgìre an dàta, gheibhear iad gu luath;
  • tha dùblachadh dàta air a chuir às, leis nach eil e sgrìobhte gu stòradh taobh a-muigh.

Is e am prìomh rud a tha mi airson gun cuimhnich thu gum faod thu ceist a chuir gu dìreach bhon taobh a-staigh den tagradh agad. Chan urrainnear cus a dhèanamh de na cothroman a bheir seo dhut. An àite a bhith ag ithe dàta bho Kafka agus a’ stòradh chlàran ann an stòr-dàta airson an tagraidh, faodaidh tu ceist a chuir air stòran stàite leis an aon toradh. Tha ceistean dìreach gu stòran stàite a’ ciallachadh nas lugha de chòd (gun neach-cleachdaidh) agus nas lugha de bhathar-bog (chan eil feum air clàr stòr-dàta gus na toraidhean a stòradh).

Tha sinn air beagan talmhainn a chòmhdach sa chaibideil seo, agus mar sin fàgaidh sinn ar deasbad mu cheistean eadar-ghnìomhach an aghaidh stòran stàite airson a-nis. Ach na gabh dragh: ann an Caibideil 9, cruthaichidh sinn tagradh deas-bhòrd sìmplidh le ceistean eadar-ghnìomhach. Cleachdaidh e cuid de na h-eisimpleirean bhon chaibideil seo agus bho chaibideilean roimhe seo gus ceistean eadar-ghnìomhach a nochdadh agus mar as urrainn dhut an cur ri tagraidhean Kafka Streams.

Geàrr-chunntas

  • Tha nithean KStream a’ riochdachadh sruthan thachartasan, an coimeas ri cuir a-steach ann an stòr-dàta. Tha nithean KTable a’ riochdachadh sruthan ùrachaidh, nas coltaiche ri ùrachadh air stòr-dàta. Chan eil meud an nì KTable a’ fàs, tha seann chlàran gan cur an àite feadhainn ùra.
  • Tha feum air nithean KTable airson obair cruinneachaidh.
  • A’ cleachdadh gnìomhachd uinneig, faodaidh tu dàta cruinnichte a roinn ann am bucaidean ùine.
  • Taing do nithean GlobalKTable, gheibh thu cothrom air dàta iomraidh an àite sam bith san tagradh, ge bith dè an sgaradh a th’ ann.
  • Tha e comasach ceanglaichean a dhèanamh eadar nithean KStream, KTable agus GlobalKTable.

Gu ruige seo, tha sinn air fòcas a chuir air a bhith a’ togail thagraidhean Kafka Streams a’ cleachdadh an KStream DSL àrd-ìre. Ged a tha an dòigh-obrach àrd-ìre a 'toirt cothrom dhut prògraman grinn agus pongail a chruthachadh, tha e ga chleachdadh mar mhalairt. Tha a bhith ag obair le DSL KStream a’ ciallachadh gum bi do chòd nas pongaile le bhith a’ lughdachadh na h-ìre de smachd. Anns an ath chaibideil, seallaidh sinn ris an API nód làimhseachaidh ìre ìosal agus feuchaidh sinn ri malairt eile. Bidh na prògraman nas fhaide na bha iad roimhe, ach bidh e comasach dhuinn cha mhòr inneal làimhseachaidh sam bith a dh’ fheumas sinn a chruthachadh.

→ Gheibhear tuilleadh fiosrachaidh mun leabhar aig làrach-lìn foillsichear

→ Airson Habrozhitel lasachadh 25% a 'cleachdadh coupon - Sruthan Kafka

→ Nuair a phàigheas tu airson an dreach pàipeir den leabhar, thèid leabhar eileagtronaigeach a chuir air post-d.

Source: www.habr.com

Cuir beachd ann