Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. cutubka 3. Kafka

Sii wadida tarjumaada buug yar:
Fahamka Dilaaliinta Fariinta
qoraa: Jakub Korab, daabacaha: O'Reilly Media, Inc., taariikhda daabacaadda: June 2017, ISBN: 9781492049296.

Qayb hore oo la turjumay: Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. Cutubka 1aad Hordhac

CUTUBKA 3AAD

Kafka

Kafka waxaa loo sameeyay LinkedIn si ay u hesho qaar ka mid ah xaddidaadda dilaaliinta farriimaha dhaqameed oo ay iska ilaaliso in ay dejiso dillaaliinta farriimaha badan ee isdhexgalka qodob-ilaa-dhibcood, kaas oo lagu sifeeyay buuggan hoostiisa "Scaling up and out" bogga 28 Isticmaalka kiisaska LinkedIn waxay inta badan ku tiirsan tahay hal-jid oo ah qaadashada tiro aad u badan oo xog ah, sida gujisyada bogga iyo diiwaannada gelitaanka, iyadoo weli u oggolaanaysa in xogtaas loo isticmaalo habab badan iyada oo aan saameyn ku yeelan wax soo saarka wax soo saarka ama macaamiisha kale. Dhab ahaantii, sababta ay Kafka u jirto waa in la helo nooca farriimaha qaab dhismeedka ee Tubta Xogta Caalamiga ah ay qeexayso.

Marka la eego yoolkan kama dambaysta ah, shuruudo kale ayaa si dabiici ah u kacay. Kafka waa in:

  • Aad u dhaqso badan
  • Bixi bandwidth badan marka la shaqaynayo fariimaha
  • Taageerida Daabacaha-Subscribe-ka iyo moodooyinka Point-to-point
  • Ha ka gaabin inaad ku darto macaamiisha. Tusaale ahaan, waxqabadka safka iyo mawduuca labadaba ActiveMQ waxay hoos u dhigtaa marka tirada macaamiisha ee meesha loo socdo ay korodho.
  • Noqo mid siman mid la qiyaasi karo; haddii mid ka mid ah dilaaliinta ku sii adkaysta farriimaha uu ku samayn karo oo keliya xawaaraha ugu badan ee diskka, markaa waxa macno ah in laga gudbo hal tusaale oo dillaal ah si loo kordhiyo waxqabadka
  • Yaree gelitaanka kaydinta iyo dib u soo celinta fariimaha

Si loo gaaro waxaas oo dhan, Kafka waxay qaadatay qaab dhismeed kaas oo dib u qeexay doorarka iyo mas'uuliyadaha macaamiisha iyo dilaaliinta fariimaha. Qaabka JMS waa mid ku jihaysan dullaal, halkaas oo dilaalku uu mas'uul ka yahay qaybinta fariimaha iyo macaamiishu waa inay ka walwalaan oo kaliya dirida iyo helitaanka fariimaha. Kafka, dhanka kale, waa mid udub dhexaad u ah macmiilka, iyada oo macmiilku uu qaato qaar badan oo ka mid ah sifooyinka dilaaliinta dhaqameed, sida qaybinta caddaaladda ah ee fariimaha khuseeya macaamiisha, taas oo lagu beddelayo dillaal aad u degdeg badan oo la cabbiri karo. Dadka la shaqeeyay nidaamyada fariimaha dhaqameed, la shaqeynta Kafka waxay u baahan tahay isbeddel aasaasi ah oo maskaxda ah.
Jihada injineernimada ayaa horseeday abuurista kaabayaasha fariimaha oo awood u leh inay kordhiyaan wax soo saarka amarro badan oo baaxad leh marka la barbar dhigo dilaaliinta caadiga ah. Sida aan arki doono, habkani wuxuu la yimaadaa ganacsiyo, taas oo macnaheedu yahay in Kafka aysan ku haboonayn noocyada shaqada qaarkood iyo software rakibay.

Qaabka Meesha Midaysan

Si loo buuxiyo shuruudaha kor lagu sharaxay, Kafka waxay isku dartay daabacaad-sub-ku-soo-qorid iyo farriimaha dhibic-ilaa-dhibcaha hoos yimaada hal nooc - mowduuca. Tani waxay jahawareer ku tahay dadka ka shaqeeyay nidaamyada fariimaha, halkaas oo ereyga "mawduuca" uu tixraacayo habka baahinta kaas oo (mawduuca ka yimid) wax akhrintu ay tahay mid aan sii jiri karin. Mawduucyada Kafka waa in loo tixgaliyaa nooca loo socdo, sida lagu qeexay hordhaca buuggan.

Inta ka hartay cutubkan, ilaa aynaan si cad u qeexin mooyaane, ereyga "mawduuca" wuxuu tixraaci doonaa mawduuca Kafka.

Si aad si buuxda u fahamto sida mawduucyadu u dhaqmaan iyo waxa dammaanad-qaadyada ay bixiyaan, waxaan u baahanahay inaan marka hore eegno sida looga hirgeliyo Kafka.
Mawduuc kasta oo Kafka ku yaal wuxuu leeyahay log u gaar ah.
Soosaarayaasha fariimaha u soo diraya Kafka waxay u qoraan log-gan, macaamiishuna waxay ka akhriyaan log-ka iyagoo isticmaalaya tilmaameyaal si joogto ah u socda. Mararka qaarkood, Kafka waxay tirtirtaa qaybaha ugu da'da weyn ee log, haddii fariimaha qaybahaas la akhriyey iyo in kale. Qayb dhexe oo ka mid ah naqshadeynta Kafka ayaa ah in dallaaliyuhu aanu dan ka lahayn haddii fariimaha la akhriyo iyo in kale - taasi waa mas'uuliyadda macmiilka.

Ereyada "log" iyo "pointer" kuma jiraan Dukumentiyada Kafka. Erayadan caanka ah ayaa halkan loo adeegsadaa si ay u caawiyaan fahamka.

