Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete" Lumelang, baahi ba Khabro! Buka ena e loketse moqapi ofe kapa ofe ea batlang ho utloisisa ts'ebetso ea likhoele. Ho utloisisa mananeo a ajoang ho tla u thusa ho utloisisa hamolemo Kafka le Kafka Streams. Ho ka ba monate ho tseba moralo oa Kafka ka boeona, empa sena ha se hlokahale: Ke tla u bolella tsohle tseo u li hlokang. Bahlahisi ba nang le boiphihlelo ba Kafka le li-novices ka mokhoa o ts'oanang ba tla ithuta ho etsa lits'ebetso tse khahlisang tsa ts'ebetso ea melapo ba sebelisa laeborari ea Kafka Streams bukeng ena. Baetsi ba Java ba mahareng le ba tsoetseng pele ba seng ba ntse ba tloaelane le mehopolo e kang ho etsa serialization ba tla ithuta ho sebelisa tsebo ea bona ho theha lits'ebetso tsa Kafka Streams. Khoutu ea mohloli oa buka e ngotsoe ho Java 8 mme e sebelisa haholo Java 8 lambda expression syntax, kahoo ho tseba ho sebetsa ka mesebetsi ea lambda (esita le ka puo e 'ngoe ea lenaneo) ho tla ba molemo.

Moqotso. 5.3. Ts'ebetso ea aggregation le fensetere

Karolong ena, re tla tsoela pele ho hlahloba likarolo tse tšepisang ka ho fetisisa tsa Kafka Streams. Ho fihlela joale re se re koahetse lintlha tse latelang tsa Kafka Streams:

  • ho theha topology ea ts'ebetso;
  • ho sebelisa mmuso lits'ebetsong tsa ho phallela;
  • ho etsa likhokahano tsa data stream;
  • phapang lipakeng tsa melapo ea liketsahalo (KStream) le melapo ea ntlafatso (KTable).

Mehlaleng e latelang re tla kopanya likarolo tsena kaofela. U tla boela u ithute ka fensetere, tšobotsi e 'ngoe e ntle ea lisebelisoa tsa ho phallela. Mohlala oa rona oa pele e tla ba aggregation e bonolo.

5.3.1. Kakaretso ea thekiso ea thepa ho latela lekala la indasteri

Ho kopanya le ho hlophisa ka lihlopha ke lisebelisoa tsa bohlokoa ha u sebetsa ka ho phallela data. Tlhahlobo ea lirekoto tsa motho ka mong ha li amoheloa hangata ha ea lekana. Ho ntša tlhahisoleseding e eketsehileng ho tswa ho data, hoa hlokahala ho kopanya le ho kopanya.

Mohlala ona, o tla apara seaparo sa mohoebi oa letsatsi ea hlokang ho lekola boholo ba thekiso ea li-stock tsa lik'hamphani liindastering tse 'maloa. Haholo-holo, u thahasella lik'hamphani tse hlano tse nang le thekiso e kholo ea kabelo indastering ka 'ngoe.

Ho kopanya ho joalo ho tla hloka mehato e mengata e latelang ho fetolela data ka mokhoa o lakatsehang (ho bua ka kakaretso).

  1. Theha mohloli o thehiloeng ho lihlooho o phatlalatsang lintlha tse tala tsa khoebo ea stock. Re tla tlameha ho etsa 'mapa oa mofuta oa StockTransaction ho ntho ea mofuta oa ShareVolume. Taba ke hore ntho ea StockTransaction e na le metadata ea thekiso, empa re hloka feela lintlha tse mabapi le palo ea likarolo tse rekisoang.
  2. Sehlopha sa ShareVolume data ka letšoao la setoko. Ha e se e arotsoe ka letšoao, o ka bokella lintlha tsena ho li-subtotals tsa litheko tsa thekiso ea setoko. Ke habohlokoa ho hlokomela hore mokhoa oa KStream.groupBy o khutlisa mohlala oa mofuta oa KGroupedStream. 'Me u ka fumana mohlala oa KTable ka ho letsetsa mokhoa oa KGroupedStream.fokotsa.

Sehokelo sa KGroupedStream ke eng

Mekhoa ea KStream.groupBy le KStream.groupByKey e khutlisa mohlala oa KGroupedStream. KGroupedStream ke kemedi ya mahareng ya letoto la diketsahalo ka mora ho hlopha ka dinotlolo. Ho hang ha e reretsoe ho sebetsa ka kotloloho le eona. Ho e-na le hoo, KGroupedStream e sebelisoa bakeng sa ts'ebetso ea ho kopanya, e lulang e hlahisa KTable. 'Me kaha sephetho sa ts'ebetso ea aggregation ke KTable' me ba sebelisa lebenkele la mmuso, ho ka etsahala hore ha se lintlafatso tsohle ka lebaka leo li romelloang ho ea pele.

Mokhoa oa KTable.groupBy o khutlisa KGroupedTable e ts'oanang - kemelo ea mahareng ea lintlafatso, tse kopantsoeng hape ka senotlolo.

