Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 3. Kafka

Leanúint leis an aistriúchán ar leabhar beag:
Bróicéirí Teachtaireachta a thuiscint
údar: Jakub Korab, foilsitheoir: O'Reilly Media, Inc., dáta foilsithe: Meitheamh 2017, ISBN: 9781492049296.

Cuid aistrithe roimhe seo: Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 1 Réamhrá

CAIBIDIL 3

Kafka

Forbraíodh Kafka ag LinkedIn chun dul timpeall ar chuid de na teorainneacha a bhaineann le bróicéirí teachtaireachta traidisiúnta agus nach gá bróicéirí teachtaireachta iolracha a bhunú le haghaidh idirghníomhaíochtaí pointe go pointe éagsúla, a bhfuil cur síos orthu sa leabhar seo faoi "Scálú suas agus amach" ar leathanach 28. Cásanna úsáide Tá LinkedIn ag brath go mór ar ionghabháil aontreo de mhéideanna an-mhór sonraí, mar chliceáil ar leathanaigh agus logaí rochtana, agus é ag ligean do na sonraí sin a bheith in úsáid ag córais iolracha gan cur isteach ar tháirgiúlacht na dtáirgeoirí ná na dtomhaltóirí eile. Go deimhin, is é an chúis atá le Kafka ná an cineál ailtireachta teachtaireachtaí a chuireann an Phíblíne Sonraí Uilíoch síos air a fháil.

Mar gheall ar an sprioc deiridh seo, tháinig ceanglais eile chun cinn go nádúrtha. Ba chóir do Kafka:

  • Bí thar a bheith tapa
  • Cuir níos mó bandaleithead ar fáil agus tú ag obair le teachtaireachtaí
  • Tacaigh le samhlacha Foilsitheoir-Síntiúsóra agus Pointe go Pointe
  • Ná mall síos le tomhaltóirí a chur leis. Mar shampla, díghrádaíonn feidhmíocht na scuaine agus an ábhair araon in ActiveMQ de réir mar a mhéadaíonn líon na dtomhaltóirí ar an gceann scríbe.
  • A bheith inscálaithe go cothrománach; más rud é nach féidir le bróicéir amháin a leanann teachtaireachtaí é sin a dhéanamh ach ar uasluas an diosca, is ciall dó dul níos faide ná cás bróicéir aonair chun feidhmíocht a mhéadú
  • Teorainn a chur le rochtain ar teachtaireachtaí a stóráil agus a athghabháil

Chun seo go léir a bhaint amach, ghlac Kafka ailtireacht a d'athshainigh róil agus freagrachtaí na gcliant agus na bróicéirí teachtaireachtaí. Tá an tsamhail JMS dírithe go mór ar bhróicéir, áit a bhfuil an bróicéir freagrach as teachtaireachtaí a dháileadh agus ní mór do chliaint a bheith buartha faoi theachtaireachtaí a sheoladh agus a fháil. Tá Kafka, ar an láimh eile, cliant-lárnach, leis an gcliant ag glacadh le go leor de na gnéithe de bhróicéir traidisiúnta, mar dháileadh cothrom teachtaireachtaí ábhartha do thomhaltóirí, mar mhalairt ar bhróicéir thar a bheith tapa agus inscálaithe. I gcás daoine a d’oibrigh le córais teachtaireachtaí traidisiúnta, teastaíonn athrú bunúsach meoin chun oibriú le Kafka.
Mar thoradh ar an treo innealtóireachta seo cruthaíodh bonneagar teachtaireachtaí a bheidh in ann tréchur a mhéadú trí go leor orduithe méide i gcomparáid le gnáthbhróicéir. Mar a fheicfimid, tagann an cur chuige seo le comhbhabhtáil, rud a chiallaíonn nach bhfuil Kafka oiriúnach do chineálacha áirithe ualaí oibre agus bogearraí suiteáilte.

Múnla Ceann Scríbe Aontaithe

Chun na ceanglais a bhfuil cur síos orthu thuas a chomhlíonadh, tá Kafka tar éis teachtaireachtaí foilsitheoireachta agus teachtaireachtaí pointe go pointe a chomhcheangal faoi cheann scríbe de chineál amháin - topaic. Tá sé seo mearbhall do dhaoine a d'oibrigh le córais teachtaireachtaí, áit a dtagraíonn an focal "topaic" do mheicníocht craolta as a bhfuil (ón ábhar) léitheoireacht nondurable. Ba cheart topaicí Kafka a mheas mar chineál cinn scríbe hibrideach, mar atá sainmhínithe sa réamhrá don leabhar seo.

Don chuid eile den chaibidil seo, mura luaimid a mhalairt go sainráite, déanfar tagairt sa téarma "topaic" d'ábhar Kafka.

Chun tuiscint iomlán a fháil ar an gcaoi a n-iompraíonn topaicí agus na ráthaíochtaí a sholáthraíonn siad, ní mór dúinn breathnú ar dtús ar an gcaoi a gcuirtear i bhfeidhm iad i Kafka.
Tá a loga féin ag gach topaic i Kafka.
Scríobhann táirgeoirí a sheolann teachtaireachtaí chuig Kafka chuig an loga seo, agus léann tomhaltóirí ón loga ag baint úsáide as leideanna a théann ar aghaidh i gcónaí. Go tréimhsiúil, scriosann Kafka na codanna is sine den logáil, cibé acu an bhfuil na teachtaireachtaí sna codanna sin léite nó nach bhfuil. Cuid lárnach de dhearadh Kafka is ea nach bhfuil cúram ar an mbróicéir má léitear teachtaireachtaí nó nach léitear - is é sin freagracht an chliaint.

Níl na téarmaí "logáil" agus "pointeoir" le feiceáil i Doiciméadú Kafka. Úsáidtear na téarmaí aitheanta seo anseo chun cabhrú le tuiscint.