Habkani gabi ahaanba wuu ka duwan yahay ActiveMQ, halkaas oo farriimaha dhammaan safafka lagu kaydiyo isla log, iyo dallaaliyuhu u calaamadiyo farriimaha kuwo la tirtiray ka dib marka la akhriyo.
Aynu hadda wax yar sii qodno oo si faahfaahsan u eegno buugga mawduuca.
Diiwaanka Kafka wuxuu ka kooban yahay dhowr qaybood (Jaantus 3-1). Kafka waxay dammaanad qaadaysaa amar adag ee qayb kasta. Taas macneheedu waxa weeye in farriimaha loo qoro qaybta hab gaar ah loo akhriyo si isku mid ah. Qayb kasta waxaa loo hirgeliyay sidii fayl gal-gal ah oo ka kooban qayb-hoosaad (qayb-hoosaad) dhammaan fariimaha ay u diraan mawduuca soo saarayaasheeda. Mawduuca la abuuray wuxuu ka kooban yahay, sida caadiga ah, hal qayb. Fikradda qaybaha ayaa ah fikradda dhexe ee Kafka ee cabbirka jiifka.

Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. cutubka 3. Kafka
Jaantuska 3-1. Qaybaha Kafka

Marka soo saaraha u diro fariin mawduuca Kafka, wuxuu go'aamiyaa qaybta loo dirayo fariinta. Waxaan si faahfaahsan u eegi doonaa tan dambe.

Fariimaha akhriska

Macmiilka raba inuu akhriyo fariimaha ayaa maamula tilmaame magac leh oo la yiraahdo kooxda macaamiisha, taasoo tilmaamaysa dhimis fariimaha qaybta. Kacsigu waa boos kordhin ka bilaabma 0 bilowga qaybinta. Kooxdan macaamilka ah, ee lagu tixraacayo API-ga iyada oo loo sii marayo isticmaale-qeexay group_id, waxay u dhigantaa hal macaamiil macquul ah ama nidaam.

Nidaamyada fariimaha intooda badani waxay akhriyaan xogta meesha loo socdo iyagoo isticmaalaya tusaalooyin iyo taxane badan si ay u habeeyaan farriimaha si barbar socda. Sidaa darteed, waxaa badanaa jiri doona tusaalooyin badan oo macaamiisha ah oo wadaagaya isla kooxda macaamiisha.

Dhibka wax-akhrisku waxa uu noqon karaa sida soo socota:

  • Mawduuca waxa uu leeyahay qaybo badan
  • Kooxo badan oo macaamiisha ah ayaa isticmaali kara mawduuc isku mar
  • Koox ka mid ah macaamiisha ayaa yeelan kara marar badan oo kala duwan

Tani waa dhibaato badan oo aan fududayn. Si loo fahmo sida ay Kafka u maareyso cilaaqaadka ka dhexeeya kooxaha macmiisha, tusaalooyinka macaamilka, iyo qaybaha, aynu eegno taxane ah xaalado akhris oo aad u adag.

Macaamiisha iyo kooxaha macaamiisha

Aan bilow ahaan u soo qaadano mowduuc hal qayb ka kooban (Jaantus 3-2).

Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. cutubka 3. Kafka
Jaantuska 3-2. Macaamilku wuxuu wax ka akhriyaa qaybta

Marka tusaale ahaan macmiilku ku xidho group_id u gaar ah mawduucan, waxa loo qoondeeyey qayb akhrin ah iyo kabid qaybtaas. Booska kabitaankan waxa lagu habeeyey macmiilka si uu u tilmaamo booskii u dambeeyay (fariinta ugu cusub) ama booska ugu horreeya (fariinta ugu da'da weyn). Macmiilku waxa uu ka codsadaa farriimaha mawduuca, taas oo sababta in si isdaba joog ah logu akhriyo.
Meesha kabaxsan waxaa si joogto ah dib loogu celinayaa Kafka waxaana lagu kaydiyaa farriimaha mawduuc gudaha ah _macmiilka. Fariimaha akhrinta weli lama tirtirin, si ka duwan dullaal caadi ah, oo macmiilku waxa uu dib u celin karaa dib u habeynta si uu dib ugu habeeyo farriimaha hore loo arkay.

Marka macmiilka labaad ee macquulka ahi uu ku xidho isticmaalaya group_id ka duwan, waxa uu maamulaa tilmaame labaad oo ka madax banaan kan kowaadJaantus 3-3). Haddaba, mawduuca Kafka wuxuu u dhaqmaa sida safka halkaas oo uu jiro hal macaamiil iyo sida mawduuca daabacaadda-subscribe (pub-sub) ee caadiga ah ee macaamiil badani ay ku biiraan, iyada oo faa'iidada dheeraadka ah ay tahay in dhammaan fariimaha la kaydiyo lagana shaqeyn karo dhowr jeer.

Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. cutubka 3. Kafka
Jaantuska 3-3. Laba macaamiil oo ka tirsan kooxaha kala duwan ee macaamiisha ayaa wax ka akhriya qayb isku mid ah

Macaamiisha kooxda macaamiisha ah

Marka hal tusaale oo macaamiil ah uu akhriyo xogta qayb ka mid ah, waxa ay si buuxda u koontaroolaysaa tilmaanta oo waxay socodsiisaa fariimaha sida lagu qeexay qaybta hore.
Haddii dhowr jeer oo macaamiisha ah lagu xiray isla group_id mawduuc leh hal qayb, markaa tusaalaha ku xiran ugu dambeyntii waxaa la siin doonaa kantaroolka tilmaame oo laga bilaabo wakhtigaas wuxuu heli doonaa dhammaan fariimahaJaantus 3-4).

Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. cutubka 3. Kafka
Jaantuska 3-4. Laba macaamiil oo isku koox ah oo macaamiisha ah ayaa wax ka akhriyey qayb isku mid ah