Ha re nke khefu e khutšoanyane 'me re shebe Feiga. 5.9, e bontshang seo re se fihletseng. Topology ena e tlameha ebe e se e ntse e u tseba haholo.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Ha re shebeng khoutu ea topology ena (e ka fumanoa ho file src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Lethathamo la 5.2).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Khoutu e fanoeng e khetholloa ka bokhutšoane ba eona le bongata bo boholo ba liketso tse etsoang ka mela e mengata. U ka 'na ua hlokomela ntho e ncha ho parameter ea pele ea sehahi.stream mokhoa: boleng ba mofuta oa enum AutoOffsetReset.EARLIEST (ho boetse ho na le MORAO), beha ho sebelisoa Consumed.withOffsetResetPolicy mokhoa. Mofuta ona oa ho bala o ka sebelisoa ho hlakisa leano la ho seta bocha bakeng sa KStream ka 'ngoe kapa KTable 'me o tla pele ho khetho ea ho seta bocha ho tsoa ho tlhophiso.

GroupByKey le GroupBy

Khokahano ea KStream e na le mekhoa e 'meli ea ho hlophisa lirekoto: GroupByKey le GroupBy. Ka bobeli li khutlisa KGroupedTable, kahoo u ka 'na ua ipotsa hore na phapang ke efe pakeng tsa tsona le hore na u sebelise efe?

Mokhoa oa GroupByKey o sebelisoa ha linotlolo tsa KStream li se li se na letho. Habohlokoa le ho feta, folakha e "hlokang ho aroloa bocha" ha e so beoe.

Mokhoa oa GroupBy o nka hore o fetotse linotlolo tsa lihlopha, kahoo folakha ea karohano e behiloe ho 'nete. Ho kopanya, ho kopanya, joalo-joalo ka mor'a mokhoa oa GroupBy ho tla fella ka ho arola bocha ka boiketsetso.
Kakaretso: Ha ho khoneha, u lokela ho sebelisa GroupByKey ho fapana le GroupBy.

Ho hlakile hore na mapValues ​​​​le groupBy mekhoa e etsa eng, kahoo ha re shebeng kakaretso () mokhoa (o fumanoang ho src/main/java/bbejeck/model/ShareVolume.java) (Lethathamo la 5.3).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Mokhoa oa ShareVolume.sum o khutlisa kakaretso ea palo ea thekiso ea setoko, 'me sephetho sa ketane eohle ea lipalo ke ntho ea KTable. . Joale u utloisisa karolo eo KTable e e bapalang. Ha lintho tsa ShareVolume li fihla, ntho e tsamaellanang ea KTable e boloka ntlafatso ea morao-rao. Ho bohlokoa ho hopola hore lintlafatso tsohle li bonts'oa ho shareVolumeKTable e fetileng, empa ha se tsohle tse rometsoeng ho ea pele.

Ka mor'a moo re sebelisa KTable ena ho kopanya (ka palo ea likarolo tse rekisoang) ho fihla lik'hamphani tse hlano tse nang le likarolo tse phahameng ka ho fetisisa tsa likarolo tse rekisoang indastering ka 'ngoe. Liketso tsa rona tabeng ena li tla tšoana le tsa sehlopha sa pele.

  1. Etsa sehlopha se sengKa ts'ebetso ea ho hlophisa lintho tsa ShareVolume ka bomong ka indasteri.
  2. Qala ho akaretsa lintho tsa ShareVolume. Lekhetlong lena ntho ea ho bokellana ke mokoloko oa boholo bo tsitsitseng. Letotong lena la boholo bo tsitsitseng, ke lik'hamphani tse hlano feela tse nang le likarolo tse kholo ka ho fetisisa tsa likarolo tse rekisoang tse bolokiloeng.
  3. 'Mapa li-queue ho tloha serapeng se fetileng ho ea ho boleng ba khoele' me u khutlisetse li-stock tse hlano tse rekisoang ka ho fetisisa ka palo ka indasteri.
  4. Ngola liphetho ka mokhoa oa khoele ho sehlooho.