Tá an tsamhail seo difriúil go hiomlán ó ActiveMQ, áit a ndéantar teachtaireachtaí ó na scuainí go léir a stóráil sa logáil chéanna, agus marcálann an bróicéir na teachtaireachtaí a scriosadh tar éis iad a léamh.
Déanaimis tochailt beagán níos doimhne anois agus breathnóimid ar an logáil ábhair go mion.
Tá roinnt deighiltí i loga Kafka (Figiúr 3 1-). Ráthaíonn Kafka ordú dian i ngach críochdheighilt. Ciallaíonn sé seo go léifear teachtaireachtaí a scríobhtar chuig an gcríochdheighilt in ord áirithe san ord céanna. Cuirtear gach críochdheighilt i bhfeidhm mar chomhad logála rollach ina bhfuil fothacar (fothacar) de na teachtaireachtaí go léir a sheol táirgeoirí chuig an ábhar. Tá deighilt amháin san ábhar cruthaithe, de réir réamhshocraithe. Is é an smaoineamh ar dheighiltí an smaoineamh lárnach atá ag Kafka le haghaidh scálaithe cothrománach.

Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 3. Kafka
Fíor 3-1. Deighiltí Kafka

Nuair a sheolann léiritheoir teachtaireacht chuig topaic Kafka, cinneann sé cén deighilt chun an teachtaireacht a sheoladh chuici. Breathnóimid air seo níos mine níos déanaí.

Teachtaireachtaí a léamh

Bainistíonn an cliant atá ag iarraidh na teachtaireachtaí a léamh pointeoir ainmnithe ar a dtugtar grúpa tomhaltóirí, a dhíríonn ar fhritháireamh teachtaireachtaí sa chríochdheighilt. Seasamh incriminteach é fritháireamh a thosaíonn ag 0 ag tús críochdheighilte. Freagraíonn an grúpa tomhaltóirí seo, dá dtagraítear san API tríd an group_id sainithe ag an úsáideoir, dó tomhaltóir nó córas loighciúil amháin.

Léann an chuid is mó de na córais teachtaireachtaí sonraí ón gceann scríbe ag baint úsáide as iliomad cásanna agus snáitheanna chun teachtaireachtaí a phróiseáil go comhthreomhar. Mar sin, de ghnáth beidh go leor cásanna tomhaltóirí ag roinnt an ghrúpa tomhaltóirí céanna.

Is féidir fadhb na léitheoireachta a léiriú mar seo a leanas:

  • Tá deighiltí iolracha ag an topaic
  • Is féidir le grúpaí iomadúla tomhaltóirí ábhar a úsáid ag an am céanna
  • Is féidir le cásanna iolracha ar leith a bheith ag grúpa tomhaltóirí

Is fadhb neamh-fhánach mórán go leor í seo. Chun tuiscint a fháil ar an gcaoi a láimhseálann Kafka caidrimh idir grúpaí tomhaltóirí, cásanna tomhaltóirí, agus críochdheighilte, féachaimis ar shraith cásanna léitheoireachta atá níos casta de réir a chéile.

Tomhaltóirí agus grúpaí tomhaltóirí

Tógaimis mar phointe tosaigh topaic ina bhfuil deighilt amháin (Figiúr 3 2-).

Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 3. Kafka
Fíor 3-2. Léann tomhaltóirí ón deighilt

Nuair a nascann ásc tomhaltóra lena group_id féin leis an ábhar seo, sanntar deighilt léite agus fritháireamh dó sa deighilt sin. Is féidir suíomh an fhritháirimh seo a chumrú sa chliant mar phointeoir don suíomh is déanaí (an teachtaireacht is déanaí) nó don suíomh is luaithe (an teachtaireacht is sine). Iarrann an tomhaltóir ( pobalbhreith ) teachtaireachtaí ón ábhar , rud a fhágann gur féidir iad a léamh go seicheamhach ón loga .
Déantar suíomh an fhritháirimh a chur ar ais go Kafka go rialta agus a stóráil mar theachtaireachtaí in ábhar inmheánach fritháireamh _tomhaltóra. Ní scriostar teachtaireachtaí léite go fóill, murab ionann agus bróicéir rialta, agus is féidir leis an gcliant an fritháireamh a athchasadh chun teachtaireachtaí atá feicthe cheana féin a athphróiseáil.

Nuair a nascann an dara tomhaltóir loighciúil le group_id difriúil, bainistíonn sé an dara pointeoir atá neamhspleách ar an gcéad (Figiúr 3 3-). Mar sin, feidhmíonn topaic Kafka cosúil le scuaine ina bhfuil tomhaltóir amháin agus cosúil le gnáth-thopaic foils-síntiúis (fo-theach tábhairne) a síntiúsaíonn go leor tomhaltóirí dó, agus an buntáiste breise a bhaineann leis sin go stóráiltear gach teachtaireacht agus gur féidir í a phróiseáil go minic.

Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 3. Kafka
Fíor 3-3. Léann dhá thomhaltóir i ngrúpaí éagsúla tomhaltóirí ón deighilt chéanna

Tomhaltóirí i ngrúpa tomhaltóirí

Nuair a léann cás tomhaltóra amháin sonraí ó dheighilt, bíonn smacht iomlán aige ar an bpointeoir agus próiseálann sé teachtaireachtaí mar a thuairiscítear sa chuid roimhe seo.
Más rud é go raibh roinnt cásanna de thomhaltóirí ceangailte leis an ngrúpa_id céanna le topaic le deighilt amháin, ansin tabharfar smacht don phointeoir don chás a cheangail an uair dheireanach agus ón nóiméad sin ar aghaidh gheobhaidh sé gach teachtaireacht (Figiúr 3 4-).

Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 3. Kafka
Fíor 3-4. Léann beirt tomhaltóirí sa ghrúpa tomhaltóirí céanna ón deighilt chéanna

Is féidir smaoineamh ar an modh próiseála seo, ina bhfuil líon na gcásanna tomhaltóra níos mó ná líon na ndeighiltí, mar chineál tomhaltóir eisiach. D’fhéadfadh sé seo a bheith úsáideach má tá cnuasú “gníomhach-éighníomhach” (nó “te-te”) de do chásanna tomhaltóra ag teastáil uait, cé go bhfuil sé i bhfad níos tipiciúla go n-imreofar go leor tomhaltóirí go comhthreomhar ("gníomhach-ghníomhach" nó "te-te") ná tomhaltóirí, i fuireachas.

