Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 3. Kafka

Nga n'ihu nke ntụgharị asụsụ nke obere akwụkwọ:
Ịghọta Ndị Broka Ozi
odee: Jakub Korab, onye nkwusa: O'Reilly Media, Inc., ụbọchị e bipụtara: June 2017, ISBN: 9781492049296.

Akụkụ atụgharịrị na mbụ: Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 1 Okwu Mmalite

ISI NKE 3

Kafka

Kafka bụ LinkedIn mepụtara kafka iji nweta gburugburu ụfọdụ adịghị ike nke ndị na-ere ahịa ozi ọdịnala ma zere inwe ọtụtụ ndị na-ere ahịa ozi maka mkparịta ụka dị iche iche, nke a kọwara n'akwụkwọ a n'okpuru "Scaling up and out" na ibe 28. Jiri okwu LinkedIn dabere n'ụzọ dị ukwuu na otu ụzọ ingestion nke ukwuu nnukwu ichekwa data, dị ka ibe clicks na ohere ndekọ, mgbe ka na-ekwe na data na-eji ọtụtụ usoro na-enweghị mmetụta na arụpụtaghị nke ndị na-emepụta ma ọ bụ ndị ọzọ na-eri. N'ezie, ihe kpatara Kafka dị bụ iji nweta ụdị nhazi ozi nke Universal Data Pipeline na-akọwa.

Nyere ihe mgbaru ọsọ a kacha, ihe ndị ọzọ a chọrọ n'ezie bilitere. Kafka kwesịrị:

  • Dị nnọọ ngwa ngwa
  • Nyekwuo bandwidth mgbe ị na-arụ ọrụ na ozi
  • Na-akwado ndị mbipụta akwụkwọ-ndenye aha na ụdị ntụaka-na-point
  • Ejila nwayọọ na-agbakwunye ndị ahịa. Dịka ọmụmaatụ, arụmọrụ nke ma kwụ n'ahịrị na isiokwu dị na ActiveMQ na-eweda ala ka ọnụ ọgụgụ ndị na-azụ ahịa na ebe aga na-abawanye.
  • Bụrụ nha nha n'usoro; Ọ bụrụ na otu onye na-ere ahịa na-aga n'ihu na ozi nwere ike ime ya naanị na oke diski ọsọ, mgbe ahụ ọ bụ ihe ezi uche dị na ya ịgafe otu onye na-ere ahịa iji mụbaa arụmọrụ.
  • Machie ohere ịchekwa na weghachite ozi

Iji nweta ihe a niile, Kafka nakweere ihe owuwu nke megharịrị ọrụ na ọrụ nke ndị ahịa na ndị na-ere ahịa ozi. Ụdị JMS na-adabere na onye na-ere ahịa, ebe onye na-ere ahịa na-ahụ maka ikesa ozi na ndị ahịa na-enwe nchegbu maka izipu na ịnata ozi. Kafka, n'aka nke ọzọ, bụ onye na-azụ ahịa, onye ahịa na-ewere ọtụtụ atụmatụ nke onye na-ere ahịa omenala, dị ka nkesa ziri ezi nke ozi ndị dị mkpa nye ndị na-azụ ahịa, maka mgbanwe maka onye na-ere ahịa ngwa ngwa na ngwa ngwa. Maka ndị ejirila sistemụ ozi ọdịnala rụọ ọrụ, iso Kafka na-arụ ọrụ chọrọ mgbanwe dị mkpa nke uche.
Ntuziaka injinia a emeela ka e mepụta akụrụngwa izi ozi nwere ike ịba ụba site n'ọtụtụ iwu dị ukwuu ma e jiri ya tụnyere onye na-ere ahịa. Dị ka anyị ga-ahụ, usoro a na-abịa na ahia ahia, nke pụtara na Kafka adịghị mma maka ụfọdụ ụdị ọrụ na arụnyere software.

Model ejikọrọ ọnụ

Iji mezuo ihe ndị a chọrọ ka akọwara n'elu, Kafka ejikọtala bipụta-ndebanye aha na ozi n'isi ruo n'isi n'okpuru otu ụdị ebe - isiokwu. Nke a na-agbagwoju ndị mmadụ na-arụkọ ọrụ na sistemụ ozi, ebe okwu "isiokwu" na-ezo aka na usoro mgbasa ozi nke (site na isiokwu) ịgụ na-adịghị adịte aka. Ekwesịrị iwere isiokwu Kafka ka ụdị njedebe ngwakọ, dịka akọwara na mmalite nke akwụkwọ a.

Maka nke fọdụrụ n'isiakwụkwọ a, ọ gwụla ma anyị kwupụtaghị nke ọma, okwu ahụ bụ "isiokwu" ga-ezo aka na isiokwu Kafka.

Iji ghọta nke ọma otú isiokwu si akpa àgwà na ihe nkwa ha na-enye, anyị kwesịrị ibu ụzọ leba anya ka esi eme ya na Kafka.
Isiokwu ọ bụla dị na Kafka nwere ndekọ nke ya.
Ndị na-emepụta ihe na-ezipụ ozi na Kafka na-edegara akwụkwọ ndekọ a, ndị na-azụ ahịa na-ejikwa ihe nrịbama na-aga n'ihu mgbe niile. Oge ụfọdụ, Kafka na-ehichapụ akụkụ ndị kacha ochie nke ndekọ ahụ, ma agụọla ozi dị n'akụkụ ndị ahụ ma ọ bụ na agụghị ya. Akụkụ bụ isi nke imewe Kafka bụ na onye na-ere ahịa anaghị eche ma ọ bụrụ na agụghị ozi ma ọ bụ na ọ bụghị - nke ahụ bụ ọrụ onye ahịa.

Okwu "log" na "pointer" adịghị apụta na ya Akwụkwọ Kafka. A na-eji okwu ndị a ama ama ebe a iji nyere nghọta aka.