Habkan habaynta, kaas oo tirada tusaalooyinka macaamiishu ay ka badan yihiin tirada qaybaha, waxaa loo malayn karaa nooc ka mid ah macaamilka gaarka ah. Tani waxay noqon kartaa mid faa'iido leh haddii aad u baahan tahay "firfircooni-dabacsan" (ama "kuleyl-kuleyl") ururinta tusaalooyinka macaamilkaaga, in kasta oo macaamiil badan ay barbar socdaan ("firfircoon-firfircoon" ama "kulul kulul") ayaa aad uga badan mid caadi ah macaamiisha.

Hab dhaqankan fariinta qaybinta ee kor lagu sharaxay waxay noqon kartaa wax lala yaabo marka la barbar dhigo sida safka caadiga ah ee JMS u dhaqmo. Qaabkan, fariimaha loo soo diro safka ayaa si siman loogu qaybin doonaa labada macaamiil.

Inta badan, marka aan abuurno xaalado badan oo macaamiisha ah, waxaan sameynaa tan si aan u socodsiino farriimaha isbarbar-dhigga, ama si aan u kordhinno xawaaraha wax-akhriska, ama si aan u kordhino xasilloonida habka wax-akhriska. Mar haddii hal tusaale oo macaamiil ah uu akhrin karo xogta qayb qayb ka mid ah markiiba, sidee baa tan lagu gaadhay Kafka?

Hal dariiqo oo tan lagu sameeyo waa in la isticmaalo hal tusaale oo macmiil ah si aad u akhrido dhammaan fariimaha oo aad u gudbiso barkada dunta. Iyadoo habkani uu kordhinayo habka wax-soo-saarka, waxay kordhisaa kakanaanta macquulka macaamilka oo waxba ma kordhinayso adkeynta nidaamka akhriska. Haddii hal koobi ka mid ah macaamiishu uu hoos ugu dhaco koronto la'aan ama dhacdo la mid ah awgeed, ka dib kala-goynta ayaa joogsata.

Habka kanonica ee lagu xallinayo dhibaatadan Kafka waa in la isticmaalo bОqaybo badan.

Qaybin

Qaybintu waa habka ugu muhiimsan ee isbarbar-dhigga akhriska iyo cabbirka mawduuca ka baxsan xajmiga halbeegga tusaale ahaan hal dallaal. Si aad tan si fiican u fahamto, aan tixgelinno xaalad ay jirto mawduuc leh laba qaybood oo hal macaamiil ah uu ku biiray mawduucan (Jaantus 3-5).

Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. cutubka 3. Kafka
Jaantuska 3-5. Hal macaamiil ayaa wax ka akhriya qaybo badan

Xaaladdan, macaamilka waxaa la siinayaa kontoroolka tilmaamayaasha u dhigma kooxda_id ee labada qeyboodba wuxuuna billaabaa akhrinta fariimaha labada qeybood.
Marka macmiilka dheeriga ah ee isla group_id lagu daro mawduucan, Kafka waxay dib u dejisaa mid ka mid ah qaybaha min kan kowaad ilaa macmiilka labaad. Taas ka dib, tusaale kasta oo ka mid ah macaamilka ayaa akhrin doona qayb ka mid ah mawduuca (Jaantus 3-6).

Si loo hubiyo in fariimaha si isku mid ah loogu habeeyey 20 dun, waxaad u baahan tahay ugu yaraan 20 qaybood. Haddii ay jiraan qaybo yar, waxaad ka tagi doontaa macaamiisha oo aan haysan wax ay ku shaqeeyaan, sida hore loogu sharraxay doodaha macaamiisha gaarka ah.

Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. cutubka 3. Kafka
Jaantuska 3-6. Laba macaamiil oo isku koox ah oo macaamiisha ah ayaa wax ka akhriyay qaybo kala duwan

Nidaamkani wuxuu si weyn u yareynayaa kakanaanta dilaalka Kafka marka loo eego qaybinta fariinta loo baahan yahay si loo ilaaliyo safka JMS. Halkan uma baahnid inaad ka walwasho qodobada soo socda:

  • Macmiilkee ayaa heli kara fariinta soo socota, iyadoo lagu saleynayo qoondaynta wareega wareega, awooda hadda jirta ee kaydiyeyaasha hore, ama farriimaha hore (sida kooxaha fariinta JMS).
  • Fariimaha loo diro macaamiisha iyo haddii ay tahay in dib loo soo celiyo haddii ay dhacdo guul darro.

Dhammaan dilaaliyaha Kafka waa inuu sameeyaa waa inuu fariimaha si isdaba joog ah ugu gudbiyo macaamilka marka kan dambe uu codsado.

Si kastaba ha ahaatee, shuruudaha isbarbar-dhigga saxitaanka iyo soo-celinta fariimaha guul-darraystay ma tagaan - mas'uuliyadda iyaga ayaa si fudud uga gudubta dullaalka una gudbisa macmiilka. Taas macneheedu waa in lagu xisaabtamo koodhkaaga.

Diritaanka fariimaha

Waa mas'uuliyadda soo saaraha fariinta si uu u go'aamiyo qaybta loo dirayo fariinta. Si loo fahmo habka tan lagu sameeyo, waxaan marka hore u baahanahay inaan tixgelinno waxa dhabta ah ee aan direyno.

Halka JMS aan isticmaalno qaab-dhismeedka fariinta leh metadata (madaxaha iyo guryaha) iyo jirka ay ku jiraan culeyska (lacag-bixinta), Kafka farriintu waa lammaane "qiimaha muhiimka ah". Culayska fariinta waxa loo diraa qiime ahaan. Furaha, dhanka kale, waxaa inta badan loo isticmaalaa qaybinta waana in uu ka kooban yahay furaha macquulka ah ee ganacsigain la dhigo fariimaha la xidhiidha isla qaybta.

Cutubka 2, waxaanu kaga wada hadalnay xaalada sharadka onlaynka ah halkaas oo dhacdooyinka la xidhiidha loo baahan yahay in loo habeeyo si ay u wada shaqeeyaan hal macaamiil:

  1. Koontada isticmaaluhu waa la habeeyey.
  2. Lacagta ayaa lagu shubaa koontada.
  3. Qamaar ayaa la sameeyaa kaas oo lacag kala baxa akoontiga.