Is féidir leis an iompar dáileacháin teachtaireachta a bhfuil cur síos air thuas a bheith ina ábhar iontais i gcomparáid leis an gcaoi a n-iompraíonn gnáth-scuaine JMS. Sa mhúnla seo, déanfar teachtaireachtaí a sheoltar chuig an scuaine a dháileadh go cothrom idir an dá thomhaltóir.

Go minic, nuair a chruthaímid go leor cásanna tomhaltóirí, déanaimid é seo chun teachtaireachtaí a phróiseáil go comhthreomhar, nó chun luas na léitheoireachta a mhéadú, nó chun cobhsaíocht an phróisis léitheoireachta a mhéadú. Ós rud é nach féidir ach le cás tomhaltóra amháin sonraí ó dheighilt ag an am céanna a léamh, conas a dhéantar é seo in Kafka?

Bealach amháin chun é seo a dhéanamh ná sampla tomhaltóra aonair a úsáid chun na teachtaireachtaí go léir a léamh agus iad a chur ar aghaidh chuig an linn snáithe. Cé go méadaíonn an cur chuige seo tréchur próiseála, méadaíonn sé castacht loighic an tomhaltóra agus ní dhéanann sé aon rud chun stóinseacht an chórais léitheoireachta a mhéadú. Má théann cóip amháin den tomhaltóir síos mar gheall ar chliseadh cumhachta nó teagmhas comhchosúil, stopann an dealú.

Is é an bealach canónach chun an fhadhb seo a réiteach i Kafka ná bОtuilleadh landairí.

Partitioning

Is iad deighiltí an príomh-mheicníocht chun léamh comhthreomhar a dhéanamh agus chun topaic a scálú níos faide ná bandaleithead shampla bróicéir aonair. Chun é seo a thuiscint níos fearr, déanaimis machnamh ar chás ina bhfuil topaic ann le dhá dheighilt agus síntiúsóir amháin leis an ábhar seo (Figiúr 3 5-).

Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 3. Kafka
Fíor 3-5. Léann tomhaltóir amháin as deighiltí iolracha

Sa chás seo, tugtar smacht don tomhaltóir ar na leideanna a fhreagraíonn dá group_id sa dá dheighilt agus tosaíonn sé ag léamh teachtaireachtaí ón dá dheighilt.
Nuair a chuirtear tomhaltóir breise don ghrúpa_id céanna leis an ábhar seo, déanann Kafka ceann de na deighiltí a athdháileadh ón gcéad tomhaltóir go dtí an dara tomhaltóir. Ina dhiaidh sin, léifidh gach cás den tomhaltóir ó dheighilt amháin den topaic (Figiúr 3 6-).

Chun a chinntiú go ndéantar teachtaireachtaí a phróiseáil go comhthreomhar i 20 snáithe, beidh 20 deighilt ar a laghad ag teastáil uait. Má tá níos lú landairí ann, fágfar tú le tomhaltóirí nach bhfuil aon rud le hobair orthu, mar a thuairiscítear níos luaithe sa phlé ar thomhaltóirí eisiacha.

Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 3. Kafka
Fíor 3-6. Léann beirt tomhaltóirí sa ghrúpa tomhaltóirí céanna ó dheighiltí éagsúla

Laghdaíonn an scéim seo go mór castacht an bhróicéir Kafka i gcomparáid leis an dáileadh teachtaireachta a theastaíonn chun an scuaine JMS a choinneáil. Anseo ní gá duit a bheith buartha faoi na pointí seo a leanas:

  • Cén tomhaltóir ar cheart an chéad teachtaireacht eile a fháil, bunaithe ar leithdháileadh spideog bhabhta, toilleadh reatha na maoláin réamhghabhála, nó teachtaireachtaí roimhe seo (amhail grúpaí teachtaireachta JMS).
  • Cad iad na teachtaireachtaí a sheoltar chuig na tomhaltóirí agus cé acu ar cheart iad a athsheachadadh i gcás teipe.

Níl le déanamh ag bróicéir Kafka ach teachtaireachtaí a chur ar aghaidh go seicheamhach don tomhaltóir nuair a iarrann an tomhaltóir iad.

Mar sin féin, ní imíonn na ceanglais maidir le léamh profaí agus athsheoladh teachtaireachtaí teipthe ar aon dul - ní ón mbróicéir go dtí an cliant a théann an fhreagracht as iad. Ciallaíonn sé seo nach mór iad a chur san áireamh i do chód.

Teachtaireachtaí á seoladh

Tá sé de fhreagracht ar tháirgeoir na teachtaireachta sin cinneadh a dhéanamh maidir le cén deighilt chun teachtaireacht a sheoladh chuici. Chun an mheicníocht trína ndéantar é seo a thuiscint, ní mór dúinn ar dtús a mheas cad go díreach atá á sheoladh againn.

Cé go n-úsáidimid struchtúr teachtaireachta in JMS le meiteashonraí (ceanntásca agus airíonna) agus corp ina bhfuil an pálasta (pálasta), in Kafka is é an teachtaireacht péire "key-value". Seoltar pálasta na teachtaireachta mar luach. Is é an eochair, ar an láimh eile, a úsáidtear go príomha le haghaidh deighilt agus ní mór a bheith ann loighic gnó eochair ar leithchun teachtaireachtaí gaolmhara a chur sa deighilt chéanna.

I gCaibidil 2, phléamar an cás gealltóireachta ar líne inar gá imeachtaí gaolmhara a phróiseáil in ord ag tomhaltóir amháin:

  1. Tá an cuntas úsáideora cumraithe.
  2. Cuirtear airgead chun sochair an chuntais.
  3. Déantar geall a tharraingíonn airgead as an gcuntas.