Ihe nlereanya a dị nnọọ iche na ActiveMQ, ebe a na-echekwa ozi sitere na kwụ n'ahịrị n'otu ndekọ ahụ, onye na-ere ahịa na-edekwa ozi dị ka ehichapụ mgbe agụchara ha.
Ka anyị gwuo ntakịrị ka anyị lebakwuo anya na ndekọ isiokwu.
Akwụkwọ ndekọ Kafka nwere ọtụtụ akụkụ (Nyocha 3-1). Kafka na-ekwe nkwa iwu siri ike na nkebi ọ bụla. Nke a pụtara na a ga-agụ ozi ndị edere na nkebi n'usoro ụfọdụ n'otu usoro. A na-emejuputa nkebi ọ bụla dị ka faịlụ ndekọ na-atụgharị nke nwere a subset (subset) ozi niile ezigara na isiokwu nke ndị na-emepụta ya. Isiokwu emepụtara nwere, na ndabara, otu akụkụ. Echiche nke nkewa bụ echiche etiti nke Kafka maka nchacha kwụ ọtọ.

Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 3. Kafka
Ọgụgụ 3-1. Nkebi nke Kafka

Mgbe onye nrụpụta na-eziga ozi na isiokwu Kafka, ọ na-ekpebi akụkụ nke iziga ozi ahụ. Anyị ga-eleba anya na nke a nke ọma ma emechaa.

Ozi na-agụ

Onye ahịa chọrọ ịgụ ozi ahụ na-ejikwa pointer akpọrọ aha ya ndị na-azụ ahịa, nke na-arụtụ aka nkwụsị ozi na nkebi. Nkwụghachi bụ ọnọdụ agbakwunyere na-amalite na 0 na mmalite nkebi. Otu ndị na-azụ ahịa, nke e zoro aka na ya na API site na onye ọrụ akọwapụtara group_id, dabara na otu ezi uche n'ji ma ọ bụ usoro.

Ọtụtụ usoro izi ozi na-agụ data sitere na ebe a na-aga na-eji ọtụtụ oge na eri iji hazie ozi n'otu oge. Ya mere, a ga-enwekarị ọtụtụ ndị ahịa na-ekerịta otu ndị ahịa.

Enwere ike ịnọchite anya nsogbu ịgụ akwụkwọ dịka ndị a:

  • Isiokwu nwere ọtụtụ akụkụ
  • Otutu otu nke ndị na-azụ ahịa nwere ike iji isiokwu n'otu oge
  • Otu ndị na-azụ ahịa nwere ike ịnwe ọtụtụ ihe atụ dị iche iche

Nke a bụ nsogbu na-adịghị mkpa ọtụtụ-na-ọtụtụ. Iji ghọta ka Kafka si ejikwa mmekọrịta dị n'etiti otu ndị na-azụ ahịa, oge ndị ahịa na nkewa, ka anyị leba anya n'ụdị ọnọdụ ọgụgụ na-agbagwoju anya nke ukwuu.

Ndị ahịa na otu ndị ahịa

Ka anyị were dị ka mmalite isiokwu nwere otu nkebi (Nyocha 3-2).

Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 3. Kafka
Ọgụgụ 3-2. Onye ahịa na-agụ site na nkebi

Mgbe ihe atụ ndị ahịa jikọtara ya na group_id nke ya na isiokwu a, a na-ekenye ya nkebi ọgụgụ yana nkwụsị na nkebi ahụ. A na-ahazi ọnọdụ nke nkwụghachi a na onye ahịa ka ọ bụrụ ihe ntụnye na ọnọdụ kachasị ọhụrụ (ozi kachasị ọhụrụ) ma ọ bụ ọnọdụ mbụ (ozi kacha ochie). Ndị na-azụ ahịa na-arịọ (ntuli aka) ozi sitere na isiokwu ahụ, nke na-eme ka a gụọ ha n'usoro site na ndekọ.
A na-etinye ọnọdụ nkwụghachi azụ na Kafka mgbe niile ma chekwaa ya dị ka ozi na isiokwu dị n'ime _consumer_offsets. A ka ehichapụghị ozi agụ, n'adịghị ka onye na-ere ahịa oge niile, onye ahịa nwere ike weghachi ya ka ọ hazie ozi elelela anya.

Mgbe onye ahịa ezi uche dị na ya jikọọ site na iji group_id dị iche, ọ na-ejikwa nrịbama nke abụọ na-anọghị na nke mbụ (Nyocha 3-3). Ya mere, isiokwu Kafka na-eme dị ka kwụ n'ahịrị ebe e nwere otu onye na-azụ ahịa na dị ka isiokwu na-ebipụta-ịdenye aha (pub-sub) nke ọtụtụ ndị na-azụ ahịa na-edebanye aha, na-enwekwu uru na echekwara ozi niile ma nwee ike ịhazi ya ọtụtụ ugboro.

Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 3. Kafka
Ọgụgụ 3-3. Ndị ahịa abụọ nọ n'otu ndị ahịa dị iche iche na-agụ site na otu nkebi

Ndị ahịa n'otu ndị ahịa

Mgbe otu onye na-azụ ahịa na-agụ data sitere na nkebi, ọ na-enwe njikwa nrụnye na nhazi ozi dịka akọwara na ngalaba gara aga.
Ọ bụrụ na ejikọtara ọtụtụ oge nke ndị na-azụ ahịa na otu group_id na isiokwu nwere otu nkebi, mgbe ahụ, a ga-enye ihe atụ jikọtara nke ikpeazụ na-achịkwa pointer na site n'oge ahụ gaa n'ihu ga-enweta ozi niile.Nyocha 3-4).

Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 3. Kafka
Ọgụgụ 3-4. Ndị ahịa abụọ nọ n'otu ndị na-azụ ahịa na-agụ site na otu nkebi