Haddii dhacdo kasta ay tahay fariin la dhajiyay mawduuc, markaa furaha dabiiciga ahi wuxuu noqon lahaa aqoonsiga koontada.
Marka fariinta la diro iyadoo la isticmaalayo API Producer Kafka, waxaa loo gudbiyaa qayb qaybsi ah, taas oo marka la eego fariinta iyo xaaladda ay hadda ku sugan tahay kooxda Kafka, soo celinaysa aqoonsiga qaybta qaybta fariinta loo dirayo. Habkan waxa lagu hirgeliyay Java iyada oo loo marayo Interface Partitioner.

Interface-kaani wuxuu u eg yahay sidan:

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

Hirgelinta Qaybiyuhu wuxuu isticmaalaa algoorithmamka hashing-ga caadiga ah ee ujeeddada guud ee furaha si loo go'aamiyo qaybinta, ama wareega-wareegga haddii aan furaha la cayimin. Qiimahan caadiga ah ayaa si fiican u shaqeeya inta badan kiisaska. Si kastaba ha ahaatee, mustaqbalka waxaad rabi doontaa inaad adigu qorto.

Qoritaanka istaraatijiyad qaybintaada

Aynu eegno tusaale meesha aad rabto inaad dirto xogta badan oo ay la socoto culayska fariinta. Culayska ku jira tusaalaheenna waa tilmaamid si aad u dhigato akoonnada ciyaarta. Tilmaantu waa shay aan rabno in naloo dammaanad qaado inaan waxba laga beddelin gudbinta oo aan rabno inaan hubinno in nidaam korka oo la aamini karo oo keliya uu bilaabi karo tilmaamaha. Xaaladdan oo kale, nidaamyada dirida iyo soo-dhowaynta waxay ku heshiiyaan isticmaalka saxiixa si loo xaqiijiyo farriinta.
Sida caadiga ah JMS, waxaanu si fudud u qeexnaa hantida "saxiixa fariinta" waxaanu ku darnaa fariinta. Si kastaba ha ahaatee, Kafka nama siiso hab lagu gudbiyo xogta badan, kaliya furaha iyo qiimaha.

Maadaama qiimuhu yahay xawilaadda xawilaadda bangiga oo aan rabno inaan ilaalinno daacadnimadeeda, ma hayno doorasho aan ahayn inaan qeexno qaabka xogta si aan u isticmaalno furaha. Anaga oo u malaynayna in aanu u baahanahay aqoonsiga akoon si loo qaybiyo, mar hadii dhamaan fariimaha la xidhiidha akoonku ay tahay in si habaysan loo habeeyo, waxaanu la iman doonaa qaab dhismeedka JSON ee soo socda:

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

Sababtoo ah qiimaha saxeexu wuu kala duwanaan doonaa iyadoo ku xidhan culayska la saarayo, istaraatijiyada hashing-ga caadiga ah ee Interitioner Partitioner ma noqon doonto mid la isku halleyn karo oo kooxeed fariimaha la xidhiidha. Sidaa darteed, waxaan u baahan doonaa inaan qorno istaraatijiyad noo gaar ah oo kala saari doonta furahan oo kala qaybin doonta qiimaha xisaabaadka.

Kafka waxaa ku jira jeegag-baaritaanno lagu ogaanayo musuqmaasuqa fariimaha ku jira bakhaarka waxayna leedahay sifooyin ammaan oo buuxa. Si kastaba ha ahaatee, shuruudaha warshadaha gaarka ah, sida kan sare, ayaa mararka qaarkood soo muuqda.

Istaraatiijiyadda qaybinta adeegsadaha waa in ay hubisaa in dhammaan fariimaha la xidhiidha ay ku dhammaadaan qayb isku mid ah. Iyadoo ay tani u muuqato mid fudud, shuruuddu waxay ku adkaan kartaa muhiimada dalbashada fariimaha la xidhiidha iyo sida ay u go'an tahay tirada qaybaha mawduuca.

Tirada qaybaha mowduuca ayaa isbedeli kara waqti ka dib, maadaama lagu dari karo haddii taraafikada ay dhaafto filashooyinka hore. Haddaba, furayaasha farriinta waxa lala xidhiidhin karaa qaybinta markii hore loo soo diray, taas oo tusinaysa qayb ka mid ah dawlad-goboleedka la wadaagayo inta u dhaxaysa tusaaleyaal soo-saareyaal.

Arrin kale oo ay tahay in la tixgeliyo waa xitaa qaybinta farriimaha qaybaha. Caadi ahaan, furayaasha si siman looguma qaybiyo fariimaha dhexdooda, iyo hawlaha xashiishku ma dammaanad qaadayaan qaybinta fariimaha cadaalada ah ee furayaal yar.
Waxaa muhiim ah in la ogaado in si kasta oo aad doorato inaad kala qaybiso fariimaha, kala qaybiyaha laftiisa ayaa laga yaabaa inuu u baahdo in dib loo isticmaalo.

Tixgeli shuruudaha lagu soo celinayo xogta u dhaxaysa kooxaha Kafka ee meelo kala duwan. Ujeedadaas awgeed, Kafka waxay la socotaa qalab khadka taliska ah oo la yiraahdo MirrorMaker, kaas oo loo isticmaalo in lagu akhriyo fariimaha hal koox oo loo wareejiyo mid kale.

MirrorMaker waa in uu fahmaa furayaasha mowduuca la naqdiyay si loo ilaaliyo nidaamka u dhexeeya fariimaha marka la soo koobayo inta u dhaxaysa kooxaha, maadaama tirada qaybaha mawduuca laga yaabo in aanay isku mid noqon labada kooxoodba.

Istaraatiijiyad qaybin gaar ah ayaa ah mid naadir ah, maadaama xashiishta caadiga ah ama wareega wareega ay si fiican u shaqeeyaan inta badan xaaladaha. Si kastaba ha noqotee, haddii aad u baahan tahay dammaanad dalbashada xooggan ama aad u baahan tahay inaad ka soo saartid xog-ururinta badan ee culeyska la saarayo, markaa qaybinta waa wax ay tahay inaad si dhow u eegto.