Ho feiga. Setšoantšo sa 5.10 se bontša graph ea data flow topology. Joalokaha u bona, potoloho ea bobeli ea ts'ebetso e bonolo haholo.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Kaha joale re na le kutloisiso e hlakileng ea sebopeho sa potoloho ena ea bobeli ea ts'ebetso, re ka retelehela ho khoutu ea eona ea mohloli (o tla e fumana ho file src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (Lethathamo la 5.4) .

Sesebelisoa sena sa ho qala se na le mofuta o tsitsitseng oaQueue. Ena ke ntho e tloahelehileng eo e leng adaptara ea java.util.TreeSet e sebelisetsoang ho latela liphetho tse holimo tsa N ka tatellano e theohang ea likarolo tse rekisoang.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
U se u bone mehala ea sehlophaBy le mapValues, kahoo re ke ke ra kena ho tsona (re bitsa mokhoa oa KTable.toStream hobane mokhoa oa KTable.print o tlositsoe). Empa ha u so bone mofuta oa KTable oa aggregate() hajoale, kahoo re tla qeta nako e nyane re buisana ka seo.

Joalokaha u hopola, se etsang hore KTable e fapane ke hore lirekoto tse nang le linotlolo tse tšoanang li nkoa e le lintlafatso. KTable e nkela sebaka sa khale sebaka ka e ncha. Ho kopanya ho etsahala ka tsela e ts'oanang: lirekoto tsa morao-rao tse nang le senotlolo se tšoanang li kopantsoe. Ha rekoto e fihla, e eketsoa ho sehlopha sa FixedSizePriorityQueue ho sebelisa adder (parameter ea bobeli ka mohala oa mokhoa o akaretsang), empa haeba rekoto e 'ngoe e se e ntse e le teng ka senotlolo se tšoanang, joale rekoto ea khale e tlosoa ho sebelisoa subtractor (parameter ea boraro ho mokgoa o kopanetsweng).

Sena sohle se bolela hore aggregator ea rona, FixedSizePriorityQueue, ha e kopanye boleng bohle ka senotlolo se le seng, empa e boloka palo e tsamaeang ea mefuta ea N e rekisoang haholo. Keno e 'ngoe le e 'ngoe e kenang e na le kakaretso ea likarolo tse rekisitsoeng ho fihlela joale. KTable e tla u fa leseli mabapi le hore na ke likarolo life tsa lik'hamphani tse rekisoang ka ho fetesisa, ntle le ho hloka kakaretso ea ntlafatso e ngoe le e ngoe.

Re ithutile ho etsa lintho tse peli tsa bohlokoa:

  • boleng ba sehlopha ho KTable ka senotlolo se tloaelehileng;
  • etsa mesebetsi ea bohlokoa joalo ka rollup le aggregation holim'a boleng ba lihlopha tsena.

Ho tseba ho etsa ts'ebetso ena ke habohlokoa ho utloisisa moelelo oa data e tsamaeang ka kopo ea Kafka Streams le ho utloisisa hore na e na le boitsebiso bofe.

Re boetse re bokelletse tse ling tsa lintlha tsa bohlokoa tseo ho builoeng ka tsona pejana bukeng ena. Khaolong ea 4, re buisane kamoo ho mamella liphoso, boemo ba lehae bo leng bohlokoa bakeng sa ts'ebeliso ea ho phallela. Mohlala oa pele khaolong ena o bontšitse hore na ke hobane'ng ha naha ea lehae e le ea bohlokoa hakana-e u lumella ho boloka tlaleho ea boitsebiso boo u seng u bo bone. Ho kena sebakeng sa heno ho qoba tieho ea marang-rang, ho etsa hore sesebelisoa se sebetse hantle le ho mamella liphoso.

Ha o etsa ts'ebetso efe kapa efe ea rollup kapa aggregation, o tlameha ho hlakisa lebitso la lebenkele la mmuso. Ts'ebetso ea rollup le aggregation e khutlisa mohlala oa KTable, 'me KTable e sebelisa polokelo ea mmuso ho nkela liphetho tsa khale sebaka ka tse ncha. Joalo ka ha u bone, ha se lintlafatso tsohle tse romelloang fatše, 'me sena se bohlokoa hobane ts'ebetso ea ho kopanya e etselitsoe ho hlahisa litaba tse khuts'oane. Haeba u sa sebelise boemo ba lehae, KTable e tla fetisa liphetho tsohle tse kopanngoeng le tse thathamisitsoeng.

Ka mor'a moo, re tla sheba ho etsa ts'ebetso e kang aggregation ka nako e itseng - seo ho thoeng ke ts'ebetso ea fensetere.

5.3.2. Ts'ebetso ea lifensetere

Karolong e fetileng, re tsebisitse convolution ea sliding le aggregation. Kopo e entse kemiso e tsoelang pele ea thekiso ea thepa e lateloang ke ho kopanngoa ha li-stock tse hlano tse rekisoang ka ho fetisisa phapanyetsano.

Ka nako e 'ngoe ho hlokahala hore ho be le ho kopanya ho tsoelang pele le ho bokella liphetho. 'Me ka linako tse ling u hloka ho etsa opereishene ka nako e itseng feela. Mohlala, bala hore na ho entsoe litšebelisano tse kae tsa phapanyetsano le likarolo tsa k'hamphani e itseng metsotsong e 10 e fetileng. Kapa ke basebelisi ba bakae ba tobetseng banner e ncha ea papatso metsotsong e 15 e fetileng. Sesebelisoa se ka etsa ts'ebetso e joalo ka makhetlo a mangata, empa ka liphetho tse sebetsang ho linako tse boletsoeng feela (nako lifensetere).

Ho bala litšebelisano tsa phapanyetsano ka moreki

Mohlaleng o latelang, re tla sala morao litšebelisano tsa setoko ho bahoebi ba bangata—ebang ke mekhatlo e meholo kapa bo-ramatsete ba bohlale.

Ho na le mabaka a mabeli a ka etsang hore ho lateloe mokhoa ona. E 'ngoe ea tsona ke tlhoko ea ho tseba hore na baetapele ba mebaraka ba reka / ba rekisa eng. Haeba libapali tsena tse kholo le bo-ramatsete ba tsoetseng pele ba bona monyetla, hoa utloahala ho latela leano la bona. Lebaka la bobeli ke takatso ea ho bona matšoao afe kapa afe a ka bang teng a khoebo ea ka hare e seng molaong. Ho etsa sena, o tla hloka ho sekaseka khokahano ea li-spikes tse kholo tsa thekiso le likhatiso tsa bohlokoa tsa boralitaba.

Tsamaiso e joalo e na le mehato e latelang:

  • ho theha mokhoa oa ho bala ho tsoa sehloohong sa li-stock-transactions;
  • ho hlophisa lirekoto tse kenang ka ID ea moreki le letšoao la setoko. Ho letsetsa sehlophaKa mokhoa ho khutlisa mohlala oa sehlopha sa KGroupedStream;
  • Mokhoa oa KGroupedStream.windowedBy o khutlisa molatsoana oa data o lekantsoeng ke fensetere ea nako, e lumellang ho bokellana ka lifensetere. Ho itšetlehile ka mofuta oa fensetere, e ka ba TimeWindowedKStream kapa SessionWindowedKStream e khutlisetsoa;
  • palo ea transaction bakeng sa ts'ebetso ea ho kopanya. Phallo ea data e kentsoeng ka fensetere e etsa qeto ea hore na rekoto e itseng e nkoa e le karolo ea palo ena;
  • ho ngola sephetho ho sehlooho kapa ho se hlahisa ho console nakong ea nts'etsopele.

The topology ea kopo ena e bonolo, empa setšoantšo se hlakileng sa eona se ka thusa. Ha re shebeng Feiga. 5.11.

Ka mor'a moo, re tla sheba ts'ebetso ea ts'ebetso ea fensetere le khoutu e lumellanang.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"

Mefuta ea lifensetere

Ho na le mefuta e meraro ea lifensetere ho Kafka Streams:

  • nako le nako;
  • "ho oela";
  • ho thella/ ho tlola.

Ke efe eo u ka e khethang e itšetlehile ka litlhoko tsa hau tsa khoebo. Lifensetere tsa ho putlama le ho qhoma li na le nako, athe lifensetere tsa mananeo li lekantsoe ke ts'ebetso ea mosebelisi-nako ea (li)nako e khethoa feela ke hore na mosebelisi o mahlahahlaha hakae. Ntho e ka sehloohong eo u lokelang ho e hopola ke hore mefuta eohle ea lifensetere e itšetlehile ka litempe tsa letsatsi / nako ea ho kenya, eseng nako ea tsamaiso.

Ka mor'a moo, re kenya ts'ebetsong topology ea rona ka mofuta o mong le o mong oa lifensetere. Khoutu e felletseng e tla fanoa feela mohlaleng oa pele; bakeng sa mefuta e meng ea lifensetere ha ho letho le tla fetoha ntle le mofuta oa ts'ebetso ea fensetere.

Lifensetere tsa nako

Lifensetere tsa session li fapane haholo le mefuta e meng eohle ea lifensetere. Ha li fokotsoe haholo ke nako joalo ka ts'ebetso ea mosebelisi (kapa ts'ebetso ea setheo seo u ka ratang ho se latela). Lifensetere tsa session li arotsoe ka linako tsa ho se sebetse.