Ụdị nhazi a, nke ọnụ ọgụgụ nke ndị na-azụ ahịa karịrị ọnụ ọgụgụ nke nkebi, nwere ike iche dị ka ụdị nke ndị na-azụ ahịa pụrụ iche. Nke a nwere ike ịba uru ma ọ bụrụ na ịchọrọ nchịkọta "active-passive" (ma ọ bụ "ọkụ na-ekpo ọkụ") nke ndị na-azụ ahịa gị, n'agbanyeghị na ị na-agba ọsọ ọtụtụ ndị na-azụ ahịa n'otu oge ("na-arụsi ọrụ ike" ma ọ bụ "ọkụ ọkụ") bụ ihe a na-ahụkarị karịa. Na njikere.

Àgwà nkesa ozi a akọwara n'elu nwere ike ịtụ n'anya ma e jiri ya tụnyere ka kwụ n'ahịrị JMS na-akpa àgwà. N'ụdị a, a ga-ekesa ozi ezigara na kwụ n'ahịrị n'etiti ndị ahịa abụọ ahụ.

Ọtụtụ mgbe, mgbe anyị na-emepụta ọtụtụ ihe atụ nke ndị na-azụ ahịa, anyị na-eme nke a iji hazie ozi n'otu n'otu, ma ọ bụ iji mee ka ọsọ nke ịgụ ihe dịkwuo elu, ma ọ bụ iji mee ka usoro ọgụgụ ahụ kwụsie ike. Ebe ọ bụ na naanị otu onye na-azụ ahịa nwere ike ịgụ data sitere na nkebi n'otu oge, kedu ka esi enweta nke a na Kafka?

Otu ụzọ isi mee nke a bụ iji otu onye na-azụ ahịa gụọ ozi niile wee bufee ya na ọdọ mmiri eri. Ọ bụ ezie na usoro a na-abawanye mmepụta nhazi, ọ na-eme ka mgbagwoju anya nke ndị na-azụ ahịa na-eme ka ọ ghara ime ka ọ dịkwuo ike nke usoro ọgụgụ. Ọ bụrụ na otu nnomi nke ndị na-azụ ahịa agbada n'ihi ọdịda ike ma ọ bụ ihe omume yiri ya, mgbe ahụ mwepu ahụ kwụsịrị.

The canonical ụzọ dozie nsogbu a na Kafka bụ iji bОọzọ partitions.

Nkewa

Nkebi bụ usoro bụ isi maka ịmekọrịta ọgụgụ na ịkọwa isiokwu karịrị bandwit nke otu onye na-ere ahịa. Iji ghọta nke ọma nke a, ka anyị tụlee ọnọdụ ebe enwere isiokwu nwere akụkụ abụọ na otu onye na-azụ ahịa na-edebanye aha na isiokwu a (Nyocha 3-5).

Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 3. Kafka
Ọgụgụ 3-5. Otu onye ahịa na-agụ site n'ọtụtụ akụkụ

N'ọnọdụ a, a na-enye onye ahịa ikike ịchịkwa ihe nrịbama kwekọrọ na group_id ya na akụkụ abụọ ahụ wee malite ịgụ ozi sitere na akụkụ abụọ ahụ.
Mgbe agbakwunyere onye na-azụ ahịa maka otu group_id na isiokwu a, Kafka na-ewepụta otu n'ime akụkụ nke mbụ gaa na nke abụọ. Mgbe nke ahụ gasịrị, ihe atụ ọ bụla nke onye na-azụ ahịa ga-agụ site na otu akụkụ nke isiokwu (Nyocha 3-6).

Iji hụ na a na-ahazi ozi n'otu n'otu na eri iri abụọ, ị ga-achọ opekata mpe nkebi iri abụọ. Ọ bụrụ na enwere akụkụ ole na ole, ị ga-ahapụ ndị na-azụ ahịa na-enweghị ihe ọ bụla ị ga-arụ ọrụ, dị ka akọwara na mbụ na mkparịta ụka nke ndị na-azụ ahịa pụrụ iche.

Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 3. Kafka
Ọgụgụ 3-6. Ndị ahịa abụọ nọ n'otu ndị ahịa na-agụ site na nkebi dị iche iche

Atụmatụ a na-ebelata nnukwu mgbagwoju anya nke onye na-ere ahịa Kafka ma e jiri ya tụnyere ozi nkesa chọrọ iji nọgide na-akwụ ụgwọ JMS. N'ebe a, ịkwesighi ichegbu onwe gị maka isi ihe ndị a:

  • Kedu onye ahịa kwesịrị ịnata ozi na-esote, dabere na oke okirikiri, ikike nke prefetch buffer ugbu a, ma ọ bụ ozi gara aga (dị maka otu ozi JMS).
  • Kedu ozi ezigara nke ndị na-azụ ahịa yana ma ekwesịrị ịnyeghachi ha ma ọ bụrụ na ọdịda dara.

Ihe niile onye na-ere ahịa Kafka ga-eme bụ ịnyefe onye ahịa ozi n'usoro mgbe onye nke ikpeazụ rịọrọ ha.

Otú ọ dị, ihe ndị a chọrọ maka ime ka nzigharị na nzigharị ozi ndị dara ada adịghị apụ apụ - ọrụ dịịrị ha na-esi n'aka onye na-ere ahịa gaa n'aka onye ahịa. Nke a pụtara na ekwesịrị iburu ha n'uche na koodu gị.

Na-eziga ozi

Ọ bụ ọrụ dịịrị onye na-emepụta ozi ahụ ikpebi akụkụ nke ọ ga-ezigara ozi. Iji ghọta usoro eji eme nke a, anyị kwesịrị ibu ụzọ tụlee ihe kpọmkwem anyị na-ezipụ.

Ebe na JMS anyị na-eji usoro ozi nwere metadata (ndị isi na ihe onwunwe) na ahụ nwere ibu ọrụ (ụgwọ ịkwụ ụgwọ), na Kafka ozi ahụ bụ. ụzọ "key-uru". A na-ezigara ụgwọ ọrụ ozi dị ka uru. Igodo ahụ, n'aka nke ọzọ, a na-ejikarị eme nkewa ma ga-enwerịrị ya azụmahịa mgbagha kpọmkwem igodoitinye ozi ndị metụtara ya na otu nkebi.