Más teachtaireacht é gach imeacht a phostáiltear chuig topaic, is é ID an chuntais an eochair nádúrtha.
Nuair a sheoltar teachtaireacht ag baint úsáide as an Kafka Producer API, cuirtear ar aghaidh chuig feidhm dheighilt í a thugann, i bhfianaise na teachtaireachta agus staid reatha bhraisle Kafka, ID na críochdheighilte ar cheart an teachtaireacht a sheoladh chuici. Cuirtear an ghné seo i bhfeidhm i Java tríd an gcomhéadan Partitioner.

Breathnaíonn an comhéadan seo mar seo:

interface Partitioner {
    int partition(String topic,
        Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster);
}

Úsáideann cur i bhfeidhm Partitioner an algartam hashing ginearálta réamhshocraithe thar an eochair chun an deighilt a chinneadh, nó an robán cruinn mura sonraítear eochair. Oibríonn an luach réamhshocraithe seo go maith i bhformhór na gcásanna. Mar sin féin, sa todhchaí beidh tú ag iarraidh do chuid féin a scríobh.

Do straitéis deighilte féin a scríobh

Breathnaímid ar shampla inar mian leat meiteashonraí a sheoladh chomh maith le pálasta na teachtaireachta. Is é an pálasta atá inár sampla ná treoir chun éarlais a dhéanamh sa chuntas cluiche. Is éard is treoir ann ná rud ar mhaith linn a bheith cinnte nach ndéanfaí é a mhodhnú ar tharchur agus ba mhaith linn a bheith cinnte nach féidir ach le córas in aghaidh srutha iontaofa an treoir sin a thionscnamh. Sa chás seo, comhaontaíonn na córais seolta agus glactha ar úsáid sínithe chun an teachtaireacht a fhíordheimhniú.
I ngnáth-JMS, ní dhéanaimid ach airí "síniú teachtaireachta" a shainiú agus é a chur leis an teachtaireacht. Mar sin féin, ní sholáthraíonn Kafka meicníocht dúinn chun meiteashonraí a rith, gan ach eochair agus luach.

Ós rud é gur pálasta aistrithe bainc é an luach ar mian linn a shláine a chaomhnú, níl aon rogha againn ach an struchtúr sonraí atá le húsáid san eochair a shainiú. Ag glacadh leis go bhfuil gá againn le haitheantas cuntais le haghaidh deighilt, ós rud é go gcaithfear gach teachtaireacht a bhaineann le cuntas a phróiseáil in ord, tiocfaimid suas leis an struchtúr JSON seo a leanas:

{
  "signature": "541661622185851c248b41bf0cea7ad0",
  "accountId": "10007865234"
}

Toisc go n-athróidh luach an tsínithe ag brath ar an bpálasta, ní dhéanfaidh straitéis hashing réamhshocraithe an chomhéadain Partitioner teachtaireachtaí gaolmhara a ghrúpáil go hiontaofa. Mar sin, beidh orainn ár straitéis féin a scríobh a dhéanfaidh an eochair seo a pharsáil agus a roinnfidh luach accountId.

Áiríonn Kafka seiceálacha chun éilliú teachtaireachtaí sa siopa a bhrath agus tá sraith iomlán de ghnéithe slándála aige. Mar sin féin, uaireanta feictear ceanglais a bhaineann go sonrach leis an tionscal, amhail an ceann thuas.

Caithfidh straitéis deighilte an úsáideora a chinntiú go gcríochnóidh gach teachtaireacht ghaolmhar sa deighilt chéanna. Cé gur cosúil go bhfuil sé seo simplí, is féidir an riachtanas a chasta mar gheall ar an tábhacht a bhaineann le teachtaireachtaí gaolmhara a ordú agus cé chomh seasta is atá líon na ndeighiltí in ábhar.

Féadfaidh líon na ndeighiltí i dtopaic athrú le himeacht ama, mar is féidir iad a chur leis má théann trácht níos faide ná mar a bhíothas ag súil leis ar dtús. Mar sin, is féidir eochracha teachtaireachta a nascadh leis an deighilt ar seoladh chuici ar dtús iad, rud a thugann le tuiscint go bhfuil píosa stáit le roinnt idir cásanna an táirgeora.

Fachtóir eile le breithniú is ea dáileadh cothrom na dteachtaireachtaí trasna deighiltí. De ghnáth, ní dhéantar eochracha a dháileadh go cothrom thar theachtaireachtaí, agus ní ráthaíonn feidhmeanna hash dáileadh cothrom teachtaireachtaí do shraith bheag eochracha.
Tá sé tábhachtach a thabhairt faoi deara, áfach, go roghnaíonn tú teachtaireachtaí a roinnt, go mb’fhéidir go mbeadh gá an deighilteoir féin a athúsáid.

Smaoinigh ar an gceanglas sonraí a mhacasamhlú idir braislí Kafka i suíomhanna geografacha éagsúla. Chun na críche sin, tagann Kafka le huirlis líne ordaithe ar a dtugtar MirrorMaker, a úsáidtear chun teachtaireachtaí a léamh ó bhraisle amháin agus iad a aistriú go ceann eile.

Ní mór do MirrorMaker eochracha an ábhair athdhéanta a thuiscint chun ord coibhneasta a choinneáil idir teachtaireachtaí agus iad á macasamhlú idir braislí, mar go bhféadfadh sé nach mbeadh líon na ndeighiltí don ábhar sin mar a chéile in dhá bhraisle.

Is annamh a bhíonn straitéisí deighilte saincheaptha, mar go n-oibríonn hashing réamhshocraithe nó robin chruinn go maith i bhformhór na gcásanna. Mar sin féin, má theastaíonn ráthaíochtaí láidre ordú uait nó má theastaíonn uait meiteashonraí a bhaint as ualaí pála, ansin is é an deighilt rud ar cheart duit breathnú níos géire air.

Tagann buntáistí inscálaithe agus feidhmíochta Kafka as cuid de fhreagrachtaí an bhróicéir traidisiúnta a aistriú chuig an gcliant. Sa chás seo, déantar cinneadh teachtaireachtaí a d’fhéadfadh a bheith gaolmhar a scaipeadh ar roinnt tomhaltóirí a oibríonn go comhthreomhar.

