Kafka izstrÄdÄja LinkedIn, lai apietu dažus tradicionÄlo ziÅojumu starpnieku ierobežojumus un izvairÄ«tos no nepiecieÅ”amÄ«bas iestatÄ«t vairÄkus ziÅojumu starpniekus dažÄdÄm mijiedarbÄ«bÄm no viena punkta uz otru, kas ir aprakstÄ«ts Ŕīs grÄmatas sadaÄ¼Ä "PalielinÄÅ”ana un samazinÄÅ”ana" 28. lpp. LietoÅ”anas gadÄ«jumi LinkedIn lielÄ mÄrÄ ir paļÄvies uz ļoti liela datu apjoma, piemÄram, lapu klikŔķu un piekļuves žurnÄlu, vienvirziena ievadÄ«Å”anu, vienlaikus ļaujot Å”os datus izmantot vairÄkÄm sistÄmÄm, neietekmÄjot ražotÄju vai citu patÄrÄtÄju produktivitÄti. Faktiski Kafkas pastÄvÄÅ”anas iemesls ir iegÅ«t tÄdu ziÅojumapmaiÅas arhitektÅ«ru, kÄdu apraksta Universal Data Pipeline.
Å emot vÄrÄ Å”o galÄ«go mÄrÄ·i, dabiski radÄs citas prasÄ«bas. Kafkam vajadzÄtu:
Esiet ÄrkÄrtÄ«gi Ätrs
NodroÅ”iniet lielÄku joslas platumu, strÄdÄjot ar ziÅojumiem
Atbalstiet izdevÄja-abonenta un punkta-punkta modeļus
NebremzÄjiet, pievienojot patÄrÄtÄjus. PiemÄram, gan rindas, gan tÄmas veiktspÄja programmÄ ActiveMQ pasliktinÄs, jo galamÄrÄ·Ä« pieaug patÄrÄtÄju skaits.
jÄbÅ«t horizontÄli mÄrogojamam; ja viens starpnieks, kurÅ” saglabÄ ziÅojumus, var to darÄ«t tikai ar maksimÄlo diska Ätrumu, tad ir lietderÄ«gi izmantot vairÄk nekÄ vienu starpnieka gadÄ«jumu, lai palielinÄtu veiktspÄju.
Ierobežojiet piekļuvi ziÅojumu glabÄÅ”anai un atkÄrtotai izgÅ«Å”anai
Lai to visu panÄktu, Kafka pieÅÄma arhitektÅ«ru, kas no jauna definÄja klientu un ziÅojumapmaiÅas brokeru lomas un pienÄkumus. JMS modelis ir ļoti orientÄts uz brokeri, kur brokeris ir atbildÄ«gs par ziÅojumu izplatÄ«Å”anu un klientiem ir jÄuztraucas tikai par ziÅojumu nosÅ«tÄ«Å”anu un saÅemÅ”anu. SavukÄrt Kafka ir orientÄta uz klientu, un klients uzÅemas daudzas tradicionÄlÄ brokera funkcijas, piemÄram, godÄ«gu atbilstoÅ”u ziÅojumu izplatÄ«Å”anu patÄrÄtÄjiem, apmaiÅÄ pret ÄrkÄrtÄ«gi Ätru un mÄrogojamu brokeri. CilvÄkiem, kuri ir strÄdÄjuÅ”i ar tradicionÄlajÄm ziÅojumapmaiÅas sistÄmÄm, darbs ar Kafku prasa fundamentÄlas domÄÅ”anas izmaiÅas.
Å is inženierijas virziens ir ļÄvis izveidot ziÅojumapmaiÅas infrastruktÅ«ru, kas spÄj palielinÄt caurlaidspÄju par daudzÄm kÄrtÄm salÄ«dzinÄjumÄ ar parasto brokeri. KÄ mÄs redzÄsim, Ŕī pieeja nÄk ar kompromisiem, kas nozÄ«mÄ, ka Kafka nav piemÄrota noteikta veida darba slodzei un instalÄtai programmatÅ«rai.
Vienotais galamÄrÄ·a modelis
Lai izpildÄ«tu iepriekÅ” aprakstÄ«tÄs prasÄ«bas, Kafka ir apvienojis publicÄÅ”anu-abonÄÅ”anu un ziÅojumapmaiÅu no viena punkta uz vienu galamÄrÄ·i. temats. Tas mulsina cilvÄkus, kuri ir strÄdÄjuÅ”i ar ziÅojumapmaiÅas sistÄmÄm, kur vÄrds "tÄma" attiecas uz apraides mehÄnismu, no kura (no tÄmas) lasÄ«Å”ana nav ilgstoÅ”a. Kafkas tÄmas ir jÄuzskata par hibrÄ«da galamÄrÄ·a veidu, kÄ noteikts Ŕīs grÄmatas ievadÄ.
Å Ä«s nodaļas atlikuÅ”ajÄ daļÄ, ja vien mÄs nepÄrprotami nenorÄdÄ«sim citÄdi, termins "tÄma" attiecas uz Kafkas tÄmu.
Lai pilnÄ«bÄ saprastu, kÄ tÄmas uzvedas un kÄdas garantijas tÄs sniedz, vispirms ir jÄaplÅ«ko, kÄ tÄs tiek Ä«stenotas KafkÄ. Katrai Kafkas tÄmai ir savs žurnÄls.
RažotÄji, kas sÅ«ta ziÅojumus Kafkai, raksta Å”ajÄ Å¾urnÄlÄ, un patÄrÄtÄji lasa no žurnÄla, izmantojot norÄdes, kas pastÄvÄ«gi virzÄs uz priekÅ”u. Periodiski Kafka dzÄÅ” vecÄkÄs žurnÄla daļas neatkarÄ«gi no tÄ, vai ziÅojumi Å”ajÄs daļÄs ir lasÄ«ti vai nÄ. Kafkas dizaina galvenÄ daļa ir tÄda, ka brokerim ir vienalga, vai ziÅojumi tiek lasÄ«ti vai nÄ ā tÄ ir klienta atbildÄ«ba.
Termini "žurnÄls" un "rÄdÄ«tÄjs" neparÄdÄs Kafkas dokumentÄcija. Å ie labi zinÄmie termini Å”eit tiek lietoti, lai palÄ«dzÄtu saprast.
Å is modelis pilnÄ«gi atŔķiras no ActiveMQ, kur ziÅojumi no visÄm rindÄm tiek glabÄti vienÄ Å¾urnÄlÄ, un brokeris atzÄ«mÄ ziÅojumus kÄ izdzÄstus pÄc to izlasÄ«Å”anas.
Tagad iedziļinÄsimies mazliet dziļÄk un apskatÄ«sim tÄmu žurnÄlu sÄ«kÄk.
Kafka žurnÄls sastÄv no vairÄkÄm starpsienÄm (Skaitlis 3-1). Kafka garantÄ stingru pasÅ«tÄ«Å”anu katrÄ nodalÄ«jumÄ. Tas nozÄ«mÄ, ka ziÅojumi, kas rakstÄ«ti nodalÄ«jumÄ noteiktÄ secÄ«bÄ, tiks nolasÄ«ti tÄdÄ paÅ”Ä secÄ«bÄ. Katrs nodalÄ«jums tiek Ä«stenots kÄ ritoÅ”ais žurnÄlfails, kas satur apakÅ”kopa (apakÅ”kopa) no visiem ziÅojumiem, ko tÄmai nosÅ«tÄ«juÅ”i tÄs veidotÄji. IzveidotajÄ tÄmÄ pÄc noklusÄjuma ir viens nodalÄ«jums. Starpsienu ideja ir Kafkas galvenÄ ideja par horizontÄlo mÄrogoÅ”anu.
AttÄls 3-1. Kafka starpsienas
Kad producents nosÅ«ta ziÅojumu Kafkas tÄmai, tas izlemj, uz kuru nodalÄ«jumu nosÅ«tÄ«t ziÅojumu. MÄs to aplÅ«kosim sÄ«kÄk vÄlÄk.
ZiÅu lasÄ«Å”ana
Klients, kas vÄlas lasÄ«t ziÅojumus, pÄrvalda nosauktu rÄdÄ«tÄju patÄrÄtÄju grupa, kas norÄda uz kompensÄt ziÅojumi nodalÄ«jumÄ. NobÄ«de ir pakÄpeniska pozÄ«cija, kas sÄkas ar 0 nodalÄ«juma sÄkumÄ. Å Ä« patÄrÄtÄju grupa, kas norÄdÄ«ta API, izmantojot lietotÄja definÄto grupas_id, atbilst viens loÄ£isks patÄrÄtÄjs vai sistÄma.
LielÄkÄ daļa ziÅojumapmaiÅas sistÄmu nolasa datus no galamÄrÄ·a, izmantojot vairÄkus gadÄ«jumus un pavedienus, lai paralÄli apstrÄdÄtu ziÅojumus. TÄdÄjÄdi parasti ir daudz patÄrÄtÄju gadÄ«jumu, kuriem ir viena un tÄ pati patÄrÄtÄju grupa.
LasÄ«Å”anas problÄmu var attÄlot Å”Ädi:
TÄmai ir vairÄkas sadaļas
VairÄkas patÄrÄtÄju grupas var izmantot tÄmu vienlaikus
PatÄrÄtÄju grupai var bÅ«t vairÄki atseviŔķi gadÄ«jumi
Å Ä« ir netriviÄla daudzu pret daudziem problÄma. Lai saprastu, kÄ Kafka apstrÄdÄ attiecÄ«bas starp patÄrÄtÄju grupÄm, patÄrÄtÄju gadÄ«jumiem un nodalÄ«jumiem, apskatÄ«sim vairÄkus pakÄpeniski sarežģītÄkus lasÄ«Å”anas scenÄrijus.
PatÄrÄtÄji un patÄrÄtÄju grupas
Å emsim par sÄkumpunktu tÄmu ar vienu nodalÄ«jumu (Skaitlis 3-2).
AttÄls 3-2. PatÄrÄtÄjs lasa no nodalÄ«juma
Kad patÄrÄtÄja instance Å”ai tÄmai izveido savienojumu ar savu group_id, tai tiek pieŔķirts lasÄ«Å”anas nodalÄ«jums un nobÄ«de Å”ajÄ nodalÄ«jumÄ. Å Ä«s nobÄ«des pozÄ«cija klientÄ ir konfigurÄjama kÄ rÄdÄ«tÄjs uz jaunÄko pozÄ«ciju (jaunÄkais ziÅojums) vai agrÄko pozÄ«ciju (vecÄkais ziÅojums). PatÄrÄtÄjs pieprasa (aptaujÄ) ziÅas no tÄmas, kas liek tos secÄ«gi nolasÄ«t no žurnÄla.
NobÄ«des pozÄ«cija regulÄri tiek atgriezta Kafkai un tiek saglabÄta kÄ ziÅojumi iekÅ”ÄjÄ tÄmÄ _patÄrÄtÄju_kompensÄcijas. AtŔķirÄ«bÄ no parasta brokera lasÄ«tÄs ziÅas joprojÄm netiek izdzÄstas, un klients var attÄ«t nobÄ«di, lai atkÄrtoti apstrÄdÄtu jau skatÄ«tos ziÅojumus.
Kad otrs loÄ£iskais patÄrÄtÄjs izveido savienojumu, izmantojot citu group_id, tas pÄrvalda otru rÄdÄ«tÄju, kas ir neatkarÄ«gs no pirmÄ (Skaitlis 3-3). TÄdÄjÄdi Kafka tÄma darbojas kÄ rinda, kurÄ ir viens patÄrÄtÄjs, un kÄ parasta publikÄcijas-abonÄÅ”anas (pub-abonÄÅ”anas) tÄma, kuru abonÄ vairÄki patÄrÄtÄji, kÄ arÄ« papildu ieguvums, ka visi ziÅojumi tiek saglabÄti un tos var apstrÄdÄt vairÄkas reizes.
AttÄls 3-3. Divi patÄrÄtÄji dažÄdÄs patÄrÄtÄju grupÄs lasa no viena nodalÄ«juma
PatÄrÄtÄji patÄrÄtÄju grupÄ
Kad viena patÄrÄtÄja instance nolasa datus no nodalÄ«juma, tÄ pilnÄ«bÄ kontrolÄ rÄdÄ«tÄju un apstrÄdÄ ziÅojumus, kÄ aprakstÄ«ts iepriekÅ”ÄjÄ sadaļÄ.
Ja vairÄki patÄrÄtÄju gadÄ«jumi ar vienu un to paÅ”u group_id bija saistÄ«ti ar tÄmu ar vienu nodalÄ«jumu, tad instancei, kas savienojÄs pÄdÄjÄ, tiks dota kontrole pÄr rÄdÄ«tÄju un no Ŕī brīža tÄ saÅems visus ziÅojumus (Skaitlis 3-4).
AttÄls 3-4. Divi patÄrÄtÄji vienÄ patÄrÄtÄju grupÄ lasa no viena nodalÄ«juma
Å o apstrÄdes veidu, kurÄ patÄrÄtÄju gadÄ«jumu skaits pÄrsniedz nodalÄ«jumu skaitu, var uzskatÄ«t par sava veida ekskluzÄ«vu patÄrÄtÄju. Tas var bÅ«t noderÄ«gi, ja jums ir nepiecieÅ”ama "aktÄ«va-pasÄ«vÄ" (vai "karsti-silta") jÅ«su patÄrÄtÄju gadÄ«jumu klasterizÄcija, lai gan vairÄku patÄrÄtÄju paralÄla darbinÄÅ”ana ("aktÄ«vais-aktÄ«vs" vai "karsts-karsts") ir daudz raksturÄ«gÄka nekÄ gaidÄ«Å”anas režīmÄ.
Å Ä« ziÅojumu izplatÄ«Å”anas darbÄ«ba, kas aprakstÄ«ta iepriekÅ”, var bÅ«t pÄrsteidzoÅ”a salÄ«dzinÄjumÄ ar parastÄs JMS rindas darbÄ«bu. Å ajÄ modelÄ« ziÅojumi, kas nosÅ«tÄ«ti uz rindu, tiks vienmÄrÄ«gi sadalÄ«ti starp diviem patÄrÄtÄjiem.
VisbiežÄk, veidojot vairÄkus patÄrÄtÄju gadÄ«jumus, mÄs to darÄm, lai paralÄli apstrÄdÄtu ziÅojumus vai palielinÄtu lasÄ«Å”anas Ätrumu, vai arÄ« lai palielinÄtu lasÄ«Å”anas procesa stabilitÄti. TÄ kÄ tikai viens patÄrÄtÄja gadÄ«jums vienlaikus var nolasÄ«t datus no nodalÄ«juma, kÄ tas tiek panÄkts programmÄ Kafka?
Viens veids, kÄ to izdarÄ«t, ir izmantot vienu patÄrÄtÄja gadÄ«jumu, lai izlasÄ«tu visus ziÅojumus un nosÅ«tÄ«tu tos pavedienu pÅ«lam. Lai gan Ŕī pieeja palielina apstrÄdes caurlaidspÄju, tÄ palielina patÄrÄtÄja loÄ£ikas sarežģītÄ«bu un nepalielina lasÄ«Å”anas sistÄmas stabilitÄti. Ja viens patÄrÄtÄja eksemplÄrs pazÅ«d strÄvas padeves pÄrtraukuma vai lÄ«dzÄ«ga notikuma dÄļ, atÅemÅ”ana tiek pÄrtraukta.
Kanoniskais veids, kÄ atrisinÄt Å”o problÄmu KafkÄ, ir izmantot bŠvairÄk starpsienu.
SadalīŔana
Starpsienas ir galvenais mehÄnisms tÄmas lasÄ«Å”anai un mÄrogoÅ”anai, kas pÄrsniedz viena starpnieka instances joslas platumu. Lai to labÄk izprastu, aplÅ«kosim situÄciju, kad ir tÄma ar diviem nodalÄ«jumiem un viens patÄrÄtÄjs abonÄ Å”o tÄmu (Skaitlis 3-5).
AttÄls 3-5. Viens patÄrÄtÄjs lasa no vairÄkiem nodalÄ«jumiem
Å ajÄ scenÄrijÄ patÄrÄtÄjam tiek dota kontrole pÄr rÄdÄ«tÄjiem, kas atbilst tÄ grupas_id abos nodalÄ«jumos, un viÅÅ” sÄk lasÄ«t ziÅojumus no abiem nodalÄ«jumiem.
Kad Å”ai tÄmai tiek pievienots papildu patÄrÄtÄjs tam paÅ”am grupas_id, Kafka pÄrdala vienu no nodalÄ«jumiem no pirmÄ uz otro patÄrÄtÄju. PÄc tam katrs patÄrÄtÄja gadÄ«jums lasÄ«s no viena tÄmas sadaļas (Skaitlis 3-6).
Lai nodroÅ”inÄtu, ka ziÅojumi tiek apstrÄdÄti paralÄli 20 pavedienos, ir nepiecieÅ”ami vismaz 20 nodalÄ«jumi. Ja nodalÄ«jumu bÅ«s mazÄk, jums paliks patÄrÄtÄji, kuriem nav pie kÄ strÄdÄt, kÄ aprakstÄ«ts iepriekÅ” ekskluzÄ«vo patÄrÄtÄju diskusijÄ.
AttÄls 3-6. Divi patÄrÄtÄji vienÄ patÄrÄtÄju grupÄ lasa no dažÄdÄm starpsienÄm
Å Ä« shÄma ievÄrojami samazina Kafka brokera sarežģītÄ«bu salÄ«dzinÄjumÄ ar ziÅojumu izplatÄ«Å”anu, kas nepiecieÅ”ama JMS rindas uzturÄÅ”anai. Å eit jums nav jÄuztraucas par Å”Ädiem punktiem:
Kuram patÄrÄtÄjam jÄsaÅem nÄkamais ziÅojums, pamatojoties uz apļveida sadalÄ«jumu, paÅ”reizÄjo sÄkotnÄjo ielÄdes buferu ietilpÄ«bu vai iepriekÅ”Äjiem ziÅojumiem (kÄ JMS ziÅojumu grupÄm).
Kuri ziÅojumi kuriem patÄrÄtÄjiem tiek nosÅ«tÄ«ti un vai tie ir atkÄrtoti jÄpiegÄdÄ kļūmes gadÄ«jumÄ.
Viss, kas Kafka brokerim jÄdara, ir secÄ«gi nosÅ«tÄ«t ziÅojumus patÄrÄtÄjam, kad tas tos pieprasa.
TomÄr prasÄ«bas par neizdevuÅ”os ziÅojumu korektÅ«ru un atkÄrtotu nosÅ«tÄ«Å”anu nekur nepazÅ«d ā atbildÄ«ba par tÄm vienkÄrÅ”i pÄriet no brokera uz klientu. Tas nozÄ«mÄ, ka tie ir jÄÅem vÄrÄ jÅ«su kodÄ.
ZiÅu sÅ«tÄ«Å”ana
Å Ä« ziÅojuma veidotÄjs ir atbildÄ«gs par izlemÅ”anu, uz kuru nodalÄ«jumu nosÅ«tÄ«t ziÅojumu. Lai saprastu mehÄnismu, ar kuru tas tiek darÄ«ts, mums vispirms ir jÄapsver, ko tieÅ”i mÄs patiesÄ«bÄ sÅ«tÄm.
Ja JMS mÄs izmantojam ziÅojuma struktÅ«ru ar metadatiem (galvenÄm un rekvizÄ«tiem) un pamattekstu, kas satur lietderÄ«go slodzi (payload), KafkÄ ziÅojums ir pÄris "atslÄgas vÄrtÄ«ba". ZiÅojuma slodze tiek nosÅ«tÄ«ta kÄ vÄrtÄ«ba. No otras puses, atslÄga galvenokÄrt tiek izmantota sadalÄ«Å”anai, un tai ir jÄbÅ«t biznesa loÄ£ikai specifiska atslÄgalai vienÄ nodalÄ«jumÄ ievietotu saistÄ«tos ziÅojumus.
2. nodaÄ¼Ä mÄs apspriedÄm tieÅ”saistes derÄ«bu scenÄriju, kurÄ saistÄ«tie notikumi ir jÄapstrÄdÄ secÄ«bÄ vienam patÄrÄtÄjam:
LietotÄja konts ir konfigurÄts.
Nauda tiek ieskaitÄ«ta kontÄ.
Tiek veikta likme, kas izÅem naudu no konta.
Ja katrs notikums ir ziÅojums, kas publicÄts tÄmÄ, dabiskÄ atslÄga bÅ«tu konta ID.
Kad ziÅojums tiek nosÅ«tÄ«ts, izmantojot Kafka Producer API, tas tiek nodots nodalÄ«juma funkcijai, kas, Åemot vÄrÄ ziÅojumu un paÅ”reizÄjo Kafka klastera stÄvokli, atgriež tÄ nodalÄ«juma ID, uz kuru ziÅojums jÄnosÅ«ta. Å Ä« funkcija ir ieviesta Java, izmantojot nodalÄ«juma saskarni.
SadalÄ«Å”anas implementÄcija izmanto noklusÄjuma vispÄrÄjas nozÄ«mes jaukÅ”anas algoritmu virs atslÄgas, lai noteiktu nodalÄ«jumu, vai apļveida pÄrbaudi, ja atslÄga nav norÄdÄ«ta. Å Ä« noklusÄjuma vÄrtÄ«ba vairumÄ gadÄ«jumu darbojas labi. TomÄr nÄkotnÄ jÅ«s vÄlaties rakstÄ«t savu.
Savas sadalÄ«Å”anas stratÄÄ£ijas rakstÄ«Å”ana
ApskatÄ«sim piemÄru, kur vÄlaties nosÅ«tÄ«t metadatus kopÄ ar ziÅojuma slodzi. MÅ«su piemÄrÄ lietderÄ«gÄ slodze ir instrukcija veikt iemaksu spÄles kontÄ. Instrukcija ir kaut kas tÄds, par kuru mÄs vÄlamies, lai pÄrsÅ«tÄ«Å”anas laikÄ netiktu mainÄ«ti, un mÄs vÄlamies bÅ«t pÄrliecinÄti, ka tikai uzticama augÅ”upÄjÄ sistÄma var ierosinÄt Å”o norÄdÄ«jumu. Å ajÄ gadÄ«jumÄ sÅ«tÄ«Å”anas un saÅemÅ”anas sistÄmas vienojas par paraksta izmantoÅ”anu ziÅojuma autentificÄÅ”anai.
ParastÄ JMS mÄs vienkÄrÅ”i definÄjam rekvizÄ«tu "ziÅojuma paraksts" un pievienojam to ziÅojumam. TomÄr Kafka nenodroÅ”ina mums metadatu nodoÅ”anas mehÄnismu, tikai atslÄgu un vÄrtÄ«bu.
TÄ kÄ vÄrtÄ«ba ir bankas pÄrveduma lietderÄ«gÄ slodze, kuras integritÄti mÄs vÄlamies saglabÄt, mums nav citas izvÄles, kÄ definÄt atslÄgÄ izmantojamo datu struktÅ«ru. PieÅemot, ka sadalÄ«Å”anai mums ir nepiecieÅ”ams konta ID, jo visi ar kontu saistÄ«tie ziÅojumi ir jÄapstrÄdÄ secÄ«bÄ, mÄs izstrÄdÄsim Å”Ädu JSON struktÅ«ru:
TÄ kÄ paraksta vÄrtÄ«ba mainÄ«sies atkarÄ«bÄ no lietderÄ«gÄs slodzes, nodalÄ«juma interfeisa noklusÄjuma jaukÅ”anas stratÄÄ£ija nevar droÅ”i grupÄt saistÄ«tos ziÅojumus. TÄpÄc mums bÅ«s jÄraksta sava stratÄÄ£ija, kas parsÄs Å”o atslÄgu un sadalÄ«s accountId vÄrtÄ«bu.
Kafka ietver kontrolsummas, lai noteiktu veikalÄ esoÅ”o ziÅojumu bojÄjumus, un tai ir pilns droŔības lÄ«dzekļu komplekts. TomÄr dažkÄrt parÄdÄs nozarei specifiskas prasÄ«bas, piemÄram, iepriekÅ” minÄtÄ.
LietotÄja sadalÄ«Å”anas stratÄÄ£ijai ir jÄnodroÅ”ina, ka visi saistÄ«tie ziÅojumi nonÄk tajÄ paÅ”Ä nodalÄ«jumÄ. Lai gan tas Ŕķiet vienkÄrÅ”i, prasÄ«bu var sarežģīt saistÄ«tu ziÅojumu pasÅ«tÄ«Å”anas nozÄ«me un tas, cik fiksÄts ir sadaļas skaits tÄmÄ.
TÄmas nodalÄ«jumu skaits laika gaitÄ var mainÄ«ties, jo tos var pievienot, ja trafiks pÄrsniedz sÄkotnÄjÄs cerÄ«bas. TÄdÄjÄdi ziÅojumu atslÄgas var saistÄ«t ar nodalÄ«jumu, uz kuru tÄs sÄkotnÄji tika nosÅ«tÄ«tas, kas nozÄ«mÄ, ka valsts daļa ir jÄsadala starp ražotÄja gadÄ«jumiem.
VÄl viens faktors, kas jÄÅem vÄrÄ, ir vienmÄrÄ«ga ziÅojumu sadale starp nodalÄ«jumiem. Parasti atslÄgas ziÅojumos netiek sadalÄ«tas vienmÄrÄ«gi, un jaukÅ”anas funkcijas negarantÄ taisnÄ«gu ziÅojumu sadali nelielai atslÄgu kopai.
Ir svarÄ«gi Åemt vÄrÄ, ka neatkarÄ«gi no tÄ, vai izvÄlaties sadalÄ«t ziÅojumus, pats atdalÄ«tÄjs, iespÄjams, bÅ«s jÄizmanto atkÄrtoti.
Apsveriet prasÄ«bu replicÄt datus starp Kafka klasteriem dažÄdÄs Ä£eogrÄfiskÄs vietÄs. Å im nolÅ«kam Kafka ir aprÄ«kots ar komandrindas rÄ«ku MirrorMaker, ko izmanto, lai lasÄ«tu ziÅojumus no viena klastera un pÄrsÅ«tÄ«tu tos uz citu.
MirrorMaker ir jÄsaprot replicÄtÄs tÄmas atslÄgas, lai saglabÄtu relatÄ«vo kÄrtÄ«bu starp ziÅojumiem, veicot replicÄÅ”anu starp klasteriem, jo āāŔīs tÄmas nodalÄ«jumu skaits var atŔķirties divos klasteros.
PielÄgotas sadalÄ«Å”anas stratÄÄ£ijas ir salÄ«dzinoÅ”i reti sastopamas, jo noklusÄjuma jaukÅ”ana vai apļveida sistÄma darbojas labi vairumÄ gadÄ«jumu. TomÄr, ja jums ir nepiecieÅ”amas stingras pasÅ«tÄ«Å”anas garantijas vai ir jÄizÅem metadati no lietderÄ«gÄs slodzes, sadalÄ«Å”ana ir kaut kas, kas jums jÄaplÅ«ko sÄ«kÄk.
Kafka mÄrogojamÄ«bas un veiktspÄjas priekÅ”rocÄ«bas rodas, dažus tradicionÄlÄ brokera pienÄkumus nododot klientam. Å ajÄ gadÄ«jumÄ tiek pieÅemts lÄmums izplatÄ«t potenciÄli saistÄ«tus ziÅojumus starp vairÄkiem patÄrÄtÄjiem, kas strÄdÄ paralÄli.
Ar Å”ÄdÄm prasÄ«bÄm jÄtiek galÄ arÄ« JMS brokeriem. Interesanti, ka mehÄnisms saistÄ«tu ziÅojumu nosÅ«tÄ«Å”anai vienam un tam paÅ”am patÄrÄtÄjam, kas tiek ieviests, izmantojot JMS ziÅojumu grupas (stingrÄs slodzes lÄ«dzsvaroÅ”anas (SLB) stratÄÄ£ijas variants), arÄ« prasa, lai sÅ«tÄ«tÄjs atzÄ«mÄtu ziÅojumus kÄ saistÄ«tus. JMS gadÄ«jumÄ brokeris ir atbildÄ«gs par Ŕīs saistÄ«to ziÅojumu grupas nosÅ«tÄ«Å”anu vienam patÄrÄtÄjam un grupas Ä«paÅ”umtiesÄ«bu nodoÅ”anu, ja patÄrÄtÄjs atsakÄs.
RažotÄju lÄ«gumi
SadalÄ«Å”ana nav vienÄ«gÄ lieta, kas jÄÅem vÄrÄ, sÅ«tot ziÅojumus. ApskatÄ«sim Java API Producer klases send() metodes:
Uzreiz jÄatzÄ«mÄ, ka abas metodes atgriež Future, kas norÄda, ka nosÅ«tÄ«Å”anas darbÄ«ba netiek veikta uzreiz. RezultÄtÄ ziÅojums (ProducerRecord) tiek ierakstÄ«ts katra aktÄ«vÄ nodalÄ«juma sÅ«tÄ«Å”anas buferÄ« un nosÅ«tÄ«ts brokerim kÄ fona pavediens Kafka klienta bibliotÄkÄ. Lai gan tas padara lietas neticami Ätri, tas nozÄ«mÄ, ka nepieredzÄjuÅ”a lietojumprogramma var zaudÄt ziÅojumus, ja tÄs process tiek apturÄts.
KÄ vienmÄr, ir veids, kÄ padarÄ«t nosÅ«tÄ«Å”anas darbÄ«bu uzticamÄku par veiktspÄjas rÄÄ·ina. Å Ä« bufera lielumu var iestatÄ«t uz 0, un sÅ«tÄ«Å”anas lietojumprogrammas pavediens bÅ«s spiests gaidÄ«t, lÄ«dz tiks pabeigta ziÅojuma pÄrsÅ«tÄ«Å”ana brokerim:
ZiÅojumu lasÄ«Å”ana rada papildu sarežģījumus, par kuriem ir jÄdomÄ. AtŔķirÄ«bÄ no JMS API, kas var palaist ziÅojumu uztvÄrÄju, reaÄ£Äjot uz ziÅojumu, PatÄrÄtÄjs Kafka tikai aptaujas. ApskatÄ«sim metodi tuvÄk aptauja ()izmanto Å”im nolÅ«kam:
ConsumerRecords < K, V > poll(long timeout);
Metodes atgrieÅ”anas vÄrtÄ«ba ir konteinera struktÅ«ra, kurÄ ir vairÄki objekti patÄrÄtÄju ieraksts no potenciÄli vairÄkÄm starpsienÄm. patÄrÄtÄju ieraksts pats par sevi ir atslÄgas-vÄrtÄ«bas pÄra turÄtÄja objekts ar saistÄ«tajiem metadatiem, piemÄram, nodalÄ«jumu, no kura tas ir iegÅ«ts.
KÄ minÄts 2. nodaļÄ, mums jÄpatur prÄtÄ, kas notiek ar ziÅojumiem pÄc tam, kad tie ir veiksmÄ«gi vai neveiksmÄ«gi apstrÄdÄti, piemÄram, ja klients nevar apstrÄdÄt ziÅojumu vai tas tiek pÄrtraukts. JMS tas tika apstrÄdÄts, izmantojot apstiprinÄjuma režīmu. Brokeris vai nu izdzÄsÄ«s veiksmÄ«gi apstrÄdÄto ziÅojumu, vai atkÄrtoti piegÄdÄs neapstrÄdÄtu vai viltotu ziÅojumu (pieÅemot, ka tika izmantoti darÄ«jumi).
Kafka darbojas ļoti atŔķirÄ«gi. ZiÅojumi brokerÄ« netiek dzÄsti pÄc korektÅ«ras, un par to, kas notiek neveiksmes gadÄ«jumÄ, ir atbildÄ«gs pats korektÅ«ras kods.
KÄ jau teicÄm, patÄrÄtÄju grupa ir saistÄ«ta ar nobÄ«di žurnÄlÄ. ŽurnÄla pozÄ«cija, kas saistÄ«ta ar Å”o nobÄ«di, atbilst nÄkamajam ziÅojumam, kas jÄizdod, atbildot uz to aptauja (). Laiks, kad Ŕī nobÄ«de palielinÄs, ir noteicoÅ”ais lasÄ«Å”anai.
Atgriežoties pie iepriekÅ” apspriestÄ lasÄ«Å”anas modeļa, ziÅojumu apstrÄde sastÄv no trim posmiem:
IzgÅ«t ziÅojumu lasÄ«Å”anai.
ApstrÄdÄjiet ziÅojumu.
Apstipriniet ziÅojumu.
Kafka patÄrÄtÄjam ir konfigurÄcijas opcija enable.auto.commit. Å is ir bieži izmantots noklusÄjuma iestatÄ«jums, tÄpat kÄ iestatÄ«jumos, kuros ir vÄrds "auto".
Pirms Kafka 0.10 klients, kurÅ” izmantoja Å”o opciju, nÄkamajÄ zvanÄ nosÅ«tÄ«ja pÄdÄjÄ nolasÄ«tÄ ziÅojuma nobÄ«di aptauja () pÄc apstrÄdes. Tas nozÄ«mÄja, ka visus jau ienestos ziÅojumus varÄja atkÄrtoti apstrÄdÄt, ja klients tos jau bija apstrÄdÄjis, bet tika negaidÄ«ti iznÄ«cinÄts pirms zvanÄ«Å”anas. aptauja (). TÄ kÄ brokeris nesaglabÄ ziÅas par to, cik reižu ziÅojums ir lasÄ«ts, nÄkamais patÄrÄtÄjs, kurÅ” izgÅ«s Å”o ziÅojumu, neuzzinÄs, ka nekas slikts ir noticis. Å Äda rÄ«cÄ«ba bija pseidodarÄ«jums. NobÄ«de tika veikta tikai tad, ja ziÅojums tika veiksmÄ«gi apstrÄdÄts, bet, ja klients to pÄrtrauc, brokeris vÄlreiz nosÅ«tÄ«s to paÅ”u ziÅojumu citam klientam. Å Ä« rÄ«cÄ«ba atbilda ziÅojumu piegÄdes garantijai "vismaz vienreiz".
ProgrammÄ Kafka 0.10 klienta kods ir mainÄ«ts tÄ, lai klienta bibliotÄka periodiski aktivizÄtu apÅemÅ”anos, kÄ tas ir konfigurÄts auto.commit.interval.ms. Å Ä« darbÄ«ba ir kaut kur starp režīmiem JMS AUTO_ACKNOWLEDGE un DUPS_OK_ACKNOWLEDGE. Izmantojot automÄtisko apÅemÅ”anos, ziÅojumus var veikt neatkarÄ«gi no tÄ, vai tie faktiski tika apstrÄdÄti ā tas varÄtu notikt lÄna patÄrÄtÄja gadÄ«jumÄ. Ja patÄrÄtÄjs pÄrtrauc darbu, ziÅojumus ienesÄ«s nÄkamais patÄrÄtÄjs, sÄkot no noteiktÄs pozÄ«cijas, kÄ rezultÄtÄ ziÅojums var tikt palaists garÄm. Å ajÄ gadÄ«jumÄ Kafka nezaudÄja ziÅojumus, lasÄ«Å”anas kods tos vienkÄrÅ”i neapstrÄdÄja.
Å im režīmam ir tÄds pats solÄ«jums kÄ versijÄ 0.9: ziÅojumus var apstrÄdÄt, taÄu, ja tas neizdodas, nobÄ«de var netikt veikta, un tas var izraisÄ«t piegÄdes dubultoÅ”anos. Jo vairÄk ziÅojumu jÅ«s ienesat izpildes laikÄ aptauja (), jo vairÄk Ŕī problÄma.
KÄ aprakstÄ«ts sadaÄ¼Ä āZiÅojumu lasÄ«Å”ana no rindasā 21. lpp., ziÅojumapmaiÅas sistÄmÄ nav tÄdas lietas kÄ vienreizÄja ziÅojuma piegÄde, ja tiek Åemti vÄrÄ atteices režīmi.
KafkÄ ir divi veidi, kÄ veikt (iesaistÄ«t) nobÄ«di (nobÄ«di): automÄtiski un manuÄli. Abos gadÄ«jumos ziÅojumus var apstrÄdÄt vairÄkas reizes, ja ziÅojums tika apstrÄdÄts, bet neizdevÄs pirms apstiprinÄÅ”anas. Varat arÄ« izvÄlÄties neapstrÄdÄt ziÅojumu vispÄr, ja apÅemÅ”anÄs notika fonÄ un jÅ«su kods tika pabeigts, pirms to varÄja apstrÄdÄt (iespÄjams, Kafka 0.9 un vecÄkÄ versijÄ).
Varat kontrolÄt manuÄlÄs nobÄ«des izpildes procesu Kafka patÄrÄtÄju API, iestatot parametru enable.auto.commit nepatiesi un nepÄrprotami izsaucot vienu no Ŕīm metodÄm:
void commitSync();
void commitAsync();
Ja vÄlaties apstrÄdÄt ziÅojumu "vismaz vienu reizi", nobÄ«de jÄveic manuÄli ar commitSync()izpildot Å”o komandu tÅ«lÄ«t pÄc ziÅojumu apstrÄdes.
Å Ä«s metodes neļauj apstiprinÄt ziÅojumus pirms to apstrÄdes, taÄu tÄs neko nedara, lai novÄrstu iespÄjamos apstrÄdes aizkaves, vienlaikus radot darÄ«juma iespaidu. KafkÄ nav darÄ«jumu. Klientam nav iespÄju veikt Å”Ädas darbÄ«bas:
AutomÄtiski atgriezt viltotu ziÅojumu. PatÄrÄtÄjiem paÅ”iem ir jÄrisina izÅÄmumi, kas rodas no problemÄtiskÄm lietderÄ«gÄm slodzÄm un aizmugursistÄmas darbÄ«bas pÄrtraukumiem, jo āāviÅi nevar paļauties uz brokeri, lai atkÄrtoti piegÄdÄtu ziÅojumus.
NosÅ«tiet ziÅojumus uz vairÄkÄm tÄmÄm vienÄ kodolÄ. KÄ mÄs drÄ«z redzÄsim, dažÄdu tÄmu un nodalÄ«jumu kontrole var bÅ«t dažÄdÄs Kafka klastera iekÄrtÄs, kas nekoordinÄ darÄ«jumus, kad tie tiek nosÅ«tÄ«ti. Å Ä«s rakstÄ«Å”anas laikÄ tika veikts zinÄms darbs, lai tas bÅ«tu iespÄjams ar KIP-98.
Saistiet vienas ziÅas lasÄ«Å”anu no vienas tÄmas ar citas ziÅas nosÅ«tÄ«Å”anu uz citu tÄmu. Atkal, Kafkas arhitektÅ«ra ir atkarÄ«ga no daudzÄm neatkarÄ«gÄm maŔīnÄm, kas darbojas kÄ viens autobuss, un to nemÄÄ£ina slÄpt. PiemÄram, nav API komponentu, kas ļautu izveidot saiti patÄrÄtÄjs Šø Producents darÄ«jumÄ. JMS to nodroÅ”ina objekts sesijano kuriem tiek izveidoti MessageProducers Šø MessageConsumers.
Ja mÄs nevaram paļauties uz darÄ«jumiem, kÄ mÄs varam nodroÅ”inÄt semantiku, kas ir tuvÄka tai, ko nodroÅ”ina tradicionÄlÄs ziÅojumapmaiÅas sistÄmas?
Ja pastÄv iespÄja, ka patÄrÄtÄja kompensÄcija var palielinÄties pirms ziÅojuma apstrÄdes, piemÄram, patÄrÄtÄja avÄrijas laikÄ, tad patÄrÄtÄjs nevar zinÄt, vai viÅa patÄrÄtÄju grupa palaida garÄm ziÅojumu, kad tai tiek pieŔķirts nodalÄ«jums. TÄtad viena stratÄÄ£ija ir pÄrtÄ«t nobÄ«di uz iepriekÅ”Äjo pozÄ«ciju. Kafka patÄrÄtÄju API nodroÅ”ina Å”Ädas metodes:
Metode meklÄt () var izmantot ar metodi offsetsFor Times (karte laikspiedoli meklÄÅ”anai) lai attÄ«tu atpakaļ uz stÄvokli kÄdÄ konkrÄtÄ pagÄtnes punktÄ.
Å Ä«s pieejas izmantoÅ”ana netieÅ”i nozÄ«mÄ, ka ir ļoti iespÄjams, ka daži iepriekÅ” apstrÄdÄtie ziÅojumi tiks lasÄ«ti un apstrÄdÄti vÄlreiz. Lai no tÄ izvairÄ«tos, mÄs varam izmantot idempotentu lasÄ«Å”anu, kÄ aprakstÄ«ts 4. nodaļÄ, lai izsekotu iepriekÅ” skatÄ«tajiem ziÅojumiem un novÄrstu dublikÄtus.
AlternatÄ«vi, jÅ«su patÄrÄtÄja kods var bÅ«t vienkÄrÅ”s, ja vien ir pieļaujams ziÅojumu zudums vai dublÄÅ”anÄs. Apsverot lietoÅ”anas gadÄ«jumus, kuriem parasti tiek izmantots Kafka, piemÄram, žurnÄla notikumu, metrikas, klikŔķu izsekoÅ”anas u.c. apstrÄdi, mÄs saprotam, ka atseviŔķu ziÅojumu zaudÄÅ”ana, visticamÄk, bÅ«tiski neietekmÄs apkÄrtÄjÄs lietojumprogrammas. Å Ädos gadÄ«jumos noklusÄjuma vÄrtÄ«bas ir pilnÄ«gi pieÅemamas. No otras puses, ja jÅ«su pieteikumam ir nepiecieÅ”ams nosÅ«tÄ«t maksÄjumus, jums rÅ«pÄ«gi jÄrÅ«pÄjas par katru atseviŔķu ziÅojumu. Tas viss ir atkarÄ«gs no konteksta.
PersonÄ«gie novÄrojumi liecina, ka, pieaugot ziÅojumu intensitÄtei, katra atseviŔķa ziÅojuma vÄrtÄ«ba samazinÄs. Lieli ziÅojumi mÄdz bÅ«t vÄrtÄ«gi, ja tie tiek skatÄ«ti apkopotÄ veidÄ.
Augsta pieejamība
Kafkas pieeja augstajai pieejamÄ«bai ļoti atŔķiras no ActiveMQ pieejas. Kafka ir veidota ap scal-out klasteriem, kur visas brokeru instances saÅem un izplata ziÅojumus vienlaikus.
Kafka klasteris sastÄv no vairÄkiem brokeru gadÄ«jumiem, kas darbojas dažÄdos serveros. Kafka tika izstrÄdÄta, lai darbotos ar parastu savrupu aparatÅ«ru, kur katram mezglam ir sava krÄtuve. Nav ieteicams izmantot tÄ«klam pievienoto krÄtuvi (SAN), jo vairÄki skaitļoÅ”anas mezgli var konkurÄt par laiku.Š«e uzglabÄÅ”anas intervÄlus un radÄ«t konfliktus.
Kafka ir vienmÄr sistÄma. Daudzi lieli Kafka lietotÄji nekad neizslÄdz klasterus, un programmatÅ«ra vienmÄr tiek atjauninÄta ar secÄ«gu restartÄÅ”anu. Tas tiek panÄkts, garantÄjot ziÅojumu un brokeru mijiedarbÄ«bas saderÄ«bu ar iepriekÅ”Äjo versiju.
Brokeri ir savienoti ar serveru kopu ZoodÄrza uzraugs, kas darbojas kÄ konfigurÄcijas datu reÄ£istrs un tiek izmantots katra brokera lomu koordinÄÅ”anai. ZooKeeper pati par sevi ir izplatÄ«ta sistÄma, kas nodroÅ”ina augstu pieejamÄ«bu, izmantojot informÄcijas replikÄciju, izveidojot kvorums.
Pamata gadÄ«jumÄ tÄma tiek izveidota Kafka klasterÄ« ar Å”Ädiem rekvizÄ«tiem:
Starpsienu skaits. KÄ minÄts iepriekÅ”, precÄ«za Å”eit izmantotÄ vÄrtÄ«ba ir atkarÄ«ga no vÄlamÄ paralÄlÄs nolasÄ«Å”anas lÄ«meÅa.
ReplikÄcijas faktors (faktors) nosaka, cik brokeru gadÄ«jumos klasterÄ« ir jÄietver Ŕī nodalÄ«juma žurnÄli.
KoordinÄcijai izmantojot ZooKeepers, Kafka mÄÄ£ina godÄ«gi sadalÄ«t jaunas starpsienas starp klastera brokeriem. To veic viens gadÄ«jums, kas darbojas kÄ kontrolieris.
Izpildes laikÄ katram tÄmas nodalÄ«jumamKontrolieris pieŔķirt lomas brokerim vadÄ«tÄjs (vadÄ«tÄjs, meistars, vadÄ«tÄjs) un sekotÄji (sekotÄji, vergi, padotie). Brokeris, kas darbojas kÄ Å”Ä«s sadaļas vadÄ«tÄjs, ir atbildÄ«gs par visu ražotÄju nosÅ«tÄ«to ziÅojumu saÅemÅ”anu un ziÅojumu izplatÄ«Å”anu patÄrÄtÄjiem. Kad ziÅojumi tiek nosÅ«tÄ«ti uz tÄmu nodalÄ«jumu, tie tiek replicÄti visos starpnieka mezglos, kas darbojas kÄ Å”Ä« nodalÄ«juma sekotÄji. Tiek izsaukts katrs mezgls, kurÄ ir nodalÄ«juma žurnÄli replika. Brokeris var darboties kÄ vadÄ«tÄjs dažÄm starpsienÄm un kÄ sekotÄjs citÄm.
Tiek izsaukts sekotÄjs, kurÄ ir visi lÄ«dera ziÅojumi sinhronizÄta kopija (reprodukcija, kas atrodas sinhronizÄtÄ stÄvoklÄ«, sinhronizÄta kopija). Ja starpnieks, kas darbojas kÄ nodalÄ«juma vadÄ«tÄjs, zaudÄ savu darbÄ«bu, jebkurÅ” brokeris, kas ir atjauninÄts vai sinhronizÄts ar Å”o nodalÄ«jumu, var pÄrÅemt lÄ«dera lomu. Tas ir neticami ilgtspÄjÄ«gs dizains.
Daļa no ražotÄja konfigurÄcijas ir parametrs acks, kas nosaka, cik replikÄm ir jÄapstiprina (jÄapstiprina) ziÅojuma saÅemÅ”ana, pirms lietojumprogrammas pavediens turpina sÅ«tÄ«Å”anu: 0, 1 vai visas. Ja iestatÄ«ts uz visi, tad, kad tiek saÅemts ziÅojums, vadÄ«tÄjs nosÅ«tÄ«s apstiprinÄjumu atpakaļ producentam, tiklÄ«dz tas saÅems ieraksta apstiprinÄjumus (apstiprinÄjumus) no vairÄkiem signÄliem (ieskaitot sevi), ko nosaka tÄmas iestatÄ«jums. min.insync.replicas (noklusÄjums 1). Ja ziÅojumu nevar sekmÄ«gi replicÄt, ražotÄjs izliks lietojumprogrammas izÅÄmumu (NotEnoughReplicas vai NotEnoughReplicasAfterAppend).
Tipiska konfigurÄcija izveido tÄmu ar replikÄcijas koeficientu 3 (1 vadÄ«tÄjs, 2 sekotÄji katrÄ nodalÄ«jumÄ) un parametru min.insync.replicas ir iestatÄ«ts uz 2. Å ajÄ gadÄ«jumÄ klasteris ļaus vienam no brokeriem, kas pÄrvalda tÄmas nodalÄ«jumu, pazust, neietekmÄjot klienta lietojumprogrammas.
Tas mÅ«s atgriež pie jau pazÄ«stamÄ kompromisa starp veiktspÄju un uzticamÄ«bu. ReplikÄcija notiek uz papildu gaidÄ«Å”anas laika, lai saÅemtu apstiprinÄjumus (apstiprinÄjumus) no sekotÄjiem. Lai gan, tÄ kÄ tÄ darbojas paralÄli, replikÄcijai vismaz trÄ«s mezglos ir tÄda pati veiktspÄja kÄ diviem (neÅemot vÄrÄ tÄ«kla joslas platuma lietojuma pieaugumu).
Izmantojot Å”o replikÄcijas shÄmu, Kafka gudri izvairÄs no nepiecieÅ”amÄ«bas katru ziÅojumu fiziski ierakstÄ«t diskÄ ar operÄciju sinhronizÄt(). Katrs ražotÄja nosÅ«tÄ«tais ziÅojums tiks ierakstÄ«ts nodalÄ«juma žurnÄlÄ, bet, kÄ aprakstÄ«ts 2. nodaļÄ, rakstÄ«Å”ana failÄ sÄkotnÄji tiek veikta operÄtÄjsistÄmas buferÄ«. Ja Å”is ziÅojums tiek pavairots citÄ Kafka instancÄ un atrodas tÄs atmiÅÄ, lÄ«dera zaudÄÅ”ana nenozÄ«mÄ, ka ir pazaudÄts pats ziÅojums ā to var pÄrÅemt sinhronizÄta kopija.
Atteikums veikt operÄciju sinhronizÄt() nozÄ«mÄ, ka Kafka var saÅemt ziÅas tikpat Ätri, cik spÄj ierakstÄ«t tÄs atmiÅÄ. Un otrÄdi, jo ilgÄk jÅ«s varat izvairÄ«ties no atmiÅas izskaloÅ”anas diskÄ, jo labÄk. Å Ä« iemesla dÄļ nav nekas neparasts, ka Kafka brokeriem tiek pieŔķirta 64 GB vai vairÄk atmiÅas. Å is atmiÅas lietojums nozÄ«mÄ, ka viens Kafka gadÄ«jums var viegli darboties ar Ätrumu tÅ«kstoÅ”iem reižu ÄtrÄk nekÄ tradicionÄlais ziÅojumu starpnieks.
Kafka var arÄ« konfigurÄt, lai lietotu Å”o darbÄ«bu sinhronizÄt() uz ziÅojumu pakotnÄm. TÄ kÄ viss Kafka ir orientÄts uz pakotnÄm, tas faktiski darbojas diezgan labi daudzos lietoÅ”anas gadÄ«jumos un ir noderÄ«gs rÄ«ks lietotÄjiem, kuriem nepiecieÅ”amas ļoti spÄcÄ«gas garantijas. Liela daļa Kafkas tÄ«rÄs veiktspÄjas izriet no ziÅojumiem, kas tiek nosÅ«tÄ«ti brokerim kÄ paketes un ka Å”ie ziÅojumi tiek nolasÄ«ti no brokera secÄ«gos blokos, izmantojot nulles kopija operÄcijas (operÄcijas, kuru laikÄ netiek veikts datu kopÄÅ”anas uzdevums no vienas atmiÅas apgabala uz citu). PÄdÄjais ir liels veiktspÄjas un resursu pieaugums, un tas ir iespÄjams, tikai izmantojot pamatÄ esoÅ”o žurnÄla datu struktÅ«ru, kas nosaka nodalÄ«juma shÄmu.
Kafka klasterÄ« ir iespÄjama daudz labÄka veiktspÄja nekÄ ar vienu Kafka brokeri, jo tÄmu nodalÄ«jumi var tikt mÄrogoti daudzÄs atseviŔķÄs iekÄrtÄs.
RezultÄti
Å ajÄ nodaÄ¼Ä mÄs apskatÄ«jÄm, kÄ Kafka arhitektÅ«ra pÄrdomÄ attiecÄ«bas starp klientiem un brokeriem, lai nodroÅ”inÄtu neticami stabilu ziÅojumapmaiÅas cauruļvadu ar daudzkÄrt lielÄku caurlaidspÄju nekÄ parastajam ziÅojumu starpniekam. MÄs esam apsprieduÅ”i funkcionalitÄti, ko tÄ izmanto, lai to panÄktu, un Ä«si apskatÄ«juÅ”i lietojumprogrammu arhitektÅ«ru, kas nodroÅ”ina Å”o funkcionalitÄti. NÄkamajÄ nodaÄ¼Ä mÄs apskatÄ«sim izplatÄ«tÄkÄs problÄmas, kas jÄatrisina uz ziÅojumapmaiÅu balstÄ«tÄm lietojumprogrammÄm, un apspriedÄ«sim to risinÄÅ”anas stratÄÄ£ijas. MÄs beigsim nodaļu, izklÄstot, kÄ runÄt par ziÅojumapmaiÅas tehnoloÄ£ijÄm kopumÄ, lai jÅ«s varÄtu novÄrtÄt to piemÄrotÄ«bu jÅ«su lietoÅ”anas gadÄ«jumiem.