N'Isi nke 2, anyị tụlere ọnọdụ ịkụ nzọ n'ịntanetị ebe ọ dị mkpa ka otu onye na-azụ ahịa hazie ihe omume metụtara ya:

  1. Ahaziri akaụntụ onye ọrụ.
  2. A na-etinye ego na akaụntụ ahụ.
  3. A na-eme nzọ nke na-ewepụ ego na akaụntụ ahụ.

Ọ bụrụ na mmemme ọ bụla bụ ozi ezigara na isiokwu, mgbe ahụ igodo okike ga-abụ ID akaụntụ.
Mgbe ezigara ozi site na iji Kafka Producer API, ọ na-agafe na ọrụ nkebi nke, nyere ozi na ọnọdụ nke ụyọkọ Kafka ugbu a, weghachite ID nke nkebi nke ekwesịrị iziga ozi ahụ. A na-emejuputa atụmatụ a na Java site na interface Partitioner.

Ihe interface a dị ka nke a:

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

Mmejuputa nkebi na-eji ndabara izugbe hashing algọridim n'elu igodo iji chọpụta nkebi, ma ọ bụ gburugburu-robin ma ọ bụrụ na enweghị igodo akọwapụtara. Uru ndabara a na-arụ ọrụ nke ọma n'ọtụtụ oge. Agbanyeghị, n'ọdịnihu ị ga-achọ ide nke gị.

Na-ede atụmatụ nkewa nke gị

Ka anyị lelee ọmụmaatụ ebe ịchọrọ izipu metadata yana ibu ozi. Ọnụ ego a na-akwụ na ihe atụ anyị bụ ntụziaka iji tinye ego na akaụntụ egwuregwu. Ntuziaka bụ ihe anyị ga-achọ ka e kwe nkwa na agaghị agbanwe ya na mbufe ma chọọ ijide n'aka na ọ bụ naanị sistemụ elu tụkwasịrị obi nwere ike ịmalite nkuzi ahụ. N'okwu a, sistemu izipu na nnata kwekọrịtara na iji mbinye aka iji gosipụta ozi ahụ.
Na JMS nkịtị, anyị na-akọwapụta ihe "mbinye aka ozi" ma tinye ya na ozi ahụ. Agbanyeghị, Kafka anaghị enye anyị usoro maka ịgafe metadata, naanị igodo na uru.

Ebe ọ bụ na uru ahụ bụ ụgwọ mbufe ụlọ akụ nke anyị chọrọ idobe iguzosi ike n'ezi ihe, anyị enweghị nhọrọ ma ọ bụghị ịkọwapụta usoro data anyị ga-eji na igodo ahụ. Na-eche na anyị chọrọ ID akaụntụ maka nkewa, ebe ọ bụ na a ga-ahazirịrị ozi niile metụtara akaụntụ n'usoro, anyị ga-ewepụta usoro JSON ndị a:

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

N'ihi na uru nke mbinye aka ga-adịgasị iche dabere na ụgwọ a na-akwụ, atụmatụ hashing ndabara nke interface Partitioner agaghị atụkwasị ozi metụtara otu. Ya mere, anyị ga-achọ ide atụmatụ nke anyị ga-atụgharị igodo a wee kewaa uru akaụntụId.

Kafka gụnyere checksums iji chọpụta nrụrụ aka nke ozi na ụlọ ahịa ma nwee atụmatụ nchekwa zuru oke. N'agbanyeghị nke ahụ, ihe ndị ụlọ ọrụ chọrọ, dị ka nke dị n'elu, na-apụta mgbe ụfọdụ.

Atụmatụ nkewa nke onye ọrụ ga-ahụrịrị na ozi niile metụtara ejedebe na otu nkebi. Ọ bụ ezie na nke a dị ka ọ dị mfe, ihe a chọrọ nwere ike gbagwojuru anya site na mkpa ọ dị ịtụ ozi ndị metụtara ya na otu esi edozi ọnụọgụ nkebi na isiokwu.

Ọnụọgụ nkebi na isiokwu nwere ike ịgbanwe ka oge na-aga, n'ihi na enwere ike ịgbakwunye ha ma ọ bụrụ na okporo ụzọ gafere ihe mbụ tụrụ anya ya. Ya mere, igodo ozi nwere ike ijikọ na nkebi ezigara ha na mbụ, na-egosi otu mpaghara a ga-ekekọrịta n'etiti ndị nrụpụta.

Ihe ọzọ ị ga-atụle bụ ikesa ozi n'ofe nkebi. Na-emekarị, anaghị ekesa igodo ọ bụla n'ofe ozi, yana ọrụ hash anaghị ekwe nkwa nkesa ozi ziri ezi maka obere igodo.
Ọ dị mkpa ịmara na n'agbanyeghị na ịhọrọ ikewa ozi, onye nkewa n'onwe ya nwere ike ịdị mkpa ka ejigharị ya.

Tụlee ihe a chọrọ iji megharịa data n'etiti ụyọkọ Kafka na mpaghara mpaghara dị iche iche. Maka nzube a, Kafka na-abịa na ngwá ọrụ ahịrị iwu a na-akpọ MirrorMaker, nke a na-eji agụ ozi sitere na otu ụyọkọ ma nyefee ha na nke ọzọ.

MirrorMaker ga-aghọta mkpịsị ugodi nke isiokwu emegharịgharịrị iji dobe usoro dị n'etiti ozi mgbe a na-emegharị n'etiti ụyọkọ, ebe ọnụọgụ nkebi maka isiokwu ahụ nwere ike ọ gaghị abụ otu na ụyọkọ abụọ.

Usoro nkewa omenala dị ụkọ, n'ihi na hashing ma ọ bụ okirikiri robin na-arụ ọrụ nke ọma n'ọtụtụ ọnọdụ. Agbanyeghị, ọ bụrụ na ịchọrọ nkwa inye iwu siri ike ma ọ bụ chọọ iwepu metadata site na ibu a na-akwụ ụgwọ, mgbe ahụ nkewa bụ ihe ị kwesịrị ileru anya nke ọma.