Ní mór do bhróicéirí JMS déileáil le ceanglais den sórt sin freisin. Díol spéise é go n-éilíonn an mheicníocht chun teachtaireachtaí gaolmhara a sheoladh chuig an tomhaltóir céanna, arna chur chun feidhme trí Ghrúpaí Teachtaireachta JMS (athrú ar an straitéis um chothromú ualaigh ghreamaitheacha (SLB)) ar an seoltóir teachtaireachtaí a mharcáil mar a bhaineann leo. I gcás JMS, tá an bróicéir freagrach as an ngrúpa seo de theachtaireachtaí gaolmhara a sheoladh chuig tomhaltóir amháin as go leor, agus as úinéireacht an ghrúpa a aistriú má thiteann an tomhaltóir as.

Comhaontuithe Táirgeora

Ní hé an deighilt an t-aon rud atá le cur san áireamh agus teachtaireachtaí á seoladh. Breathnaímis ar mhodhanna seolta() an ranga Léiritheora san API Java:

Future < RecordMetadata > send(ProducerRecord < K, V > record);
Future < RecordMetadata > send(ProducerRecord < K, V > record, Callback callback);

Ba chóir a thabhairt faoi deara láithreach go bhfilleann an dá mhodh Todhchaí, rud a léiríonn nach ndéantar an oibríocht seolta láithreach. Is é an toradh atá air ná go scríobhtar teachtaireacht (ProducerRecord) chuig an maolán seolta do gach deighilt ghníomhach agus go seoltar chuig an mbróicéir é mar shnáithe cúlra i leabharlann cliant Kafka. Cé go ndéanann sé seo rudaí thar a bheith tapa, ciallaíonn sé gur féidir le hiarratas gan taithí teachtaireachtaí a chailleadh má chuirtear stop lena phróiseas.

Mar is gnáth, tá bealach ann chun an oibríocht seolta a dhéanamh níos iontaofa ar chostas feidhmíochta. Is féidir méid an mhaoláin seo a shocrú go 0, agus cuirfear iallach ar an snáithe iarratais seolta fanacht go dtí go mbeidh an t-aistriú teachtaireachta chuig an mbróicéir críochnaithe, mar seo a leanas:

RecordMetadata metadata = producer.send(record).get();

Tuilleadh faoi teachtaireachtaí a léamh

Tá castachtaí breise ag baint le léamh teachtaireachtaí nach mór a rá faoi. Murab ionann agus an JMS API, ar féidir éisteoir teachtaireachtaí a rith mar fhreagra ar theachtaireacht, tá an Tomhaltóirí Vótaíocht Kafka amháin. A ligean ar ghlacadh le breathnú níos dlúithe ar an modh vótaíocht()a úsáidtear chun na críche seo:

ConsumerRecords < K, V > poll(long timeout);

Is é luach aischuir an mhodha ná struchtúr coimeádáin ina bhfuil rudaí iolracha taifead tomhaltóra ó roinnt deighiltí féideartha. taifead tomhaltóra is réad coinneála é féin do phéire eochairluacha agus meiteashonraí gaolmhara, mar an deighilt óna ndíorthaítear é.

Mar a pléadh i gCaibidil 2, ní mór dúinn a choinneáil i gcuimhne cad a tharlaíonn do theachtaireachtaí tar éis iad a phróiseáil go rathúil nó nár éirigh leo, mar shampla, mura bhfuil an cliant in ann an teachtaireacht a phróiseáil nó má thagann ginmhilleadh uirthi. In JMS, láimhseáladh é seo trí mhodh admhála. Scriosfaidh an bróicéir an teachtaireacht a próiseáladh go rathúil, nó déanfaidh sé an teachtaireacht amh nó falsa a athsheachadadh (ag glacadh leis gur úsáideadh idirbhearta).
Oibríonn Kafka go difriúil. Ní scriostar teachtaireachtaí sa bhróicéir tar éis profaí a léamh, agus is é an cód profaí féin atá freagrach as cad a tharlaíonn má theipeann ort.

Mar atá ráite againn, tá baint ag an ngrúpa tomhaltóirí leis an bhfritháireamh sa logáil. Freagraíonn an suíomh logála a bhaineann leis an bhfritháireamh seo don chéad teachtaireacht eile a eiseofar mar fhreagra uirthi vótaíocht(). Tá an pointe ama nuair a mhéadaíonn an fritháireamh seo cinntitheach don léitheoireacht.

Ag filleadh ar an tsamhail léitheoireachta a pléadh níos luaithe, tá próiseáil teachtaireachta comhdhéanta de thrí chéim:

  1. Íosluchtaigh teachtaireacht le haghaidh léamh.
  2. Próiseáil an teachtaireacht.
  3. Deimhnigh an teachtaireacht.

Tagann an tomhaltóir Kafka le rogha cumraíochta cumas.uathoibríoch. Is socrú réamhshocraithe é seo a úsáidtear go minic, mar atá coitianta le socruithe ina bhfuil an focal "uathoibríoch".

Roimh Kafka 0.10, seolfadh cliant a úsáideann an rogha seo fritháireamh na teachtaireachta deireanaí a léadh an chéad ghlao eile vótaíocht() tar éis próiseála. Chiallaigh sé seo go bhféadfaí teachtaireachtaí ar bith a fuarthas cheana a athphróiseáil dá mbeadh próiseáil déanta ag an gcliant cheana ach gur scriosadh gan choinne iad roimh ghlaoch vótaíocht(). Ós rud é nach gcoimeádann an bróicéir aon stát faoi cé mhéad uair a léitear teachtaireacht, ní bheidh a fhios ag an gcéad tomhaltóir eile a gheobhaidh an teachtaireacht sin gur tharla rud éigin dona. Iompar bréige a bhí san iompar seo. Ní dhearnadh an fhritháireamh ach amháin má phróiseáiltear an teachtaireacht go rathúil, ach dá dtiocfadh deireadh leis an gcliant, seolfadh an bróicéir an teachtaireacht chéanna arís chuig cliant eile. Bhí an t-iompar seo comhsheasmhach leis an ráthaíocht seachadta teachtaireachta"uair amháin ar a laghad".