Setšoantšo sa 5.12 se bontša mohopolo oa lifensetere tsa nako. Seboka se senyenyane se tla kopana le seshene ka letsohong le letšehali. 'Me seboka se ka ho le letona se tla arohana hobane se latela nako e telele ea ho se sebetse. Lifensetere tsa nako li ipapisitse le tšebetso ea mosebelisi, empa sebelisa litempe tsa letsatsi/nako ho tsoa ho likenyo ho fumana hore na kemiso eo ke ea efe.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"

Ho sebelisa lifensetere tsa seboka ho latela litšebelisano tsa setoko

Ha re sebeliseng lifensetere tsa seboka ho hapa tlhahisoleseling mabapi le phapanyetsano ea phapanyetsano. Ts'ebetsong ea lifensetere tsa nako e bonts'itsoeng ho Listing 5.5 (e ka fumanoang ho src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
U se u bone boholo ba ts'ebetso ho topology ena, kahoo ha ho na lebaka la ho li sheba hape mona. Empa ho boetse ho na le lintlha tse 'maloa tse ncha mona, tseo joale re tla buisana ka tsona.

Opereishene efe kapa efe ea sehlopha ka tloaelo e etsa mofuta o itseng oa ts'ebetso ea ho kopanya (ho kopanya, ho phutha, kapa ho bala). U ka etsa aggregation e akaretsang ka kakaretso e sebetsang, kapa kakaretso ea fensetere, e nkang lirekoto ka har'a fensetere ea nako e boletsoeng.

Khoutu ho Lethathamo la 5.5 e bala palo ea litšebelisano ka har'a lifensetere tsa nako. Ho feiga. 5.13 Liketso tsena li hlahlojoa mohato ka mohato.

Ka ho letsetsa windowedBy(SessionWindows.with(twentySeconds).ho fihlela(FifteenMinutes)) re theha fensetere ea ho se sebetse e nang le nako ea ho se sebetse ea metsotsoana e 20 le nako e phehellang ea metsotso e 15. Nako e sa sebetseng ea metsotsoana e 20 e bolela hore kopo e tla kenyelletsa ho kena hofe kapa hofe ho fihlang nakong ea metsotsoana e 20 ho tloha qetellong kapa ho qala ha seshene ea hajoale ho seshene ea hajoale (e sebetsang).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Ka mor'a moo, re totobatsa hore na ke ts'ebetso efe ea ho kopanya e lokelang ho etsoa fensetereng ea lenaneo - tabeng ena, bala. Haeba keno e kenang e oela ka ntle ho fensetere e sa sebetseng (lehlakoreng lefe kapa lefe la setempe sa letsatsi/nako), sesebelisoa se theha seshene se secha. Nako ea ho boloka nako e bolela ho boloka seshene ka nako e itseng 'me e lumella lintlha tsa morao-rao tse fetang nako ea ho se sebetse empa li ntse li ka hokelloa. Ho feta moo, qalo le pheletso ea seshene e ncha e hlahisoang ke kopanyo e tsamaisana le setempe sa pele le sa morao-rao sa letsatsi/nako.

Ha re shebeng likenyelletso tse 'maloa ho tsoa ho mokhoa oa ho bala ho bona hore na liboka li sebetsa joang (Letlapa la 5.1).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Ha lirekoto li fihla, re sheba linako tse seng li ntse li le teng ka senotlolo se tšoanang, nako ea ho qetela e ka tlase ho letsatsi la hona joale / setempe sa nako - nako ea ho se sebetse, le nako ea ho qala e kholo ho feta nako ea hajoale / setempe sa nako + nako ea ho se sebetse. Ho nka sena hloko, tse 'nè tse tsoang tafoleng. 5.1 li kopanngoa ho ba seboka se le seng ka tsela e latelang.

1. Tlaleho ea 1 e fihla pele, kahoo nako ea ho qala e lekana le nako ea ho qetela 'me ke 00:00:00.

2. Ka mor'a moo, ho kena 2 ho fihla, 'me re batla li-sessions tse qetellang pele ho 23:59:55' me li qale ho feta 00:00:35. Re fumana rekoto ea 1 mme re kopanya linako tsa 1 le 2. Re nka nako ea ho qala ea 1 (pele ho nako) le nako ea ho qetela ea lenaneo la 2 (hamorao), e le hore lenaneo la rona le lecha le qale ka 00:00:00 'me le fele ka 00: 00:15.

3. Record 3 e fihla, re batla li-sessions pakeng tsa 00:00:30 le 00:01:10 'me ha re fumane leha e le efe. Kenya lenaneo la bobeli bakeng sa senotlolo 123-345-654,FFBE, ho qala le ho qetella ka 00:00:50.

4. Rekota 4 e fihla mme re batla mananeo pakeng tsa 23:59:45 le 00:00:25. Lekhetlong lena ho fumanoa mananeo a 1 le a 2. Likopano tse tharo kaofela li kopantsoe ho ba e le 'ngoe, ka nako ea ho qala 00:00:00 le nako ea ho qetela ea 00:00:15.

Ho tsoa ho se hlalositsoeng karolong ena, ho bohlokoa ho hopola lintlha tse latelang tsa bohlokoa:

  • mananeo ha se lifensetere tsa boholo bo tsitsitseng. Nako ea kopano e khethoa ke ketsahalo ka nako e itseng;
  • Litempe tsa letsatsi/nako ho data li etsa qeto ea hore na ketsahalo e oela nakong e teng kapa nakong ea ho se sebetse.

Ka mor'a moo, re tla tšohla mofuta o latelang oa fensetere - "ho oela" lifensetere.

"Ho sisinyeha" lifensetere

Lifensetere tse sisinyehang li nka liketsahalo tse oelang ka nako e itseng. Ak'u inahanele hore u hloka ho nka lik'hamphani tsohle tsa k'hamphani e itseng metsotsoana e meng le e meng e 20, kahoo u bokella liketsahalo tsohle ka nako eo. Qetellong ea nako ea metsotsoana e 20, fensetere e pota-potile ebe e fetela ho nako e ncha ea ho shebella metsotsoana e 20. Setšoantšo sa 5.14 se bontša boemo bona.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Joalokaha u ka bona, liketsahalo tsohle tse amohetsoeng metsotsong e 20 e fetileng li kenyelelitsoe fensetereng. Qetellong ea nako ena, fensetere e ncha e etsoa.

Lethathamo la 5.6 le bonts'a khoutu e bonts'ang ts'ebeliso ea lifensetere tse oelang ho ts'oara lits'ebetso tsa setoko metsotsoana e meng le e meng ea 20 (e fumanehang ho src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Ka phetoho ena e nyane ho TimeWindows.ea mokhoa oa ho letsetsa, o ka sebelisa fensetere e oelang. Mohlala ona ha o bitse mokhoa oa until(), kahoo ho tla sebelisoa nako ea ho boloka ea kamehla ea lihora tse 24.

Qetellong, ke nako ea ho fetela ho ea ho qetela ea likhetho tsa lifensetere - "hopping" lifensetere.

Ho thella ("tlola") lifensetere

Lifensetere tse thellang li tšoana le lifensetere tse oelang, empa ka phapang e nyane. Lifensetere tse thellang ha li eme ho fihlela qetellong ea nako pele u theha fensetere e ncha ho sebetsana le liketsahalo tsa morao-rao. Ba qala lipalo tse ncha ka mor'a nako ea ho leta ka tlase ho nako ea fensetere.

Ho bontša phapang lipakeng tsa lifensetere tse thellang le tse tlolakang, a re khutleleng mohlaleng oa ho bala litšebelisano tsa li-stock exchange. Sepheo sa rona e ntse e le ho bala palo ea lik'hamphani, empa ha re batle ho ema nako eohle pele re ka ntlafatsa k'haontareng. Ho e-na le hoo, re tla ntlafatsa k'haontareng ka nako e khutšoanyane. Ka mohlala, re ntse re tla bala palo ea lik'hamphani metsotsoana e meng le e meng e 20, empa re ntjhafatse k'haonte ka metsotsoana e meng le e meng e 5, joalo ka ha ho bontšitsoe setšoantšong. 5.15. Tabeng ena, re qetella re na le lifensetere tse tharo tsa sephetho tse nang le data e fetang.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Lethathamo la 5.7 le bonts'a khoutu ea ho hlalosa lifensetere tse thellang (tse fumanehang ho src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Fesetere e oeleng e ka fetoloa hore e be fensetere ea ho tlola ka ho kenyelletsa mohala ho advanceBy() mokhoa. Mohlala o bontšitsoeng, nako ea ho boloka ke metsotso e 15.

U bone karolong ena mokhoa oa ho fokotsa liphetho tsa aggregation ho lifensetere tsa nako. Ka ho khetheha, ke batla hore u hopole lintho tse tharo tse latelang ho tsoa karolong ena:

  • boholo ba lifensetere tsa seboka ha bo felle ka nako, empa ke ts'ebetso ea mosebelisi;
  • lifensetere tsa "ho oela" li fana ka kakaretso ea liketsahalo ka nako e itseng;
  • Nako ea lifensetere tsa ho qhomela e tsitsitse, empa e nchafatsoa khafetsa mme e kanna ea ba le likenyo tse fetang lifensetereng tsohle.

Ka mor'a moo, re tla ithuta ho fetolela KTable ho KStream bakeng sa khokahano.

5.3.3. Ho hokahanya lintho tsa KStream le KTable

Khaolong ea 4, re buisane ka ho hokahanya lintho tse peli tsa KStream. Hona joale re tlameha ho ithuta ho hokahanya KTable le KStream. Sena se ka hlokahala ka lebaka le latelang le bonolo. KStream ke letoto la lirekoto, 'me KTable ke letoto la lintlafatso tsa rekoto, empa ka linako tse ling u kanna ua batla ho eketsa moelelo oa tlatsetso ho rekoto o sebelisa liapdeite tse tsoang ho KTable.

Ha re nke lintlha tse mabapi le palo ea li-stock exchange transactions ebe re li kopanya le litaba tsa stock exchange bakeng sa liindasteri tse amehang. Mona ke seo u hlokang ho se etsa ho fihlela sena ka lebaka la khoutu eo u seng u ntse u e-na le eona.

  1. Fetolela ntho ea KTable e nang le lintlha tse mabapi le palo ea li-stock transactions ho KStream, e lateloa ke ho fetola senotlolo ka senotlolo se bontšang lekala la indasteri le lumellanang le letšoao lena la thepa.
  2. Theha ntho ea KTable e balang data ho tsoa sehloohong se nang le litaba tsa stock exchange. KTable ena e ncha e tla aroloa ka lekala la indasteri.
  3. Hokela lintlafatso tsa litaba ka tlhahisoleseling mabapi le palo ea litšebelisano tsa phapanyetsano ea setoko ka lekala la indasteri.

Joale ha re boneng mokhoa oa ho kenya tšebetsong moralo ona oa tšebetso.

Fetolela KTable ho KStream

Ho fetolela KTable ho KStream o hloka ho etsa tse latelang.

  1. Letsetsa mokhoa oa KTable.toStream().
  2. Ka ho letsetsa mokhoa oa KStream.map, fetola senotlolo ka lebitso la indasteri, ebe u khutlisa ntho ea TransactionSummary ho tsoa ketsahalong ea Windowed.

Re tla kopanya lits'ebetso tsena hammoho ka tsela e latelang (khoutu e ka fumanoa faeleng src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Lethathamo la 5.8).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Hobane re ntse re etsa ts'ebetso ea KStream.map, mohlala oa KStream o khutlisitsoeng o aroloa hape ha o sebelisoa khokahanong.

Re phethile ts'ebetso ea ho fetolela, ka mor'a moo re hloka ho theha ntho ea KTable bakeng sa ho bala litaba tsa stock.

Pōpo ea KTable bakeng sa litaba tsa stock

Ka lehlohonolo, ho theha ntho ea KTable ho nka mola o le mong oa khoutu (khoutu e ka fumanoa ho src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Lethathamo la 5.9).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Ke habohlokoa ho hlokomela hore ha ho na lintho tsa Serde tse hlokahalang ho boleloa, kaha likhoele tsa Serdes li sebelisoa litlhophisong. Hape, ka ho sebelisa palo ea EARLIEST, tafole e tlatsoa ka lirekoto qalong.

Hona joale re ka fetela mohatong oa ho qetela - ho hokahanya.

Ho hokela lintlafatso tsa litaba ka palo ea lintlha tsa transaction

Ho theha khokahano ha ho thata. Re tla sebelisa karolo e ka letsohong le letšehali haeba ho se na litaba tsa stock bakeng sa indasteri e amehang (khoutu e hlokahalang e ka fumanoa faeleng src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (Lethathamo la 5.10).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Opereishene ena ea leftJoin e bonolo haholo. Ho fapana le maqhama a Khaolong ea 4, mokhoa oa JoinWindow ha o sebelisoe hobane ha o etsa kopanelo ea KStream-KTable, ho na le keno e le 'ngoe feela KTable bakeng sa senotlolo ka seng. Khokahano e joalo ha e na moeli ka nako: rekoto e ka har'a KTable kapa ha e eo. Qeto ea mantlha: ho sebelisa lintho tsa KTable o ka ntlafatsa KStream ka lintlha tse sa ntlafatsoang khafetsa.

Joale re tla sheba mokhoa o sebetsang haholoanyane oa ho ntlafatsa liketsahalo ho tsoa ho KStream.

5.3.4. Lintho tsa GlobalKTable

Joalokaha u bona, ho na le tlhoko ea ho ntlafatsa melapo ea liketsahalo kapa ho eketsa moelelo ho tsona. Khaolong ea 4 u bone likhokahano lipakeng tsa lintho tse peli tsa KStream, 'me karolong e fetileng u bone khokahano lipakeng tsa KStream le KTable. Maemong ana kaofela, hoa hlokahala ho arola hape molapo oa data ha ho etsoa 'mapa oa linotlolo tsa mofuta o mocha kapa boleng. Ka linako tse ling repartitioning e etsoa ka ho hlaka, 'me ka linako tse ling Kafka Streams e e etsa ka bo eona. Ho arola bocha hoa hlokahala hobane linotlolo li fetohile 'me litlaleho li tlameha ho qetella li le likarolong tse ncha, ho seng joalo ho ke ke ha khoneha ho hokahanya (sena se ile sa tšohloa Khaolong ea 4, karolong ea "Re-partitioning data" karolong ea 4.2.4).

Ho arola bocha ho na le litšenyehelo

Ho arola bocha ho hloka litšenyehelo - litšenyehelo tse ling tsa lisebelisoa bakeng sa ho theha lihlooho tse mahareng, ho boloka data e kopitsoang sehloohong se seng; ho boetse ho bolela ho lieha ho eketseha ka lebaka la ho ngola le ho bala ho tsoa sehloohong sena. Ho feta moo, haeba o hloka ho kopanya likarolo tse fetang bonngoe, o tlameha ho kopanya lihokelo, ho etsa 'mapa oa lirekoto ka linotlolo tse ncha, ebe o tsamaisa mokhoa oa ho arola hape.

E hokela ho li-dataset tse nyane

Maemong a mang, palo ea lintlha tsa litšupiso tse lokelang ho hokahanngoa e batla e le nyane, kahoo likopi tsa eona tse felletseng li ka lekana habonolo sebakeng sa node ka 'ngoe. Bakeng sa maemo a kang ana, Kafka Streams e fana ka sehlopha sa GlobalKTable.

Maemo a GlobalKTable a ikhethile hobane ts'ebeliso e pheta lintlha tsohle ho e 'ngoe ea li-node. 'Me kaha lintlha tsohle li teng sebakeng se seng le se seng, ha ho na lebaka la ho arola molatsoana oa ketsahalo ka senotlolo sa data e le hore e fumanehe likarolong tsohle. U ka etsa lihokelo tse se nang senotlolo u sebelisa lintho tsa GlobalKTable. Ha re khutleleng ho o mong oa mehlala e fetileng ho bontša tšobotsi ena.

Ho hokahanya lintho tsa KStream le lintho tsa GlobalKTable

Karolwaneng ya 5.3.2, re ile ra kopanya ditransekshene ka fensetere ke bareki. Liphetho tsa kakaretso ena li ne li shebahala tjena:

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

Leha liphetho tsena li ile tsa sebeletsa morero, ho ka be ho bile molemo haholo haeba lebitso la moreki le lebitso le felletseng la khampani le tsona li ne li hlahisoa. Ho kenya lebitso la moreki le lebitso la k'hamphani, o ka etsa lihokelo tse tloaelehileng, empa o tla hloka ho etsa limmapa tse peli tsa bohlokoa le ho arola bocha. Ka GlobalKTable u ka qoba litšenyehelo tsa ts'ebetso e joalo.

Ho etsa sena, re tla sebelisa ntho ea countStream ho tsoa Lethathamong la 5.11 (khoutu e lumellanang e ka fumanoa ho src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) ebe o e hokahanya le lintho tse peli tsa GlobalKTable.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Re se re kile ra buisana ka taba ena, kahoo nke ke ka e pheta. Empa kea hlokomela hore khoutu e ho toStream() ts'ebetso ea 'mapa e khutsufalitsoe ho ntho e sebetsang ho fapana le polelo ea lambda e kahare molemong oa ho baloa.

Mohato o latelang ke ho phatlalatsa mehlala e 'meli ea GlobalKTable (khoutu e bontšitsoeng e ka fumanoa ho file src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Lethathamo la 5.12).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"

Ka kopo hlokomela hore mabitso a lihlooho a hlalosoa ho sebelisoa mefuta e baliloeng.

Kaha joale re na le likarolo tsohle tse lokiselitsoeng, se setseng ke ho ngola khoutu bakeng sa khokahanyo (e ka fumanoang faeleng src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (Lethathamo la 5.13).

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Leha ho na le likhoutu tse peli khoutung ena, li tlameletsoe hobane ha ho liphetho tsa tsona tse sebelisoang ka thoko. Liphetho li hlahisoa qetellong ea ts'ebetso eohle.

Ha o tsamaisa ts'ebetso ea ho kopanya e kaholimo, o tla fumana liphetho tse kang tsena:

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

Boleng ha bo so fetohe, empa liphetho tsena li bonahala li hlakile haholoanyane.

Haeba u bala ho fihlela Khaolong ea 4, u se u bone mefuta e mengata ea likhokahano e sebetsa. Li thathamisitsoe tafoleng. 5.2. Tafole ena e bonts'a bokhoni ba khokahanyo joalo ka mofuta oa 1.0.0 oa Kafka Streams; Ho na le ntho e ka fetohang likhatisong tse tlang.

Buka ea "Kafka Streams in Action. Likopo le li-microservices bakeng sa mosebetsi oa nako ea 'nete"
Ho phethela lintho, a re phete lintlha tsa motheo: o ka hokahanya melapo ea liketsahalo (KStream) le ho ntlafatsa melapo (KTable) o sebelisa naha ea lehae. Ntle le moo, haeba boholo ba data ea litšupiso ha bo kholo haholo, o ka sebelisa ntho ea GlobalKTable. GlobalKTables e pheta likarolo tsohle ho node e 'ngoe le e' ngoe ea Kafka Streams, ho etsa bonnete ba hore data eohle e teng ho sa tsotellehe hore na senotlolo se lumellana le eng.

Ka mor'a moo re tla bona karolo ea Kafka Streams, ka lebaka leo re ka bonang liphetoho tsa boemo ntle le ho ja data ho tsoa sehloohong sa Kafka.

5.3.5. Boemo bo belaetsang

Re se re entse lits'ebetso tse 'maloa tse kenyelletsang naha' me re lula re hlahisa liphetho ho khomphutha (bakeng sa merero ea nts'etsopele) kapa re li ngolle sehloohong (bakeng sa merero ea tlhahiso). Ha u ngola liphetho ho sehlooho, u tlameha ho sebelisa moreki oa Kafka ho li sheba.

Ho bala lintlha tse tsoang lihloohong tsena ho ka nkoa e le mofuta oa maikutlo a bonahalang. Bakeng sa merero ea rona, re ka sebelisa tlhaloso ea pono e fetotsoeng ho tsoa ho Wikipedia: "...sesebelisoa sa polokelo ea boitsebiso se nang le liphetho tsa potso. Mohlala, e ka ba kopi ea sebaka sa hau ea data e hole, kapa karoloana ea mela le/kapa likholomo tsa tafole kapa liphetho tse kopantseng, kapa lethathamo la kakaretso le fumanoeng ka ho kopanya” (https://en.wikipedia.org/wiki /Materialized_view).

Kafka Streams e boetse e u lumella hore u tsamaise lipotso tse sebetsanang le mabenkele a mmuso, e u lumellang hore u bale maikutlo ana ka ho toba. Ke habohlokoa ho hlokomela hore potso ho lebenkele la mmuso ke ts'ebetso ea ho bala feela. Sena se tiisa hore ha o hloke ho tšoenyeha ka ho etsa hore boemo bo se ke ba lumellana ka phoso ha sesebelisoa sa hau se ntse se sebetsana le data.

Bokhoni ba ho botsa mabenkele a mmuso ka kotloloho bo bohlokoa. Sena se bolela hore o ka etsa lits'ebetso tsa dashboard ntle le ho qala ho lata data ho tsoa ho moreki oa Kafka. E boetse e eketsa katleho ea ts'ebeliso, ka lebaka la hore ha ho na tlhoko ea ho ngola data hape:

  • ka lebaka la sebaka sa data, li ka fumaneha kapele;
  • phetisetso ea data e felisitsoe, kaha ha e ngoletsoe polokelong ea kantle.

Ntho ea bohlokoa eo ke ratang hore u e hopole ke hore u ka botsa boemo ka kotloloho ho tsoa ka har'a kopo ea hau. Menyetla eo sena se u fang eona e ke ke ea feteletsoa. Sebakeng sa ho ja data ho tsoa Kafka le ho boloka lirekoto polokelong ea ts'ebeliso, o ka botsa mabenkele a mmuso ka sephetho se tšoanang. Lipotso tse tobileng mabenkeleng a mmuso li bolela khoutu e nyane (ha ho moreki) le software e nyane (ha ho hlokahale tafole ea database ho boloka liphetho).

Re buile ka lintlha tse ngata khaolong ena, kahoo re tla tlohela puisano ea rona ea lipotso tse amanang le mabenkele a mmuso hajoale. Empa o seke oa tšoenyeha: Khaolong ea 9, re tla theha ts'ebeliso e bonolo ea dashboard e nang le lipotso. E tla sebelisa e meng ea mehlala ho tsoa likhaolong tsena le tse fetileng ho bonts'a lipotso tse sebetsanang le hore na u ka li kenya joang lits'ebetsong tsa Kafka Streams.

Kakaretso

  • Lintho tsa KStream li emela liketsahalo tse ngata, tse ka bapisoang le tse kentsoeng polokelong ea litaba. Lintho tsa KTable li emela melapo ea ntlafatso, joalo ka liapdeite ho database. Boholo ba ntho ea KTable ha e hōle, litlaleho tsa khale li nkeloa sebaka ke tse ncha.
  • Lintho tsa KTable lia hlokahala bakeng sa ts'ebetso ea ho kopanya.
  • U sebelisa ts'ebetso ea fensetere, u ka arola data e kopaneng ka libakete tsa nako.
  • Ka lebaka la lintho tsa GlobalKTable, o ka fumana data ea litšupiso kae kapa kae ts'ebelisong, ho sa tsotelehe karohano.
  • Likamano pakeng tsa lintho tsa KStream, KTable le GlobalKTable lia khoneha.

Ho fihlela hajoale, re tsepamisitse maikutlo ho aheng lits'ebetso tsa Kafka Streams re sebelisa KStream DSL ea boemo bo holimo. Le hoja mokhoa oa boemo bo phahameng o u lumella ho etsa mananeo a makhethe le a makhutšoane, ho a sebelisa ho emela khoebo. Ho sebetsa le DSL KStream ho bolela ho eketsa bokhuts'oane ba khoutu ea hau ka ho fokotsa boemo ba taolo. Khaolong e latelang, re tla sheba API ea boemo bo tlase bo sebetsang ebe re leka mekhoa e meng ea khoebo. Mananeo a tla nka nako e telele ho feta kamoo a neng a le ka teng pele, empa re tla khona ho theha hoo e batlang e le node efe kapa efe eo re ka e hlokang.

→ Lintlha tse ling mabapi le buka li ka fumanoa ho webosaete ea mohatisi

→ Bakeng sa Habrozhiteli 25% theolelo u sebelisa setlankane - Melapo ea Kafka

→ Kamora ho lefa mofuta oa pampiri oa buka, buka ea elektroniki e tla romelloa ka e-mail.

Source: www.habr.com

Eketsa ka tlhaloso