Uru scalability na arụmọrụ nke Kafka na-abịa site n'ịgbanwe ụfọdụ ọrụ nke onye na-ere ahịa omenala na onye ahịa. N'okwu a, a na-eme mkpebi ikesa ozi nwere ike ime n'etiti ọtụtụ ndị na-azụ ahịa na-arụ ọrụ n'otu oge.

Ndị na-ere ahịa JMS kwesịkwara ime ihe ndị a chọrọ. N'ụzọ na-akpali mmasị, usoro maka iziga ozi ndị metụtara ya na otu onye ahịa, emejuputa atumatu site na JMS Message Groups (ngbanwe na atụmatụ nkwụgide ibu nke nnyapade (SLB)), na-achọkwa ka onye na-ezipụ akara akara dịka ihe metụtara ya. N'ihe banyere JMS, onye na-ere ahịa na-ahụ maka iziga otu ozi ndị metụtara ya na otu onye na-azụ ahịa n'ime ọtụtụ, na ịnyefe ikike nke otu ma ọ bụrụ na onye ahịa daa.

Nkwekọrịta ndị nrụpụta

Nkewa abụghị naanị ihe a ga-atụle mgbe ị na-eziga ozi. Ka anyị lelee ụzọ izipu() nke klas Onye nrụpụta na Java API:

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

Ekwesịrị iburu n'uche ozugbo na ụzọ abụọ ahụ na-alaghachi n'ọdịnihu, nke na-egosi na a naghị arụ ọrụ izipu ozugbo. Ihe si na ya pụta bụ na edere ozi (ProducerRecord) na onye na-ezigara ihe nchekwa maka akụkụ ọ bụla na-arụ ọrụ ma zigara onye na-ere ahịa dị ka eriri ndabere na ụlọ akwụkwọ ndị ahịa Kafka. Ezie na nke a na-eme ka ihe incredibly ngwa ngwa, ọ pụtara na ihe na-enweghị ahụmahụ ngwa nwere ike ida ozi ma ọ bụrụ na ya usoro akwụsị.

Dị ka mgbe niile, enwere ụzọ isi mee ka ọrụ izipu bụrụ ntụkwasị obi na ọnụ ahịa arụmọrụ. Enwere ike ịtọ nha nke ihe nchekwa a ka ọ bụrụ 0, a ga-amanye eriri izipu ka ọ chere ruo mgbe ebufefe onye na-ere ahịa gwụchara, dịka ndị a:

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

Ndị ọzọ gbasara ịgụ ozi

Ịgụ ozi nwere ihe mgbagwoju anya ndị ọzọ kwesịrị ịkọ nkọ banyere ya. N'adịghị ka JMS API, nke nwere ike na-agba ọsọ onye na-ege ntị ozi na nzaghachi na ozi, na Consumer Kafka naanị ntuli aka. Ka anyị lebakwuo anya na usoro ahụ ntuli aka()eji maka ebumnuche a:

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

Uru nloghachi nke usoro a bụ ihe owuwu akpa nwere ọtụtụ ihe ndekọ ndị ahịa site na enwere ike ọtụtụ akụkụ. ndekọ ndị ahịa bụ n'onwe ya ihe njide maka ụzọ igodo-uru nwere metadata jikọtara ya, dịka nkebi nke esitere na ya nweta.

Dị ka a tụlere n'Isi nke 2, anyị aghaghị iburu n'uche ihe na-eme ozi mgbe emechara ya nke ọma ma ọ bụ na-emezighị nke ọma, dịka ọmụmaatụ, ọ bụrụ na onye ahịa enweghị ike ịhazi ozi ahụ ma ọ bụ ọ bụrụ na ọ kwụsịrị. Na JMS, a na-edozi nke a site na ọnọdụ nnabata. Onye na-ere ahịa ahụ ga-ehichapụ ozi a haziri nke ọma, ma ọ bụ nyegharịa ozi nke adịgboroja ma ọ bụ nke adịgboroja (na-eche na ejiri azụmahịa mee ihe).
Kafka na-arụ ọrụ dị iche iche. A naghị ehichapụ ozi n'ime onye na-ere ahịa mgbe nyochachara ya, na ihe na-eme na ọdịda bụ ọrụ nke koodu nyocha n'onwe ya.

Dị ka anyị kwuru, a na-ejikọta ndị na-azụ ahịa na nkwụsị na log. Ọkwa ndekọ nke ejikọtara na nkwụghachi a dabara na ozi na-esote nke a ga-ewepụta na nzaghachi ntuli aka(). Isi ihe dị n'oge mgbe nkwụghachi a na-abawanye bụ ihe dị mkpa maka ịgụ ihe.

N'ịlaghachi n'ụdị ọgụgụ a tụlere na mbụ, nhazi ozi nwere usoro atọ:

  1. Weghachite ozi maka ịgụ.
  2. Hazie ozi ahụ.
  3. Kwenye ozi.

Ndị ahịa Kafka na-abịa na nhọrọ nhazi nwee ike.auto.commit. Nke a bụ ntọala ndabara a na-ejikarị eme ihe, dịka ọ na-adịkarị na ntọala nwere okwu "akpaaka".

Tupu Kafka 0.10, onye ahịa na-eji nhọrọ a ga-ezipụ nkwụsị nke ozi ikpeazụ a gụrụ na oku na-esote. ntuli aka() mgbe nhazi. Nke a pụtara na enwere ike megharịa ozi ọ bụla eweterela ma ọ bụrụ na onye ahịa ahazilarị ha mana e bibiri ya na mberede tupu ọ kpọọ. ntuli aka(). N'ihi na onye na-ere ahịa anaghị edebe steeti ọ bụla gbasara ugboro ole a gụrụ ozi, onye ahịa na-esote na-eweghachite ozi ahụ agaghị ama ihe ọjọọ mere. Omume a bụ nke adịgboroja. Emere nkwụghachi ahụ naanị ma ọ bụrụ na edoziziri ozi ahụ nke ọma, mana ọ bụrụ na onye ahịa ahụ kwụsịrị, onye na-ere ahịa ga-ezigara onye ahịa ọzọ otu ozi ahụ ọzọ. Omume a kwekọrọ na nkwa izipu ozi "ọbụlagodi otu ugboro".