In Kafka 0.10, athraíodh an cód cliant ionas go spreagtar an tiomantas go tréimhsiúil ag leabharlann an chliaint, mar a bhí cumraithe eatramh.uathoibríoch. Tá an t-iompar seo áit éigin idir na modhanna JMS AUTO_ACKNOWLEDGE agus DUPS_OK_ACKNOWLEDGE. Agus úsáid á baint as autocommit, d’fhéadfaí teachtaireachtaí a ghealladh is cuma an ndearnadh iad a phróiseáil i ndáiríre - d’fhéadfadh sé seo tarlú i gcás tomhaltóir mall. Dá gcuirfí deireadh le tomhaltóir, gheofaí teachtaireachtaí ón gcéad tomhaltóir eile, ag tosú ag an suíomh tiomanta, rud a d’fhéadfadh teachtaireacht a bheith caillte dá bharr. Sa chás seo, níor chaill Kafka na teachtaireachtaí, níor phróiseáil an cód léitheoireachta iad.

Tá an gealltanas céanna ag an mód seo agus atá i leagan 0.9: is féidir teachtaireachtaí a phróiseáil, ach má theipeann air, ní fhéadfaidh an fritháireamh a bheith geallta, rud a d'fhéadfadh a bheith ina chúis le seachadadh faoi dhó. Dá mhéad teachtaireachtaí a gheobhaidh tú agus tú á rith vótaíocht(), is mó an fhadhb seo.

Mar a pléadh in “Léamh Teachtaireachtaí ó scuaine” ar leathanach 21, níl a leithéid de rud ann agus seachadadh aonuaire ar theachtaireacht i gcóras teachtaireachtaí nuair a chuirtear modhanna teipe san áireamh.