Miisaanka iyo waxtarka waxtarka ee Kafka waxay ka yimaadaan wareejinta qaar ka mid ah mas'uuliyadda dilaal dhaqameedka macmiilka. Xaaladdan oo kale, go'aan ayaa la gaadhay si loo qaybiyo fariimaha suurtagalka ah ee la xidhiidha dhowr macaamiil oo si barbar socda u shaqaynaya.

Dallaaliinta JMS waxay sidoo kale u baahan yihiin inay wax ka qabtaan shuruudahan. Waxa xiisaha lihi leh, habka loogu diro fariimaha la xidhiidha isla macaamilka, ee lagu hirgeliyay kooxaha Fariinta JMS (kala duwanaanshaha istiraatijiyadda isku dheelitirnaanta culeyska dhegdheg leh (SLB), sidoo kale waxay u baahan tahay soo-diraha inuu calaamadeeyo farriimaha inay la xiriiraan. Xaaladda JMS, dullaalku wuxuu mas'uul ka yahay inuu u diro kooxdan fariimaha la xidhiidha hal macaamiil badan, iyo wareejinta lahaanshaha kooxda haddii macaamilku dhaco.

Heshiisyada soo saaraha

Qaybintu maaha waxa kaliya ee la tixgeliyo marka fariimaha la dirayo. Aynu eegno hababka diritaanka() ee fasalka soo saaraha ee Java API:

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

Waa in isla markiiba la ogaadaa in labada habba ay soo celiyaan mustaqbalka, taas oo muujinaysa in hawlgalka dirista aan isla markiiba la fulin. Natiijadu waxay tahay in fariinta (ProducerRecord) loo qoro kaydiyaha dirista qayb kasta oo firfircoon oo loo diro dullaal ahaan sida dunta asalka ah ee maktabadda macmiilka Kafka. Iyadoo tani ay ka dhigayso wax aad u degdeg badan, waxay la macno tahay in codsiga aan khibradda lahayn uu lumin karo fariimaha haddii nidaamkiisa la joojiyo.

Sida had iyo jeer, waxaa jira hab lagu sameeyo hawlgalka dirida mid la isku halleyn karo oo kharashka ku baxaya. Baaxadda kaydkan waxa loo dejin karaa 0, dunta arjiga la dirayna waxa lagu qasbi doonaa in la sugo ilaa farriinta loo dirayo dallaalka la dhammaystirayo, sida soo socota:

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

Wax badan oo ku saabsan akhrinta fariimaha

Farriimaha akhrisku waxay leeyihiin waxyaabo dheeraad ah oo kakan oo u baahan in la qiyaaso. Si ka duwan JMS API, kaas oo socodsiin kara dhagaystaha fariinta isagoo ka jawaabaya fariinta, Consumer Kafka kaliya doorashada Aynu si qoto dheer u eegno habka codbixin ()loo isticmaalo ujeedadan:

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

Qiimaha soo celinta habka waa qaab dhismeed weel oo ka kooban walxo badan diiwaanka macaamiisha laga bilaabo dhawr qaybood oo suurtogal ah. diiwaanka macaamiisha lafteedu waa shay haye loogu talagalay lammaane-qiimaha muhiimka ah oo leh xog-ururinta badan, sida qaybinta laga soo qaatay.

Sida lagu falanqeeyay cutubka 2, waa in aan maskaxda ku haynaa waxa ku dhacaya fariimaha ka dib marka si guul leh loo farsameeyo ama aan lagu guulaysan, tusaale ahaan, haddii macmiilku awoodi waayo inuu farsameeyo fariinta ama haddii ay soo riddo. Gudaha JMS, tan waxaa lagu maamulay qaab qirasho. Dallaalku waxa uu tirtiri doonaa fariinta si guul leh loo farsameeyay, ama waxa uu dib u soo gudbin doonaa fariinta cayriinka ah ama been abuurka ah (isagoo u malaynaya in wax kala iibsi la isticmaalay).
Kafka waxay u shaqeysaa si aad u kala duwan. Farriimaha laguma tirtiro dullaal ka dib marka la saxo, iyo waxa ku dhaca fashilka waa mas'uuliyadda koodka saxitaanka laftiisa.

Sida aan sheegnay, kooxda macaamiishu waxay la xidhiidhaan ka-goynta log-ka. Booska log ee laxidhiidha dhimistan waxay u dhigantaa fariinta xigta ee lagu soo saarayo jawaabta codbixin (). Barta wakhtiga marka ay tani kordheyso ayaa muhiim u ah akhriska.

Ku soo noqoshada qaabka akhriska ee hore looga hadlay, habaynta fariintu waxay ka kooban tahay saddex marxaladood:

  1. Soo celi fariinta wax akhrinta
  2. Ka socodsii fariinta.
  3. Xaqiiji fariinta

Macaamilka Kafka wuxuu la yimaadaa ikhtiyaar qaabeynta karti.auto.commit. Kani waa habayn caadi ah oo inta badan la isticmaalo, sida ku badan goobaha ay ku jiraan ereyga "auto".

Kafka 0.10 ka hor, macmiilka isticmaalaya ikhtiyaarkan ayaa soo diri doona ka-goynta fariintii ugu dambaysay ee lagu akhriyo wicitaanka xiga codbixin () ka dib habaynta. Tani waxay ka dhigan tahay in farriimaha kasta oo hore loo keenay dib loo habayn karo haddii macmiilku mar hore farsameeyay balse si lama filaan ah loo burburiyay ka hor inta aan la wicin. codbixin (). Sababtoo ah dilaalku ma hayo wax gobol ah oo ku saabsan inta jeer ee fariinta la akhriyey, macaamilka xiga ee soo celiya fariinta ma ogaan doono wax xun inay dhaceen. Dabeecaddani waxay ahayd mid been abuur ah. Maqnaanshaha waxaa la sameeyay kaliya haddii fariinta si guul leh loo farsameeyay, laakiin haddii macmiilku iska soo rido, dallaaliyuhu wuxuu u diri doonaa fariin isku mid ah mar kale macmiil kale. Dhaqankani waxa uu ahaa mid waafaqsan dammaanadda gudbinta fariinta"ugu yaraan hal marΒ«.

Kafka 0.10, koodhka macmiilka waa la bedelay si ay ballantu u kiciso marmar maktabadda macmiilka, sida loo habeeyey. auto.commit.interval.ms. Dhaqankani waa meel u dhaxaysa JMS AUTO_ACKNOWLEDGE iyo DUPS_OK_ACKNOWLEDGE qaababka. Markaad isticmaalayso autocommit, fariimaha waa la samayn karaa iyada oo aan loo eegin in dhab ahaantii la farsameeyay iyo in kale - tani waxay ku dhici kartaa kiiska macaamilka gaabis ah. Haddii macaamiil uu iska soo xaaqo, fariimaha waxaa soo doonay macmiilka xiga, oo ka bilaabanaya booska loo heellan yahay, taas oo keeni karta fariin la seego. Xaaladdan oo kale, Kafka ma lumin fariimaha, koodhka akhriska kaliya ma socodsiin iyaga.

Habkani waxa uu leeyahay ballan la mid ah kan nooca 0.9: fariimaha waa la farsamayn karaa, laakiin haddii ay ku guuldareystaan, offset waxaa laga yaabaa in aan la go'aamin, suurto gal ah in ay keento in la labanlaabo. Inta badan fariimaha aad keensato markaad fulinayso codbixin (), dhibaatadani waa ka sii badan tahay.

Sida lagu falanqeeyay "Akhrinta Fariimaha Safka" ee bogga 21, ma jiraan wax la mid ah gaarsiinta fariinta hal mar ee nidaamka fariimaha marka hababka guuldarada la tixgeliyo.

Kafka, waxaa jira laba siyaabood oo loo sameeyo (gudasho) dhimis (offset): si toos ah iyo gacanta. Labada xaaladoodba, fariimaha waxa la farsamayn karaa dhawr jeer haddii farriinta la habeeyey laakiin lagu guul darraystay ballan-qaadka ka hor. Waxa kale oo aad dooran kartaa in aanad haba yaraatee fariinta ka hawlgelin haddii dembigu ka dhacay gadaasha oo koodkaaga la dhammaystiray ka hor inta aan la hawlgelin (laga yaabee in Kafka 0.9 iyo ka hor).

Waxaad ku xakameyn kartaa habsocodka gaf-dejinta buug-gacmeedka API macmiilka Kafka adiga oo dejinaya cabbirka karti.auto.commit si been ah oo si cad loogu waco mid ka mid ah hababka soo socda:

void commitSync();
void commitAsync();

Haddii aad rabto in aad fariinta ku socodsiiso "ugu yaraan hal mar", waa in aad gacanta ku samaysaa kaabista CommitteeSync()adoo fulinaya amarkan isla markiiba ka dib habaynta fariimaha.

Hababkani ma oggola in farriimaha la qiro ka hor inta aan la farsamayn, laakiin waxba ma sameeyaan si ay u baabi'iyaan dib u dhac ku yimaada habaynta iyada oo la siinayo muuqaalka macaamil ganacsi. Kafka wax kala iibsi ma jiro. Macmiilku awood uma laha inuu sameeyo waxa soo socda:

  • Si toos ah ugu rogo fariin been abuur ah Macaamiisha laftoodu waa inay xalliyaan waxyaabaha ka reeban culayska mushaharka ee dhibka leh iyo maqnaanshaha dhabarka, maadaama aanay isku hallayn karin dullaalku inuu dib u keeno fariimaha.
  • U dir fariimaha mowduucyo badan hal hawlgal oo atomiga ah. Sida aan arki doono dhawaan, xakamaynta mawduucyo kala duwan iyo qaybo kala duwan waxay ku noolaan karaan mashiinada kala duwan ee kutlada Kafka kuwaas oo aan isku dubaridin wax kala iibsiga marka la diro. Waqtiga qoritaankan, xoogaa shaqo ah ayaa la qabtay si tan loo suurtageliyo KIP-98.
  • Ku xidhiidh akhrinta hal fariin hal mawduuc iyo u dirida fariin kale mawduuc kale. Mar labaad, dhismaha Kafka wuxuu ku xiran yahay mashiinno badan oo madaxbannaan oo u shaqeeya sidii hal bas oo aan la isku dayin in la qariyo tan. Tusaale ahaan, ma jiraan qaybo API ah oo kuu ogolaanaya inaad ku xidho macaamilka ΠΈ Soo-saare macaamil ganacsi. Gudaha JMS, tan waxaa bixiya shayga Kalfadhigakuwaas oo laga abuuray Farriinta Soosaarayaasha ΠΈ Fariin Macaamiisha.

Haddii aynaan isku hallayn karin wax kala iibsiga, sidee ayaan u bixin karnaa semantics ku dhow kuwa ay bixiyaan nidaamyada fariimaha dhaqameed?

Haddii ay jirto suurtagalnimada in macaamiishu wax ka dhimitaankoodu uu kordho ka hor inta aan fariinta la hawlgelin, sida marka uu jiro shil macaamiil ah, markaas macaamiishu ma laha dariiqo uu ku ogaado in kooxda macaamiishu ay seegtay fariinta markii loo qoondeeyay qaybinta. Markaa hal istaraatiijiyad ayaa ah in dib loogu celiyo booskii hore. Kafka macmiilka API wuxuu bixiyaa hababka soo socda tan:

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

Habka raadi () waxaa loo isticmaali karaa hab
offsetsForTimes (Map timestampsToSearch) in dib loogu noqdo xaalad wakhti gaar ah oo hore.

Si daahsoon, adeegsiga habkan waxay ka dhigan tahay inay aad ugu dhowdahay in qaar ka mid ah fariimaha hore loo farsameeyay dib loo akhrin doono oo dib loo habayn doono. Si taas looga fogaado, waxaan isticmaali karnaa akhriska awoodda leh, sida lagu qeexay cutubka 4, si aan ula soconno farriimaha hore loo arkay loona tirtiro nuqullada.

Taas beddelkeeda, koodhkaaga macaamilka waxa lagu hayn karaa mid fudud, ilaa inta fariinta luminta ama nuqul ka mid ah la aqbali karo. Marka aan eegno kiisaska isticmaalka ee Kafka sida caadiga ah loo isticmaalo, sida maaraynta dhacdooyinka log, mitirka, riixida raadraaca, iwm., waxaan ogaanay in luminta fariimaha shakhsi ahaaneed aysan u badneyn inay saameyn weyn ku yeeshaan codsiyada ku xeeran. Xaaladahan oo kale, qiyamka caadiga ah waa mid si fiican loo aqbali karo. Dhanka kale, haddii codsigaagu u baahan yahay inuu soo diro lacag-bixinno, waa inaad si taxadar leh u daryeesho fariin kasta oo gaar ah. Dhammaan waxa ay hoos ugu soo dhacayaan macnaha guud.

U fiirsashada shakhsi ahaaneed waxay muujinaysaa in marka xoojinta farriimaha kordho, qiimaha fariin kasta uu hoos u dhaco. Farriimaha waaweyni waxay u muuqdaan kuwo qiimo leh marka loo eego qaab la isku daray.

Helitaanka Sare

Habka Kafka ee helitaanka sare aad ayuu uga duwan yahay habka ActiveMQ. Kafka waxaa loo qaabeeyey agagaarka kooxo-kooxeed halkaas oo dhammaan tusaalooyinka dullaalku ay helaan oo ay qaybiyaan fariimaha isku mar.

Kutlada Kafka waxay ka kooban tahay tusaaleyaal badan oo dilaaliinta ah oo ku shaqeeya adeegayaal kala duwan. Kafka waxaa loogu talagalay in lagu shaqeeyo qalabka caadiga ah ee goonida ah, halkaas oo nood kastaa uu leeyahay kayd gaar ah. Isticmaalka kaydinta kuxiran shabakada (SAN) laguma talinayo sababtoo ah qanjidhada xisaabinta badan ayaa ku tartami kara wakhti.Π«e kaydinta dhexdooda oo abuura isku dhacyo.

Kafka waa had iyo jeer on nidaamka. Isticmaalayaal badan oo Kafka ah waligood ma xidhin rucubyadooda oo software-ku had iyo jeer wuxuu cusbooneysiiyaa dib u bilow xiriir ah. Tan waxaa lagu gaaraa iyadoo la damaanad qaadayo ku-habboonka nuqulkii hore ee fariimaha iyo isdhexgalka ka dhexeeya dallaaliinta.

Dillaaliinta ku xidhan koox server ah Zookeeper, Kaas oo u dhaqma sidii qaabeynta xogta diiwaanka waxaana loo istcimaalaa iskudubarid doorarka dillaal walba. ZooKeeper lafteedu waa nidaam qaybsan oo bixiya helitaan sare iyada oo loo marayo ku celcelinta macluumaadka iyada oo la dhisayo tirada.

Xaaladda aasaasiga ah, mawduuc ayaa laga dhex abuuray kooxda Kafka oo leh sifooyinka soo socda:

  • Tirada qaybaha. Sidii hore looga hadlay, qiimaha saxda ah ee halkan lagu isticmaalo waxay ku xiran tahay heerka la rabo ee akhriska barbar socda.
  • Cunsurka soo noqnoqda (factor) ayaa go'aamiya inta jeer ee dilaaliinta ee kutlada ay tahay in ay ka koobnaadaan diiwaannada qaybtan.

Adeegsiga ZooKeepers isuduwidda, Kafka waxay isku daydaa inay si cadaalad ah ugu qaybiso qaybo cusub dullaaliinta kutlada. Tan waxa sameeya hal tusaale oo u shaqeeya sidii Controller.

Wakhtiga runtime Mawduuc kasta oo qaybinta Maareeye doorarka u dhiibo dilaal hogaamiye (hogaamiye, sayid, soo jeedin) iyo kuwa raacsan (raacayaal, addoomo, kuwo hoos yimaada). Dillaalku, oo u shaqeeya sida hoggaamiyaha qaybtan, ayaa mas'uul ka ah helitaanka dhammaan farriimaha ay u soo diraan soo-saarayaashu iyo u qaybinta farriimaha macaamiisha. Marka fariimaha loo diro qaybta mawduuca, waxa lagu celceliyaa dhammaan qanjidhada dilaaliinta ee u dhaqmaya sidii kuwa raacsan qaybtaas. Nod kasta oo ka kooban logyada qaybinta ayaa loo yaqaan nuqul. Dallaalku waxa uu u dhaqmi karaa sidii hoggaamiye qayb qaybeedyada qaar iyo sida raacsane kuwa kale.

Taageere ka kooban dhammaan fariimaha uu hayo hoggaamiyaha ayaa la yiraahdaa nuqul la mideeyey ( nuqul ku jira xaalad la wada siman yahay, nuqul ku dhex jira). Haddii dallaal u shaqeeya sidii hoggaamiye qayb qaybi uu hoos u dhaco, dallaal kasta oo cusub ama la mid ah qaybtaas wuxuu la wareegi karaa doorka hoggaamiyaha. Waa naqshad waara oo cajiib ah.

Qayb ka mid ah qaabeynta soo saaraha ayaa ah cabbirka acks, kaas oo go'aaminaya inta nuqul ee ay tahay in ay qirto ( qiri) helitaanka fariinta ka hor inta aan la sii wadin dirida arjiga: 0, 1, ama dhammaan. Hadii loo dhigo oo dhan, ka dibna marka fariin la helo, hogaamiyuhu wuxuu dib ugu soo diri doonaa xaqiijin soo saaraha isla marka uu helo xaqiijinta ( qirashada) diiwaanka dhowr tilmaamood (ay ku jirto lafteeda) oo lagu qeexay goobta mawduuca. min.insync.replicas (default 1). Haddii fariinta aan si guul leh loo soo celin karin, markaas soo saaraha ayaa tuuri doona codsi ka reeban (NotEnoughReplicas ama NotEnoughReplicasAfterAppend).

Qaabaynta caadiga ah waxay abuurtaa mawduuc leh qodobka soo noqnoqda ee 3 (1 hogaamiye, 2 taageere qayb kasta) iyo cabbirka min.insync.replicas waxaa loo dejiyay 2. Xaaladdan oo kale, kooxdu waxay u oggolaan doontaa mid ka mid ah dilaaliinta maamusha qaybta mawduuca inuu hoos u dhaco iyada oo aan saameyn ku yeelan codsiyada macmiilka.

Tani waxay dib inoogu soo celinaysaa ganacsigii hore loo yaqaanay ee u dhexeeya waxqabadka iyo isku halaynta. Ku-noqoshada waxay ku dhacdaa kharashka wakhtiga sugitaanka ee dheeraadka ah ee xaqiijinta ( qirashada) taageerayaasha. Inkasta oo, sababtoo ah waxay ku socotaa isbarbar, ku celcelinta ugu yaraan saddex nuurad waxay leedahay waxqabad la mid ah laba (iyaga oo iska indhatiraya kororka isticmaalka xawaaraha shabakada).

Adigoo isticmaalaya nidaamkan ku-noqoshada, Kafka waxay si xariifnimo leh uga fogaataa baahida loo qabo in jidh ahaan loogu qoro fariin kasta isku dheji (). Farriin kasta oo soo-saaraha soo diro waxaa lagu qori doonaa log-ga qaybinta, laakiin sida lagu falanqeeyay cutubka 2, qorista fayl waxaa marka hore lagu sameeyaa kaydka nidaamka qalliinka. Haddii farriintan lagu soo koobo tusaale kale oo Kafka ah oo ay ku jirto xusuusta, luminta hoggaamiyaha macnaheedu maaha in farriinta lafteeda ay luntay - waxaa la wareegi kara nuqul la mid ah.
Diidmada in la sameeyo qaliinka isku dheji () Waxay ka dhigan tahay in Kafka ay heli karto farriimaha sida ugu dhakhsaha badan ee ay u qori karto xusuusta. Taa beddelkeeda, inta aad ka fogaan karto inaad ku daadiso xusuusta diskka, way ka sii fiicnaan doontaa. Sababtan awgeed, maaha wax aan caadi ahayn in dilaaliinta Kafka loo qoondeeyo 64 GB ama in ka badan oo xusuusta ah. Isticmaalka xusuusta ayaa ka dhigan in hal tusaale oo Kafka ah uu si fudud ugu socon karo xawaare kumanyaal jeer ka dhaqso badan dillaalka farriinta dhaqameed.

Kafka sidoo kale waxaa loo habeyn karaa si loo codsado qalliinka isku dheji () baakadaha fariinta. Maaddaama wax kasta oo Kafka ku yaal ay yihiin kuwo ku jihaysan xirmo, run ahaantii waxay si fiican ugu shaqeysaa kiisas badan oo la isticmaalo waana aalad waxtar u leh isticmaaleyaasha u baahan dammaanad aad u xooggan. Inta badan waxqabadka saafiga ah ee Kafka waxay ka timaadaa farriimaha loo diro dilaal ahaan baakidh ahaan iyo in farriimahan laga akhriyo dilaal si isdaba joog ah iyadoo la adeegsanayo koobi eber hawlgallada (hawlaha inta lagu jiro hawsha koobiyaynta xogta meel xusuusta ah oo aan la fulin). Midda dambe waa waxqabad weyn iyo faa'iido kheyraad waxaana kaliya oo suurtagal ah iyada oo la adeegsanayo isticmaalka xogta qaab-dhismeedka hoose ee qeexaya nidaamka qaybinta.

Waxqabad aad u wanaagsan ayaa suurtagal ka ah kooxda Kafka marka loo eego hal dilaal oo Kafka ah, sababtoo ah qaybaha mawduucyada ayaa kor u qaadi kara mashiinno badan oo kala duwan.

Natiijooyinka

Cutubkan, waxaanu eegnay sida qaab-dhismeedka Kafka uu dib u sawiro xidhiidhka ka dhexeeya macaamiisha iyo dilaaliinta si ay u bixiyaan dhuumo fariimo oo aad u adag, iyada oo wax-soo-saarku marar badan ka weyn yahay tan dhexdhexaadiyaha fariinta caadiga ah. Waxaan ka wada hadalnay shaqeynta ay isticmaasho si loo gaaro tan waxaanan si kooban u eegnay qaab-dhismeedka codsiyada bixiya shaqadan. Cutubka soo socda, waxaan ku eegi doonaa dhibaatooyinka caamka ah ee codsiyada ku saleysan fariimaha ay u baahan yihiin inay xalliyaan oo ay ka hadlaan xeeladaha lagula tacaalayo. Waxaan ku soo gabagabeyn doonaa cutubka anagoo tixgalinayna sida looga hadlo tignoolajiyada fariimaha guud ahaan si aad u qiimeyso ku haboonaantooda kiisaska isticmaalkaaga.

Qayb hore oo la turjumay: Fahamka dilaaliinta fariinta. Barashada makaanikada fariimaha ee ActiveMQ iyo Kafka. Cutubka 1aad

Turjumaadii waa la sameeyay: tele.gg/middle_java

In la sii wado ...

Isticmaalayaasha diiwaangashan oo keliya ayaa ka qaybqaadan kara sahanka. Soo gal, soo dhawoow.

Kafka ma lagu isticmaalaa ururkaaga?

  • Haa

  • No

  • Markii hore la isticmaali jiray, hadda maaha

  • Waxaan qorsheyneynaa inaan isticmaalno

38 isticmaale ayaa u codeeyay. 8 isticmaale ayaa ka aamusay.

Source: www.habr.com

Add a comment