Na Kafka 0.10, agbanweela koodu ndị ahịa nke mere na ọbá akwụkwọ ndị ahịa na-akpalite nkwa ahụ kwa oge, dị ka ahaziri auto.commit.interval.ms. Omume a dị n'etiti ụdị JMS AUTO_ACKNOWLEDGE na DUPS_OK_ACKNOWLEDGE. Mgbe ị na-eji autocommit, enwere ike ịme ozi n'agbanyeghị ma edoziri ya n'ezie - nke a nwere ike ime n'ihe banyere onye na-eji nwayọ nwayọ. Ọ bụrụ na onye na-azụ ahịa kwopu ime, onye na-azụ ahịa ga-ebubata ozi, malite n'ọnọdụ etinyere ya, nke nwere ike ibute ozi efu. N'okwu a, Kafka akwụsịghị ozi ndị ahụ, koodu ọgụgụ anaghị edozi ha.

Ụdị a nwere otu nkwa ahụ dị na ụdị 0.9: enwere ike ịhazi ozi, mana ọ bụrụ na ọ daa, enweghị ike ịmegharị ya, nwere ike ime ka nnyefe okpukpu abụọ. Ka ị na-enwetakwu ozi mgbe ị na-eme ihe ntuli aka(), ka nsogbu a ka ukwuu.

Dị ka a tụlere n’akwụkwọ bụ́ “Ịgụ Ozi sitere na Queue” na peeji nke 21, ọ dịghị ihe dị ka izisa ozi otu ugboro n’usoro izi ozi mgbe e weere ọnọdụ ọdịda anya n’uche.

Na Kafka, enwere ụzọ abụọ iji mebie (mebie) nkwụghachi ụgwọ: na-akpaghị aka na aka. N'okwu abụọ ahụ, enwere ike ịhazi ozi ọtụtụ oge ma ọ bụrụ na ahazichara ozi ahụ mana ọ dara tupu ntinye ya. Ị nwekwara ike ịhọrọ ịghara ịhazi ozi ahụ ma ọ bụrụ na ntinye ahụ mere na ndabere na koodu gị dechara tupu enwee ike ịhazi ya (ikekwe na Kafka 0.9 na mbụ).

Ị nwere ike ijikwa usoro ịkwụ ụgwọ akwụkwọ ntuziaka na API ndị ahịa Kafka site na ịtọ ntọala ahụ nwee ike.auto.commit ikwu okwu ụgha na ịkpọ otu n'ime ụzọ ndị a:

void commitSync();
void commitAsync();

Ọ bụrụ na ịchọrọ ịhazi ozi ahụ "opekempe otu ugboro", ị ga-eji aka mee nkwụsị ahụ emeSync()site n'imezu iwu a ozugbo edozichara ozi.

Ụzọ ndị a anaghị ekwe ka anabata ozi tupu ha ahazi ya, mana ha anaghị eme ihe ọ bụla iji wepụ oge nhazi oge na-enye ọdịdị nke ịbụ azụmahịa. Enweghị azụmahịa ọ bụla na Kafka. Onye ahịa enweghị ikike ime ihe ndị a:

  • tụgharịa ozi adịgboroja na-akpaghị aka. Ndị na-eri ihe n'onwe ha ga-edozi ihe ndị na-esite na nkwụ ụgwọ nsogbu yana nkwụsị azụ azụ, n'ihi na ha enweghị ike ịdabere na onye na-ere ahịa na-ebughachi ozi ọzọ.
  • Zipụ ozi na ọtụtụ isiokwu n'otu ọrụ atọm. Dị ka anyị ga-ahụ n'oge na-adịghị anya, ịchịkwa isiokwu dị iche iche na nkebi nwere ike ibi na igwe dị iche iche na ụyọkọ Kafka nke na-adịghị ahazi azụmahịa mgbe ezigara ya. N'oge edere nke a, e meela ụfọdụ ọrụ iji mee ka nke a kwe omume na KIP-98.
  • Jikọọ ịgụ otu ozi sitere n'otu isiokwu yana izipu ozi ọzọ na isiokwu ọzọ. Ọzọ, ihe owuwu nke Kafka na-adabere na ọtụtụ igwe kwụụrụ onwe ya na-agba ọsọ dị ka otu ụgbọ ala ma ọ dịghị mgbalị e mere iji zoo nke a. Dịka ọmụmaatụ, enweghị akụrụngwa API ga-enye gị ohere ijikọ n'ji и Na-emepụta na azụmahịa. Na JMS, ihe a na-enye nnọkọnke sitere na ya eke Ndị na-emepụta ozi и Ozi ndị ahịa.

Ọ bụrụ na anyị enweghị ike ịdabere na azụmahịa, kedu ka anyị ga-esi wepụta semantics nso na nke sistemụ ozi ọdịnala na-enye?

Ọ bụrụ na enwere ike na nkwụghachi ụgwọ nke ndị na-azụ ahịa nwere ike ịbawanye tupu ha edozie ozi ahụ, dị ka n'oge ihe mberede nke ndị na-azụ ahịa, mgbe ahụ onye na-azụ ahịa enweghị ụzọ ọ ga-esi mara ma ọ bụrụ na otu ndị na-azụ ahịa agbaghara ozi ahụ mgbe e kenyere ya nkebi. Ya mere, otu atụmatụ bụ iweghachite nkwụghachi n'ọnọdụ gara aga. API ndị ahịa Kafka na-enye ụzọ ndị a maka nke a:

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

.Zọ ịchọ () enwere ike iji usoro
offsetsForTimes (Map timestampsToSearch) ịlaghachi na steeti n'oge ụfọdụ akọwapụtara n'oge gara aga.