I Kafka, tá dhá bhealach ann chun fritháireamh (fritháireamh a dhéanamh): go huathoibríoch agus de láimh. Sa dá chás, is féidir teachtaireachtaí a phróiseáil go minic má próiseáladh an teachtaireacht ach gur theip uirthi roimh an tiomantas. Is féidir leat a roghnú freisin gan an teachtaireacht a phróiseáil ar chor ar bith má tharla an gealltanas sa chúlra agus gur cuireadh do chód i gcrích sula bhféadfaí é a phróiseáil (b'fhéidir i Kafka 0.9 agus níos luaithe).

Is féidir leat an próiseas gealltanas fritháirimh láimhe a rialú in API tomhaltóra Kafka tríd an bparaiméadar a shocrú cumas.uathoibríoch chun ceann de na modhanna seo a leanas a ghlaoch go bréagach agus go sainráite:

void commitSync();
void commitAsync();

Más mian leat an teachtaireacht a phróiseáil "uair amháin ar a laghad", ní mór duit an fritháireamh a dhéanamh de láimh gealltanasSync()tríd an ordú seo a fhorghníomhú díreach tar éis na teachtaireachtaí a phróiseáil.

Ní cheadaíonn na modhanna seo teachtaireachtaí a admháil sula ndéantar iad a phróiseáil, ach ní dhéanann siad aon rud chun deireadh a chur le moilleanna próiseála féideartha agus iad ag tabhairt an chuma ar a bheith idirbheartaíochta. Níl aon idirbhearta i Kafka. Níl an cumas ag an gcliant na rudaí seo a leanas a dhéanamh:

  • Seol teachtaireacht bhréige ar ais go huathoibríoch. Ní mór do thomhaltóirí iad féin déileáil le heisceachtaí a eascraíonn as ualaí pála fadhbacha agus bristeacha inneall, mar ní féidir leo brath ar an mbróicéir chun teachtaireachtaí a sheachadadh arís.
  • Seol teachtaireachtaí chuig ábhair iolracha in oibríocht adamhach amháin. Mar a fheicfimid go luath, is féidir le rialú ar ábhair agus landairí éagsúla cónaí ar mheaisíní éagsúla i mbraisle Kafka nach ndéanann idirbhearta a chomhordú nuair a sheoltar iad. Agus an méid seo á scríobh, tá roinnt oibre déanta chun é seo a dhéanamh leis an KIP-98.
  • Comhcheangail teachtaireacht amháin ó thopaic amháin a léamh agus teachtaireacht eile a sheoladh chuig topaic eile. Arís, braitheann ailtireacht Kafka ar go leor meaisíní neamhspleácha ag rith mar aon bhus agus ní dhéantar aon iarracht é seo a cheilt. Mar shampla, níl aon chomhpháirteanna API ann a ligfeadh duit nasc a dhéanamh tomhaltóir и Léiritheoir in idirbheart. I JMS, cuireann an réad é seo ar fáil seisiúnas a chruthaítear Léiritheoirí Teachtaireacht и Teachtaireacht Tomhaltóirí.

Murar féidir linn brath ar idirbhearta, conas is féidir linn séimeantaic a sholáthar níos gaire dóibh siúd a sholáthraíonn córais teachtaireachtaí traidisiúnta?

Má tá an deis ann go dtiocfaidh méadú ar fhritháireamh an tomhaltóra sula bpróiseálfar an teachtaireacht, mar shampla le linn timpiste tomhaltóra, ansin níl aon bhealach ag an tomhaltóir ar theip ar a ghrúpa tomhaltóirí an teachtaireacht nuair a shanntar críochdheighilt dó. Mar sin straitéis amháin is ea an fritháireamh a athchasadh go dtí an seasamh roimhe seo. Soláthraíonn API tomhaltóra Kafka na modhanna seo a leanas chuige seo:

void seek(TopicPartition partition, long offset);
void seekToBeginning(Collection < TopicPartition > partitions);

Modh lorg () is féidir é a úsáid le modh
offsetsForTimes(Léarscáil stampa amaToSearch) a athchasadh go stát ag pointe áirithe san am atá thart.

Go hintuigthe, ciallaíonn úsáid an chur chuige seo gur beag seans go léifear agus go bpróiseálfar arís roinnt teachtaireachtaí a próiseáladh roimhe seo. Chun é seo a sheachaint, is féidir linn léitheoireacht mhíthreorach a úsáid, mar a thuairiscítear i gCaibidil 4, chun súil a choinneáil ar theachtaireachtaí a breathnaíodh orthu roimhe seo agus chun deireadh a chur le dúbailt.

Mar mhalairt air sin, is féidir do chód tomhaltóra a choinneáil simplí, chomh fada agus a bhíonn cailliúint teachtaireachtaí nó dúbailt inghlactha. Nuair a dhéanaimid breithniú ar chásanna úsáide as a n-úsáidtear Kafka go coitianta, mar imeachtaí logála a láimhseáil, méadracht, rianú cliceáil, etc., tuigimid nach dócha go mbeidh tionchar suntasach ag caillteanas teachtaireachtaí aonair ar na hiarratais máguaird. I gcásanna den sórt sin, tá na luachanna réamhshocraithe breá inghlactha. Ar an láimh eile, más gá d’iarratas íocaíochtaí a sheoladh, ní mór duit aire a thabhairt do gach teachtaireacht aonair. Tagann sé ar fad síos go comhthéacs.

Léiríonn tuairimí pearsanta go dtagann laghdú ar luach gach teachtaireachta aonair de réir mar a mhéadaíonn déine na dteachtaireachtaí. Is gnách go mbíonn teachtaireachtaí móra luachmhar nuair a bhreathnaítear orthu i bhfoirm chomhiomlán.

Infhaighteacht Ard

Tá cur chuige Kafka maidir le hinfhaighteacht ard an-difriúil ó chur chuige ActiveMQ. Tá Kafka deartha timpeall ar bhraislí scála amach ina bhfaigheann agus a scaipeann gach bróicéir teachtaireachtaí ag an am céanna.

Is éard atá i mbraisle Kafka ná cásanna bróicéirí iolracha a ritheann ar fhreastalaithe éagsúla. Ceapadh Kafka le reáchtáil ar ghnáth-chrua-earraí neamhspleácha, áit a bhfuil a stóráil tiomnaithe féin ag gach nód. Ní mholtar úsáid a bhaint as stóras ceangailte leis an líonra (SAN) mar is féidir le nóid iolracha a bheith san iomaíocht le haghaidh ama.Ыe eatraimh stórála agus cruthaíonn siad coinbhleachtaí.

Tá Kafka i gcónaí ar córas. Ní dhúnann go leor úsáideoirí móra Kafka a gcuid braislí riamh agus nuashonraítear na bogearraí i gcónaí trí atosú seicheamhach. Baintear é seo amach trí chomhoiriúnacht a ráthú leis an leagan roimhe seo le haghaidh teachtaireachtaí agus idirghníomhaíochtaí idir bróicéirí.

Bróicéirí atá nasctha le braisle freastalaí Zú Coimeádaí, a fheidhmíonn mar chlár sonraí cumraíochta agus a úsáidtear chun róil gach bróicéir a chomhordú. Is córas dáilte é ZooKeeper féin a sholáthraíonn ard-infhaighteacht trí fhaisnéis a mhacasamhlú trí bhunú córam.

Sa chás bunúsach, cruthaítear topaic i mbraisle Kafka leis na hairíonna seo a leanas:

  • Líon na ndeighiltí. Mar a pléadh níos luaithe, braitheann an luach cruinn a úsáidtear anseo ar an leibhéal léitheoireachta comhthreomhar atá ag teastáil.
  • Cinneann an fachtóir macasamhlaithe (fachtóir) cé mhéad cás bróicéireachta sa bhraisle ar cheart logaí a bheith iontu don dheighilt seo.

Ag baint úsáide as ZooKeepers le haghaidh comhordú, déanann Kafka iarracht deighiltí nua a dháileadh go cothrom i measc na bróicéirí sa bhraisle. Déantar é seo trí chás amháin a fheidhmíonn mar Rialaitheoir.

Ag am rite le haghaidh gach críochdheighilte Rialaitheoir róil a shannadh do bhróicéir ceannaire (ceannaire, máistir, láithreoir) agus leanúna (leanúna, sclábhaithe, subordinates). Tá an bróicéir, ag gníomhú mar cheannaire don chríochdheighilt seo, freagrach as na teachtaireachtaí go léir a sheolann na táirgeoirí chuige a fháil agus na teachtaireachtaí a dháileadh ar na tomhaltóirí. Nuair a sheoltar teachtaireachtaí chuig críochdheighilt topaicí, déantar iad a mhacasamhlú chuig gach nód bróicéir a ghníomhaíonn mar leanúna don chríochdheighilt sin. Glaoitear gach nód ina bhfuil logaí le haghaidh críochdheighilte macasamhail. Is féidir le bróicéir gníomhú mar cheannaire ar roinnt críochdheighilte agus mar leantóir do dhaoine eile.

Glaoitear leantóir ina bhfuil gach teachtaireacht atá i seilbh an cheannaire macasamhail sioncronaithe (macasamhail atá i staid shioncronaithe, macasamhail in-sync). Má théann bróicéir atá ag gníomhú mar cheannaire ar dheighilt síos, féadfaidh bróicéir ar bith atá cothrom le dáta nó atá sioncronaithe don chríochdheighilt sin ról an cheannaire a ghlacadh. Is dearadh thar a bheith inbhuanaithe é.

Is cuid de chumraíocht an táirgeora an paraiméadar aiceanna, a chinneann cé mhéad macasamhail a chaithfidh a admháil (admháil) go bhfuarthas teachtaireacht sula leanann an snáithe iarratais ar aghaidh ag seoladh: 0, 1, nó gach ceann díobh. Má shocraítear é gach, ansin nuair a fhaightear teachtaireacht, seolfaidh an ceannaire deimhniú ar ais chuig an léiritheoir chomh luath agus a fhaigheann sé deimhnithe (admhálacha) den taifead ó roinnt leideanna (lena n-áirítear é féin) arna sainiú ag an socrú topaicí macasamhla.min.insync (réamhshocraithe 1). Murar féidir an teachtaireacht a mhacasamhlú go rathúil, caithfidh an léiritheoir eisceacht feidhmchláir (NotEnoughReplicasNotEnoughReplicasAfterAppend).

Cruthaíonn cumraíocht tipiciúil topaic le fachtóir macasamhlaithe de 3 (1 cheannaire, 2 leantóir in aghaidh na críochdheighilte) agus an paraiméadar macasamhla.min.insync is set to 2. Sa chás seo, ligfidh an bhraisle do cheann de na bróicéirí a bhainistíonn an deighilt ábhair dul síos gan cur isteach ar iarratais na gcliant.

Tugann sé seo ar ais sinn go dtí an comhbhabhtáil ar eolas cheana féin idir feidhmíocht agus iontaofacht. Tarlaíonn macasamhlú ar chostas am feithimh bhreise le haghaidh deimhnithe (admhálacha) ó leantóirí. Cé go bhfuil an fheidhmíocht chéanna le dhá cheann, toisc go ritheann sé go comhthreomhar, macasamhlú go trí nód ar a laghad (gan aird a thabhairt ar an méadú ar úsáid bandaleithead líonra).

Trí úsáid a bhaint as an scéim macasamhlaithe seo, seachnaíonn Kafka go cliste an gá atá le gach teachtaireacht a scríobh go fisiciúil ar diosca leis an oibríocht sioncronú(). Scríobhfar gach teachtaireacht a sheolann an táirgeoir chuig an loga críochdheighilte, ach mar a pléadh i gCaibidil 2, déantar scríobh chuig comhad ar dtús i maolán an chórais oibriúcháin. Má dhéantar an teachtaireacht seo a mhacasamhlú go háis eile Kafka agus í ina chuimhne, ní chiallaíonn cailliúint an cheannaire gur cailleadh an teachtaireacht féin - is féidir macasamhail sioncronaithe a ghlacadh ar láimh í.
Diúltú an oibríocht a dhéanamh sioncronú() Ciallaíonn sé seo gur féidir le Kafka teachtaireachtaí a fháil chomh tapa agus is féidir leis iad a scríobh chun cuimhne. Os a choinne sin, dá fhaide is féidir leat cuimhne a shruthlú go diosca a sheachaint, is amhlaidh is fearr. Ar an gcúis seo, níl sé neamhchoitianta do bhróicéirí Kafka 64 GB nó níos mó de chuimhne a leithdháileadh. Ciallaíonn an úsáid chuimhne seo gur féidir le sampla Kafka amháin rith go héasca ag luas na mílte uair níos tapúla ná bróicéir teachtaireachtaí traidisiúnta.

Is féidir Kafka a chumrú freisin chun an oibríocht a chur i bhfeidhm sioncronú() chuig pacáistí teachtaireachta. Ós rud é go bhfuil gach rud i Kafka dírithe ar phacáiste, oibríonn sé go maith go leor i gcásanna úsáide go leor agus is uirlis úsáideach é d'úsáideoirí a dteastaíonn ráthaíochtaí an-láidir orthu. Tagann cuid mhór d’fheidhmíocht íon Kafka ó na teachtaireachtaí a sheoltar chuig an mbróicéir mar phaicéid agus go léitear na teachtaireachtaí seo ón mbróicéir i mbloic sheicheamhacha ag baint úsáide as náid cóip oibríochtaí (oibríochtaí nach ndéantar an tasc chun sonraí a chóipeáil ó limistéar cuimhne amháin go ceann eile lena linn). Is gnóthachan feidhmíochta agus acmhainní mór é an dara ceann agus ní féidir é a úsáid ach amháin trí úsáid a bhaint as struchtúr sonraí logála bunúsacha a shainíonn an scéim deighilte.

Is féidir feidhmíocht i bhfad níos fearr a dhéanamh i mbraisle Kafka ná le bróicéir amháin Kafka, mar is féidir le deighiltí topaicí scála amach thar go leor meaisíní ar leith.

Torthaí

Sa chaibidil seo, d’fhéachamar ar conas a athshamhlaíonn ailtireacht Kafka an caidreamh idir cliaint agus bróicéirí chun píblíne teachtaireachtaí thar a bheith láidir a sholáthar, le tréchur i bhfad níos mó ná mar a bhíonn ag gnáthbhróicéir teachtaireachtaí. Phléamar an fheidhmiúlacht a úsáideann sé chun é seo a bhaint amach agus d'fhéachamar go hachomair ar ailtireacht na bhfeidhmchlár a sholáthraíonn an fheidhmiúlacht seo. Sa chéad chaibidil eile, féachfaimid ar fhadhbanna coitianta a theastaíonn ó fheidhmchláir atá bunaithe ar theachtaireachtaí chun straitéisí a réiteach chun déileáil leo. Cuirfimid deireadh leis an gcaibidil trí léiriú a thabhairt ar an gcaoi le labhairt faoi theicneolaíochtaí teachtaireachtaí go ginearálta ionas gur féidir leat a n-oiriúnacht do do chásanna úsáide a mheas.

Cuid aistrithe roimhe seo: Bróicéirí teachtaireachta a thuiscint. Ag foghlaim mheicnic na dteachtaireachtaí le ActiveMQ agus Kafka. Caibidil 1

Aistriúchán déanta: teilea.gg/lár_java

Le leanúint ...

Ní féidir ach le húsáideoirí cláraithe páirt a ghlacadh sa suirbhé. Sínigh isteach, le do thoil.

An úsáidtear Kafka i d’eagraíocht?

  • Нет

  • Úsáidte roimhe seo, ní anois

  • Tá sé beartaithe againn úsáid a bhaint as

Vótáil 38 úsáideoir. Staon 8 úsáideoir.

Foinse: will.com

Add a comment