N'ụzọ doro anya, iji usoro a pụtara na ọ ga-abụ na a ga-agụ ma hazie ụfọdụ ozi ndị emebu na mbụ. Iji zere nke a, anyị nwere ike iji ọgụgụ isi ike, dị ka akọwara n'Isi nke 4, iji dobe ozi ndị eleleburu ma kpochapụ ihe abụọ.

N'aka nke ọzọ, enwere ike idowe koodu ndị ahịa gị ka ọ dị mfe, ọ bụrụhaala na a na-anabata mfu ozi ma ọ bụ mbiputegharị. Mgbe anyị na-eleba anya na ojiji nke Kafka na-ejikarị eme ihe, dị ka ijikwa ihe omume log, metrics, click tracking, wdg, anyị na-achọpụta na ọnwụ nke ozi onye ọ bụla agaghị enwe mmetụta dị ukwuu na ngwa ndị gbara ya gburugburu. N'ọnọdụ ndị dị otú ahụ, ụkpụrụ ndabara na-anabata nke ọma. N'aka nke ọzọ, ọ bụrụ na ngwa gị chọrọ izipu ịkwụ ụgwọ, ị ga-eji nlezianya lekọta ozi nke ọ bụla. Ihe niile na-adabere na ọnọdụ.

Nleba anya nkeonwe na-egosi na ka ike ozi na-abawanye, uru ozi nke ọ bụla na-ebelata. Ozi buru ibu na-adịkarị ọnụ ahịa ma a na-elele ya n'ụdị agbakọtara.

Nnweta dị elu

Ụzọ Kafka si nweta nnweta dị elu dị nnọọ iche na ụzọ ActiveMQ. Emebere Kafka gburugburu ụyọkọ-apụ apụ ebe ndị ahịa niile na-enweta ma kesaa ozi n'otu oge.

Otu ụyọkọ Kafka nwere ọtụtụ ndị na-ere ahịa na-agba ọsọ na sava dị iche iche. Emebere Kafka ka ọ na-agba ọsọ na ngwaike kwụ ọtọ, ebe ọnụ nke ọ bụla nwere ebe nchekwa nke ya. A naghị atụ aro iji nchekwa nchekwa netwọkụ (SAN) n'ihi na ọtụtụ ọnụ compute nwere ike ịsọ mpi maka oge.Ыe nchekwa oge ma mepụta esemokwu.

Kafka bụ mgbe niile na usoro. Ọtụtụ ndị ọrụ Kafka buru ibu anaghị emechi ụyọkọ ha yana ngwanrọ na-emelite mgbe niile site na ịmalitegharị usoro. A na-enweta nke a site n'ịkwado ndakọrịta na ụdị gara aga maka ozi na mmekọrịta n'etiti ndị na-ere ahịa.

Ndị na-ere ahịa jikọtara na ụyọkọ nkesa Onye nche zoo, nke na-arụ ọrụ dị ka ndekọ data nhazi ma jiri ya na-ahazi ọrụ nke onye na-ere ahịa ọ bụla. ZooKeeper n'onwe ya bụ sistemụ kesara nke na-enye nnweta dị elu site na ngbanwe nke ozi site na iguzobe. kworum.

N'okwu nke mbụ, a na-emepụta isiokwu na ụyọkọ Kafka nwere ihe ndị a:

  • Ọnụ ọgụgụ nke nkebi. Dị ka a tụlere na mbụ, kpọmkwem uru e ji mee ihe ebe a na-adabere n'ọkwa a chọrọ nke ịgụ ihe yiri ya.
  • Ihe ngbanwe (ihe kpatara) na-ekpebi ọnụọgụ ndị na-ere ahịa na ụyọkọ ahụ kwesịrị ịnwe ndekọ maka nkebi a.

Iji ZooKeepers maka nhazi, Kafka na-anwa ikesa nkebi ọhụrụ n'etiti ndị na-ere ahịa na ụyọkọ ahụ. A na-eme nke a site na otu ihe atụ nke na-arụ ọrụ dịka njikwa.

N'oge ọsọ maka nkebi isiokwu ọ bụla Onye njikwa ekenye onye na-ere ahịa ọrụ onye ndu (onye isi, nna ukwu, onye ngosi) na ndị na-eso ụzọ (ndị na-eso ụzọ, ndị ohu, ndị nọ n'okpuru). Onye na-ere ahịa, na-arụ ọrụ dị ka onye ndu maka nkebi a, na-ahụ maka ịnata ozi niile nke ndị na-emepụta na-ezigara ya na ikesa ozi na ndị na-azụ ahịa. Mgbe ezigara ozi na nkebi isiokwu, a na-emegharị ya na ọnụ ahịa ahịa niile na-eme dị ka ndị na-eso ụzọ maka nkebi ahụ. A na-akpọ ọnụ ọnụ ọ bụla nwere ndekọ maka nkebi oyiri. Onye na-ere ahịa nwere ike ịrụ ọrụ dịka onye ndu maka akụkụ ụfọdụ yana dịka onye na-eso ụzọ maka ndị ọzọ.

A na-akpọ onye na-eso ụzọ nwere ozi niile nke onye ndu nwere oyiri mekọrịtara ọnụ (ihe oyiri nke dị na steeti emekọrịtara ọnụ, oyiri in-sync). Ọ bụrụ na onye na-ere ahịa na-arụ ọrụ dị ka onye ndu maka nkebi na-agbada, onye na-ere ahịa ọ bụla emelitere ma ọ bụ mekọrịtara ọnụ maka nkebi ahụ nwere ike weghara ọrụ onye ndu. Ọ bụ atụmatụ na-adigide n'ụzọ na-enweghị atụ.

Akụkụ nke nhazi onye nrụpụta bụ paramita akwa, nke na-ekpebi ole oyiri ga-anabatarịrị (ịkwado) nnata ozi tupu eri ngwa ahụ aga n'ihu izipu: 0, 1, ma ọ bụ niile. Ọ bụrụ na edobe ya niile, mgbe ahụ, mgbe a natara ozi, onye ndu ga-eziteghachi nkwenye azụ na onye mmepụta ozugbo ọ natara nkwenye (nkwenye) nke ndekọ site na ọtụtụ akara (gụnyere onwe ya) akọwapụtara site na ntọala isiokwu. min.insync.replicas (nke mbụ 1). Ọ bụrụ na enweghị ike ịmegharị ozi ahụ nke ọma, mgbe ahụ onye nrụpụta ga-atụfu ewepu ngwa (NotEnoughReplicas ma ọ bụ NotEnoughReplicasAfterAppend).

Nhazi a na-ahụkarị na-emepụta isiokwu nwere ihe ngbanwe nke 3 (onye ndu 1, ndị na-eso ụzọ 2 kwa nkebi) yana oke. min.insync.replicas atọrọ na 2. N'okwu a, ụyọkọ ahụ ga-ekwe ka otu n'ime ndị na-ere ahịa na-achịkwa nkebi isiokwu ka ọ gbadaa na-enweghị emetụta ngwa ndị ahịa.

Nke a na-eweghachite anyị azụmahịa amaara nke ọma n'etiti arụmọrụ na ntụkwasị obi. Ntugharị na-eme na-efu oge nchere ọzọ maka nkwenye (nkwado) sitere n'aka ndị na-eso ụzọ. Ọ bụ ezie na, n'ihi na ọ na-agba ọsọ n'otu n'otu, ịmegharị na ọ dịkarịa ala atọ ọnụ nwere otu arụmọrụ dị ka abụọ (na-eleghara mmụba nke netwọk bandwidth ojiji).

Site n'iji atụmatụ mmegharị a, Kafka ji akọ na-ezere mkpa ọ dị iji arụ ọrụ ahụ dee ozi ọ bụla na diski. mekọrịta(). A ga-edenye ozi ọ bụla onye nrụpụta ezigara na ndekọ nkebi, mana dịka a tụlere n'Isi nke 2, a na-emebu ide na faịlụ na nchekwa sistemụ arụmọrụ. Ọ bụrụ na a na-emegharị ozi a na ihe atụ Kafka ọzọ ma dị na ebe nchekwa ya, ọnwụ nke onye ndu apụtaghị na ozi ahụ n'onwe ya efunahụla - enwere ike weghara ya site na nṅomi mekọrịtara ọnụ.
Ọjụjụ ịrụ ọrụ ahụ mekọrịta() pụtara na Kafka nwere ike ịnata ozi ngwa ngwa ka ọ nwere ike dee ha na ebe nchekwa. N'aka nke ọzọ, ogologo oge ị nwere ike izere ịkwanye ebe nchekwa na diski, ọ ka mma. N'ihi nke a, ọ bụghị ihe ọhụrụ na ndị na-ere ahịa Kafka ga-ekenye 64 GB ma ọ bụ karịa nke ebe nchekwa. Ojiji ebe nchekwa a pụtara na otu ihe atụ Kafka nwere ike ịgba ọsọ ọsọ ọsọ ọtụtụ puku ugboro ngwa ngwa karịa onye na-ere ozi ọdịnala.

Enwere ike ịhazi Kafka iji tinye ọrụ ahụ mekọrịta() na ngwugwu ozi. Ebe ọ bụ na ihe niile dị na Kafka na-adabere na ngwugwu, ọ na-arụ ọrụ nke ọma maka ọtụtụ ikpe na ọ bụ ngwá ọrụ bara uru maka ndị ọrụ chọrọ nkwenye siri ike. Ọtụtụ n'ime arụmọrụ dị ọcha nke Kafka na-abịa site na ozi ezigara onye na-ere ahịa dị ka ngwugwu yana na a na-agụ ozi ndị a site na onye na-ere ahịa na usoro nke usoro iji. oyiri efu arụ ọrụ (ọrụ nke na-adịghị arụ ọrụ nke iṅomi data site n'otu ebe nchekwa gaa na nke ọzọ). Nke ikpeazụ bụ nnukwu arụmọrụ na uru akụrụngwa na ọ ga-ekwe omume naanị site na iji usoro data ndekọ data na-akọwapụta atụmatụ nkebi.

Enwere ike ịrụ ọrụ kachasị mma na ụyọkọ Kafka karịa otu onye na-ere ahịa Kafka, n'ihi na akụkụ isiokwu nwere ike gbasaa n'ọtụtụ igwe dị iche iche.

Nsonaazụ

N'isiakwụkwọ a, anyị lere anya ka ụlọ ọrụ Kafka si emegharị mmekọrịta dị n'etiti ndị ahịa na ndị na-ere ahịa iji nye pipeline ozi siri ike nke ukwuu, yana ntinye ọtụtụ ugboro karịa nke onye na-ere ahịa ozi. Anyị atụlewo ọrụ ọ na-eji iji nweta nke a wee leba anya na nhazi nke ngwa ndị na-enye ọrụ a. N'isiakwụkwọ na-esonụ, anyị ga-eleba anya na nsogbu ndị a na-ahụkarị na ngwa ndị dabeere na ozi kwesịrị idozi ma kparịta usoro maka imeso ha. Anyị ga-akwụsị isiakwụkwọ ahụ site n'ịkọwapụta otu esi ekwu maka teknụzụ izi ozi n'ozuzu ka ị nwee ike nyochaa ntozu ha maka ikpe ojiji gị.

Akụkụ atụgharịrị na mbụ: Ịghọta ndị na-ere ahịa ozi. Mụta usoro nke izi ozi na ActiveMQ na Kafka. Isi nke 1

Emeela ntụgharị asụsụ: tele.gg/middle_java

Ka ga-aga n'ihu…

Naanị ndị ọrụ edebanyere aha nwere ike isonye na nyocha a. banye, Biko.

A na-eji Kafka eme ihe na nzukọ gị?

  • Ee

  • Ọ dịghị

  • Ejibuburu, ugbu a abụghị

  • Anyị na-eme atụmatụ iji

Ndị ọrụ 38 tụrụ vootu. Ndị ọrụ 8 anabataghị.

isi: www.habr.com

Tinye a comment