RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja

В l-aħħar artikolu ħares lejn RabbitMQ clustering għal tolleranza ta 'ħsara u disponibbiltà għolja. Issa ejja ħaffer fil-fond Apache Kafka.

Hawnhekk l-unità ta 'replikazzjoni hija l-partizzjoni. Kull suġġett għandu sezzjoni waħda jew aktar. Kull sezzjoni għandha mexxej b'segwaċi jew mingħajrhom. Meta toħloq suġġett, inti tispeċifika n-numru ta 'diviżorji u l-koeffiċjent ta' replikazzjoni. Il-valur tas-soltu huwa 3, li jfisser tliet repliki: mexxej wieħed u żewġ segwaċi.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 1. Erba 'taqsimiet huma mqassma fost tliet sensara

It-talbiet kollha għall-qari u l-kitba jmorru għand il-mexxej. Is-segwaċi perjodikament jibagħtu talbiet lill-mexxej biex jirċievu l-aħħar messaġġi. Il-konsumaturi qatt ma jduru lejn is-segwaċi; dawn tal-aħħar jeżistu biss għal redundancy u tolleranza għall-ħsarat.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja

Ħsara fil-partizzjoni

Meta sensar ifalli, il-mexxejja ta 'diversi sezzjonijiet spiss ifallu. F'kull wieħed minnhom, segwaċi minn nodu ieħor isir il-mexxej. Fil-fatt, dan mhux dejjem il-każ, peress li l-fattur ta 'sinkronizzazzjoni jinfluwenza wkoll: jekk hemmx segwaċi sinkronizzati, u jekk le, allura jekk jaqilbux għal replika mhux sinkronizzata huwiex permess. Imma ejja ma nikkomplikawx l-affarijiet għalissa.

Is-sensar 3 jitlaq min-netwerk, u mexxej ġdid jiġi elett għat-taqsima 2 fil-broker 2.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 2. Is-sensar 3 imut u s-segwaċi tiegħu fuq is-sensar 2 jiġi elett bħala l-mexxej il-ġdid tal-partizzjoni 2

Imbagħad is-sensar 1 jitlaq u t-taqsima 1 titlef ukoll il-mexxej tiegħu, li r-rwol tiegħu jgħaddi għand is-sensar 2.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 3. Fadal sensar wieħed. Il-mexxejja kollha huma fuq sensar wieħed mingħajr redundancy

Meta s-sensar 1 jerġa' jiġi online, iżid erba' segwaċi, u jipprovdi xi redundancy għal kull partizzjoni. Iżda l-mexxejja kollha xorta baqgħu fuq is-sensar 2.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 4. Il-mexxejja jibqgħu fuq is-sensar 2

Meta jitla 'sensar 3, aħna lura għal tliet repliki għal kull partizzjoni. Iżda l-mexxejja kollha għadhom fuq sensar 2.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 5. Tqegħid żbilanċjat tal-mexxejja wara r-restawr tas-sensara 1 u 3

Kafka għandu għodda għal ribilanċ aħjar tal-mexxejja minn RabbitMQ. Hemmhekk, kellek tuża plugin jew skript ta 'parti terza li biddel il-politiki għall-migrazzjoni tan-node prinċipali billi naqqas is-sensja waqt il-migrazzjoni. Barra minn hekk, għal kjuwijiet kbar kellna naċċettaw in-disponibbiltà waqt is-sinkronizzazzjoni.

Kafka għandu l-kunċett ta '"repliki preferuti" għar-rwol ta' mexxej. Meta jinħolqu diviżorji tas-suġġett, Kafka jipprova jqassam il-mexxejja b'mod ugwali bejn in-nodi u jimmarka dawk l-ewwel mexxejja bħala preferuti. Maż-żmien, minħabba reboots tas-server, fallimenti, u ħsarat fil-konnettività, il-mexxejja jistgħu jispiċċaw fuq nodi oħra, bħal fil-każ estrem deskritt hawn fuq.

Biex tirranġa dan, Kafka joffri żewġ għażliet:

  • Għażla auto.leader.rebalance.enable=veru jippermetti lin-nodu tal-kontrollur li awtomatikament jassenja mill-ġdid lill-mexxejja lura għal repliki preferuti u b'hekk jerġa' jġib distribuzzjoni uniformi.
  • L-amministratur jista 'jmexxi l-iskript kafka-preferred-replica-election.sh għal assenjazzjoni mill-ġdid manwali.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 6. Repliki wara l-ibbilanċjar mill-ġdid

Din kienet verżjoni simplifikata tal-falliment, iżda r-realtà hija aktar kumplessa, għalkemm m'hemm xejn ikkumplikat wisq hawn. Kollox jaqa 'għal repliki sinkronizzati (Repliki In-Sync, ISR).

Repliki Sinkronizzati (ISR)

ISR huwa sett ta 'repliki ta' partizzjoni li hija kkunsidrata "sinkronizzata" (in-sync). Hemm mexxej, iżda jista 'ma jkunx hemm segwaċi. Segwaċi jitqies sinkronizzat jekk ikun għamel kopji eżatti tal-messaġġi kollha tal-mexxej qabel jiskadi l-intervall replica.lag.time.max.ms.

Segwaċi jitneħħa mis-sett ISR jekk dan:

  • ma għamilx talba biex tagħżel għall-intervall replica.lag.time.max.ms (preżunt mejta)
  • ma rnexxilux jaġġorna matul l-intervall replica.lag.time.max.ms (meqjusa bil-mod)

Is-segwaċi jagħmlu talbiet għal kampjuni fl-intervall replica.fetch.wait.max.ms, li default għal 500ms.

Biex nispjegaw b'mod ċar l-iskop tal-ISR, irridu nħarsu lejn konfermi mill-produttur u xi xenarji ta 'falliment. Il-produtturi jistgħu jagħżlu meta s-sensar jibgħat konferma:

  • acks=0, il-konferma ma tintbagħatx
  • acks=1, tintbagħat konferma wara li l-mexxej ikun kiteb messaġġ fil-log lokali tiegħu
  • acks=kollha, tintbagħat konferma wara li r-repliki kollha fl-ISR ikunu kitbu l-messaġġ fir-reġistri lokali

Fit-terminoloġija ta' Kafka, jekk l-ISR issejvja messaġġ, huwa "kommess". Acks=all hija l-iktar għażla sikura, iżda żżid ukoll dewmien addizzjonali. Ejja nħarsu lejn żewġ eżempji ta 'falliment u kif l-għażliet differenti 'acks' jinteraġixxu mal-kunċett ISR.

Acks=1 u ISR

F'dan l-eżempju, se naraw li jekk il-mexxej ma jistenna li kull messaġġ mis-segwaċi kollha jiġi ffrankat, allura telf ta 'dejta huwa possibbli jekk il-mexxej jonqos. In-navigazzjoni lejn segwaċi mhux sinkronizzat tista' tiġi attivata jew diżattivata billi tissettja mhux nadif.leader.election.enable.

F'dan l-eżempju, il-manifattur għandu l-valur acks=1. It-taqsima hija mqassma fit-tliet sensara. Broker 3 huwa lura, huwa sinkronizzat mal-mexxej tmien sekondi ilu u issa huwa 7456 messaġġ lura. Broker 1 kien sekonda biss wara. Il-produttur tagħna jibgħat messaġġ u malajr jirċievi ack lura, mingħajr l-overhead ta 'segwaċi bil-mod jew mejta li l-mexxej mhux qed jistenna.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 7. ISR bi tliet repliki

Broker 2 jonqos u l-produttur jirċievi żball ta 'konnessjoni. Wara li t-tmexxija tgħaddi għand is-sensar 1, nitilfu 123 messaġġ. Is-segwaċi fuq sensar 1 kien parti mill-ISR, iżda ma kienx kompletament sinkronizzat mal-mexxej meta waqa '.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 8. Il-messaġġi jintilfu meta tiġġarraf

Fil-konfigurazzjoni bootstrap.servers Il-manifattur għandu diversi sensara elenkati u jista 'jistaqsi sensar ieħor li huwa l-mexxej tas-sezzjoni l-ġdida. Imbagħad jistabbilixxi konnessjoni mas-sensar 1 u jkompli jibgħat messaġġi.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 9. Jibgħat il-messaġġi mill-ġdid wara waqfa qasira

Broker 3 huwa saħansitra aktar lura. Jagħmel talbiet għall-ġibda iżda ma jistax jissinkronizza. Dan jista 'jkun minħabba konnessjoni bil-mod tan-netwerk bejn sensara, kwistjoni ta' ħażna, eċċ. Huwa mneħħi mill-ISR. Issa l-ISR jikkonsisti f'replika waħda - il-mexxej! Il-manifattur ikompli jibgħat messaġġi u jirċievi konfermi.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 10. Follower fuq sensar 3 jitneħħa mill-ISR

Is-sensar 1 jinżel u r-rwol ta' tmexxija jmur għand is-sensar 3 bit-telf ta' 15286 messaġġ! Il-manifattur jirċievi messaġġ ta 'żball ta' konnessjoni. It-tranżizzjoni għal mexxej barra mill-ISR kienet possibbli biss minħabba l-issettjar unclean.leader.election.enable=veru. Jekk ikun installat fi falza, allura t-tranżizzjoni ma sseħħx u t-talbiet kollha għall-qari u l-kitba jiġu miċħuda. F'dan il-każ, nistennew li s-sensar 1 jerġa 'lura bid-dejta intatta tiegħu fir-replika, li terġa' tieħu f'idejha t-tmexxija.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 11. Broker 1 jaqa’. Meta sseħħ falliment, jintilfu numru kbir ta 'messaġġi

Il-produttur jistabbilixxi konnessjoni mal-aħħar sensar u jara li issa huwa l-mexxej tas-sezzjoni. Jibda jibgħat messaġġi lis-sensar 3.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 12. Wara waqfa qasira, il-messaġġi jerġgħu jintbagħtu lit-taqsima 0

Rajna li, apparti interruzzjonijiet qosra biex jiġu stabbiliti konnessjonijiet ġodda u tfittxija għal mexxej ġdid, il-manifattur kien kontinwament jibgħat messaġġi. Din il-konfigurazzjoni tiżgura disponibbiltà għad-detriment tal-konsistenza (sigurtà tad-dejta). Kafka tilef eluf ta’ messaġġi iżda baqa’ jaċċetta kitbiet ġodda.

Acks=kollha u ISR

Ejja nirrepetu dan ix-xenarju mill-ġdid, iżda bi acks=kollha. Broker 3 għandu latenza medja ta 'erba' sekondi. Il-manifattur jibgħat messaġġ ma acks=kollha, u issa ma jirċievix tweġiba malajr. Il-mexxej jistenna li l-messaġġ jiġi salvat mir-repliki kollha fl-ISR.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 13. ISR bi tliet repliki. Wieħed huwa bil-mod, li jirriżulta f'dewmien fir-reġistrazzjoni

Wara erba' sekondi ta' dewmien addizzjonali, is-sensar 2 jibgħat ack. Ir-repliki kollha issa huma kompletament aġġornati.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 14. Ir-repliki kollha jiffrankaw il-messaġġi u jibagħtu ack

Broker 3 issa jaqa 'aktar lura u jitneħħa mill-ISR. Il-latenza titnaqqas b'mod sinifikanti minħabba li ma fadal l-ebda repliki bil-mod fl-ISR. Broker 2 issa jistenna biss għas-sensar 1, u għandu dewmien medju ta '500 ms.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 15. Ir-replika fuq is-sensar 3 titneħħa mill-ISR

Imbagħad is-sensar 2 jaqa 'u t-tmexxija tgħaddi lill-sensar 1 mingħajr telf ta' messaġġi.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 16. Broker 2 jaqa

Il-manifattur isib mexxej ġdid u jibda jibgħat messaġġi lilu. Il-latency titnaqqas aktar minħabba li l-ISR issa jikkonsisti f'replika waħda! Għalhekk l-għażla acks=kollha ma żżidx redundancy.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 17. Replica fuq sensar 1 tieħu l-vantaġġ mingħajr ma titlef il-messaġġi

Imbagħad is-sensar 1 jiġġarraf u ċ-ċomb imur għand is-sensar 3 b'telf ta 'messaġġi 14238!

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 18. Is-sensar 1 imut u t-tranżizzjoni tat-tmexxija b'issettjar mhux nadif jirriżulta f'telf estensiv ta 'dejta

Ma stajniex ninstallaw l-għażla mhux nadif.leader.election.enable fis-sens veru. B'mod awtomatiku huwa ugwali falza. Settings acks=kollha с unclean.leader.election.enable=veru jipprovdi aċċessibilità b'xi sigurtà tad-dejta miżjuda. Imma kif tistgħu taraw, xorta nistgħu nitilfu l-messaġġi.

Imma x'jiġri jekk irridu nżidu s-sigurtà tad-dejta? Tista 'tpoġġi unclean.leader.election.enable = falza, iżda dan mhux bilfors jipproteġina mit-telf tad-dejta. Jekk il-mexxej waqa 'iebsa u ħa d-dejta magħha, allura l-messaġġi xorta jintilfu, flimkien ma' disponibbiltà tintilef sakemm l-amministratur jerġa 'jġib is-sitwazzjoni.

Huwa aħjar li tiżgura li l-messaġġi kollha huma żejda, u inkella jarmi r-reġistrazzjoni. Imbagħad, mill-inqas mill-perspettiva tas-sensar, it-telf tad-dejta huwa possibbli biss fil-każ ta 'żewġ fallimenti simultanji jew aktar.

Acks=kollha, min.insync.replicas u ISR

Bil-konfigurazzjoni tas-suġġett min.insync.repliki Qed inżidu l-livell tas-sigurtà tad-dejta. Ejja nerġgħu ngħaddu mill-aħħar parti tax-xenarju preċedenti, iżda din id-darba ma min.insync.replicas=2.

Allura sensar 2 għandu replika mexxej u s-segwaċi fuq sensar 3 jitneħħa mill-ISR.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 19. ISR minn żewġ repliki

Is-sensar 2 jaqa’ u t-tmexxija tgħaddi għand is-sensar 1 mingħajr telf ta’ messaġġi. Imma issa l-ISR jikkonsisti f'replika waħda biss. Dan ma jilħaqx in-numru minimu biex tirċievi r-rekords, u għalhekk is-sensar jirrispondi għall-attentat ta 'kitba bi żball NotEnoughRepliks.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 20. In-numru ta' ISRs huwa wieħed inqas minn dak speċifikat f'min.insync.replicas

Din il-konfigurazzjoni tissagrifika d-disponibbiltà għall-konsistenza. Qabel ma nirrikonoxxu messaġġ, niżguraw li dan ikun miktub f'mill-inqas żewġ repliki. Dan jagħti lill-manifattur ħafna aktar kunfidenza. Hawnhekk, it-telf tal-messaġġ huwa possibbli biss jekk żewġ repliki jfallu simultanjament f'intervall qasir sakemm il-messaġġ jiġi replikat għal segwaċi addizzjonali, li huwa improbabbli. Imma jekk int super paranojde, tista 'tissettja l-fattur ta' replikazzjoni għal 5, u min.insync.repliki minn 3. Hawnhekk tliet sensara jridu jaqgħu fl-istess ħin biex jitilfu r-rekord! Naturalment, inti tħallas għal din l-affidabbiltà f'latency addizzjonali.

Meta l-aċċessibbiltà hija meħtieġa għas-sigurtà tad-dejta

Bħal fi każ ma RabbitMQ, kultant l-aċċessibbiltà hija meħtieġa għas-sigurtà tad-dejta. Hawn dak li trid taħseb dwaru:

  • Jista' l-pubblikatur sempliċiment jirritorna żball u jkollu s-servizz upstream jew l-utent jerġa' jipprova aktar tard?
  • Jista' l-pubblikatur isalva l-messaġġ lokalment jew f'database biex jerġa' jipprova aktar tard?

Jekk it-tweġiba hija le, allura l-ottimizzazzjoni tad-disponibbiltà ttejjeb is-sigurtà tad-dejta. Inti titlef inqas dejta jekk tagħżel id-disponibbiltà minflok ma tirreġistrax. Għalhekk, kollox niżel biex jinstab bilanċ, u d-deċiżjoni tiddependi fuq is-sitwazzjoni speċifika.

It-tifsira ta 'ISR

Il-suite ISR jippermettilek li tagħżel l-aħjar bilanċ bejn is-sigurtà tad-dejta u l-latenza. Pereżempju, tiżgura d-disponibbiltà fil-każ ta’ falliment tal-maġġoranza tar-repliki, billi timminimizza l-impatt ta’ repliki mejta jew bil-mod f’termini ta’ latenza.

Aħna nagħżlu t-tifsira aħna stess replica.lag.time.max.ms skond il-bżonnijiet tiegħek. Essenzjalment, dan il-parametru jfisser kemm dewmien aħna lesti naċċettaw meta acks=kollha. Il-valur default huwa għaxar sekondi. Jekk dan huwa twil wisq għalik, tista 'tnaqqasha. Imbagħad il-frekwenza tal-bidliet fl-ISR tiżdied, peress li s-segwaċi se jitneħħew u jiżdiedu aktar spiss.

RabbitMQ huwa sempliċiment sett ta 'mirja li jeħtieġ li jiġu replikati. Mirja bil-mod jintroduċu latenza addizzjonali, u mirja mejta jistgħu jistennew sakemm il-pakketti li jivverifikaw id-disponibbiltà ta 'kull node (qurdien nett) biex jirrispondu. L-ISR huwa mod interessanti biex jiġu evitati dawn il-kwistjonijiet ta 'latency. Iżda aħna nirriskjaw li nitilfu s-sensja peress li l-ISR jista 'jiċkien biss għall-mexxej. Biex tevita dan ir-riskju, uża s-setting min.insync.repliki.

Garanzija tal-konnessjoni tal-klijent

Fis-settings bootstrap.servers produttur u konsumatur jistgħu jispeċifikaw sensara multipli għall-konnessjoni tal-klijenti. L-idea hija li meta node wieħed jinżel, fadal diversi spare li magħhom il-klijent jista 'jiftaħ konnessjoni. Dawn mhux bilfors huma mexxejja tas-sezzjoni, iżda sempliċiment mogħdija għat-tagħbija inizjali. Il-klijent jista 'jistaqsihom liema node jospita l-mexxej tal-partizzjoni qari/kitba.

F'RabbitMQ, il-klijenti jistgħu jgħaqqdu ma 'kwalunkwe nodu, u r-rotot intern jibgħat it-talba fejn jeħtieġ li tmur. Dan ifisser li tista 'tinstalla load balancer quddiem RabbitMQ. Kafka jeħtieġ li l-klijenti jikkonnettjaw man-node li jospita l-mexxej tal-partizzjoni korrispondenti. F'sitwazzjoni bħal din, ma tistax tinstalla load balancer. Lista bootstrap.servers Huwa kritiku li l-klijenti jkunu jistgħu jaċċessaw u jsibu n-nodi korretti wara falliment.

Arkitettura ta' Kunsens ta' Kafka

S'issa, ma kkunsidrawx kif il-cluster jitgħallem dwar il-waqgħa tas-sensar u kif jiġi elett mexxej ġdid. Biex tifhem kif Kafka jaħdem ma 'diviżorji tan-netwerk, l-ewwel trid tifhem l-arkitettura tal-kunsens.

Kull cluster Kafka huwa skjerat flimkien ma 'cluster Zookeeper, li huwa servizz ta' kunsens distribwit li jippermetti lis-sistema tilħaq kunsens dwar xi stat partikolari, billi tipprijoritizza l-konsistenza fuq id-disponibbiltà. Il-kunsens tal-maġġoranza tan-nodi Zookeeper huwa meħtieġ biex japprova l-operazzjonijiet tal-qari u l-kitba.

Zookeeper jaħżen l-istat tal-cluster:

  • Lista ta 'suġġetti, sezzjonijiet, konfigurazzjoni, repliki mexxej kurrenti, repliki preferuti.
  • Membri tal-cluster. Kull sensar pings lill-cluster Zookeeper. Jekk ma jirċievix ping f'perjodu ta 'żmien speċifikat, allura Zookeeper jirreġistra s-sensar bħala mhux disponibbli.
  • Għażla tan-nodi prinċipali u żejda għall-kontrollur.

In-nodu tal-kontrollur huwa wieħed mis-sensara Kafka li huwa responsabbli għall-elezzjoni tal-mexxejja tar-repliki. Zookeeper jibgħat notifiki lill-kontrollur dwar is-sħubija fil-clusters u l-bidliet fis-suġġett, u l-kontrollur irid jaġixxi fuq dawn il-bidliet.

Pereżempju, ejja nieħdu suġġett ġdid b'għaxar diviżorji u fattur ta 'replikazzjoni ta' 3. Il-kontrollur għandu jeleġġi mexxej għal kull partizzjoni, u jipprova jqassam bl-aħjar mod il-mexxejja fost is-sensara.

Għal kull kontrollur ta' sezzjoni:

  • jaġġorna l-informazzjoni f'Zookeeper dwar l-ISR u l-mexxej;
  • Tibgħat LeaderAndISRCommand lil kull sensar li jospita replika ta 'din il-partizzjoni, u jinforma lis-sensara dwar l-ISR u l-mexxej.

Meta jaqa 'sensar b'mexxej, Zookeeper jibgħat notifika lill-kontrollur, u jeleġġi mexxej ġdid. Għal darb'oħra, il-kontrollur l-ewwel jaġġorna lil Zookeeper u mbagħad jibgħat kmand lil kull sensar biex jinnotifikahom bil-bidla fit-tmexxija.

Kull mexxej huwa responsabbli għar-reklutaġġ ta' ISRs. Settings replica.lag.time.max.ms jiddetermina min se jidħol hemmhekk. Meta l-ISR jinbidel, il-mexxej jittrażmetti informazzjoni ġdida lil Zookeeper.

Zookeeper huwa dejjem infurmat bi kwalunkwe tibdil sabiex f'każ ta 'falliment, il-maniġment jgħaddi mingħajr xkiel għal mexxej ġdid.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 21. Kunsens Kafka

Protokoll ta' replikazzjoni

Il-fehim tad-dettalji tar-replikazzjoni jgħinek tifhem aħjar ix-xenarji potenzjali ta’ telf ta’ data.

Mistoqsijiet ta' kampjunar, Offset tat-Tmiem tal-Log (LEO) u Marka tal-Ilma Għolja (HW)

Aħna kkunsidraw li s-segwaċi perjodikament jibagħtu talbiet għall-ġbir lill-mexxej. L-intervall default huwa 500ms. Dan huwa differenti minn RabbitMQ peress li f'RabbitMQ ir-replikazzjoni mhix mibdija mill-mera tal-kju iżda mill-kaptan. Il-kaptan jimbotta bidliet lill-mirja.

Il-mexxej u s-segwaċi kollha jiffrankaw il-Log End Offset (LEO) u t-tikketta Highwater (HW). Il-marka LEO taħżen l-offset tal-aħħar messaġġ fir-replika lokali, u l-HW iżomm l-offset tal-aħħar impenn. Ftakar li għall-istatus ta' impenn, il-messaġġ irid jibqa' jippersisti fir-repliki kollha tal-ISR. Dan ifisser li LEO normalment ikun kemmxejn qabel HW.

Meta l-mexxej jirċievi messaġġ, jaħżen lokalment. Is-segwaċi jagħmel talba biex iġib billi jittrasmetti l-LEO tiegħu. Il-mexxej imbagħad jibgħat lott ta 'messaġġi li jibdew minn dan LEO u jittrasmetti wkoll l-HW attwali. Meta l-mexxej jirċievi informazzjoni li r-repliki kollha ħażnu l-messaġġ fl-offset mogħti, iċċaqlaq il-marka HW. Il-mexxej biss jista 'jċaqlaq l-HW, u għalhekk is-segwaċi kollha jkunu jafu l-valur attwali fit-tweġibiet għat-talba tagħhom. Dan ifisser li s-segwaċi jistgħu jibqgħu lura mal-mexxej kemm fil-messaġġ kif ukoll fl-għarfien HW. Il-konsumaturi jirċievu messaġġi biss sal-HW attwali.

Innota li "persisti" tfisser miktuba fil-memorja, mhux fuq disk. Għall-prestazzjoni, Kafka jissinkronizza mad-diska f'intervall speċifiku. RabbitMQ għandu wkoll intervall bħal dan, iżda se jibgħat rikonoxximent lill-pubblikatur biss wara li l-kaptan u l-mirja kollha jkunu kitbu l-messaġġ fuq disk. L-iżviluppaturi Kafka, għal raġunijiet ta 'prestazzjoni, iddeċidew li jibagħtu ack malli l-messaġġ jinkiteb fil-memorja. Kafka jaħseb li s-sensja tikkumpensa r-riskju li jinħażnu fil-qosor messaġġi rikonoxxuti fil-memorja biss.

Falliment tal-mexxej

Meta mexxej jaqa ', Zookeeper javża lill-kontrollur, u jagħżel replika ġdida tal-mexxej. Il-mexxej il-ġdid jistabbilixxi marka HW ġdida skont l-LEO tiegħu. Is-segwaċi mbagħad jirċievu informazzjoni dwar il-mexxej il-ġdid. Skont il-verżjoni ta' Kafka, is-segwaċi jagħżel wieħed minn żewġ xenarji:

  1. Se jonqos ir-reġistru lokali għal HW magħruf u jibgħat talba lill-mexxej il-ġdid għal messaġġi wara din il-marka.
  2. Se tibgħat talba lill-mexxej biex issir taf l-HW fil-ħin li kien elett mexxej, u mbagħad jonqos il-ġurnal għal dan l-offset. Imbagħad se tibda tagħmel talbiet perjodiċi tal-ġbir li jibdew minn dan l-offset.

Segwaċi jista' jkollu bżonn jaqta' l-ġurnal għar-raġunijiet li ġejjin:

  • Meta mexxej jonqos, l-ewwel segwaċi fis-sett ISR irreġistrat ma 'Zookeeper jirbaħ l-elezzjoni u jsir il-mexxej. Is-segwaċi kollha fuq l-ISR, għalkemm ikkunsidrati bħala "sinkronizzati," jistgħu ma rċevewx kopji tal-messaġġi kollha mill-mexxej preċedenti. Huwa kompletament possibbli li s-segwaċi dehru ma jkollux l-aktar kopja aġġornata. Kafka jiżgura li ma jkun hemm l-ebda diverġenza bejn ir-repliki. Għalhekk, biex jiġu evitati diskrepanzi, kull segwaċi għandu jonqos il-log tiegħu għall-valur HW tal-mexxej il-ġdid fil-ħin tal-elezzjoni tiegħu. Din hija raġuni oħra għaliex l-issettjar acks=kollha tant importanti għall-konsistenza.
  • Messaġġi huma perjodikament miktuba fuq disk. Jekk in-nodi kollha tal-cluster ifallu fl-istess ħin, allura repliki b'offsets differenti jinħażnu fuq id-diski. Huwa possibbli li meta s-sensara jerġgħu jiġu online, il-mexxej il-ġdid li jiġi elett ikun wara s-segwaċi tiegħu għax ġie salvat fuq disk qabel l-oħrajn.

Reunion mal-cluster

Meta jerġgħu jingħaqdu mal-cluster, ir-repliki jagħmlu l-istess bħal meta mexxej jonqos: jiċċekkjaw ir-replika tal-mexxej u jaqtgħu l-log tagħhom mal-HW tiegħu (fil-ħin tal-elezzjoni). B'paragun, RabbitMQ tittratta b'mod ugwali nodi magħquda bħala kompletament ġodda. Fiż-żewġ każijiet, is-sensar jarmi kwalunkwe stat eżistenti. Jekk tintuża sinkronizzazzjoni awtomatika, allura l-kaptan għandu jirreplika assolutament il-kontenut kurrenti kollu mal-mera l-ġdida f'metodu "ħalli lid-dinja kollha tistenna". Il-kaptan ma jaċċetta l-ebda operazzjoni ta' qari jew kitba matul din l-operazzjoni. Dan l-approċċ joħloq problemi fi kjuwijiet kbar.

Kafka huwa log distribwit, u b'mod ġenerali jaħżen aktar messaġġi minn kju RabbitMQ, fejn id-dejta titneħħa mill-kju wara li tinqara. Il-kjuwijiet attivi għandhom jibqgħu relattivament żgħar. Iżda Kafka huwa log bil-politika ta 'żamma tiegħu stess, li jista' jistabbilixxi perjodu ta 'jiem jew ġimgħat. L-imblukkar tal-kju u l-approċċ tas-sinkronizzazzjoni sħiħa huwa assolutament inaċċettabbli għal log distribwit. Minflok, is-segwaċi ta' Kafka sempliċement jaqtgħu l-ġurnal tagħhom mal-HW tal-mexxej (fil-ħin tal-elezzjoni tiegħu) jekk il-kopja tagħhom tkun qabel il-mexxej. Fil-każ l-aktar probabbli, meta s-segwaċi jkun lura, sempliċiment jibda jagħmel talbiet għall-ġbir li jibdew bl-LEO attwali tiegħu.

Segwaċi ġodda jew magħquda mill-ġdid jibdew barra l-ISR u ma jipparteċipawx fil-kommessi. Huma sempliċiment jaħdmu flimkien mal-grupp, jirċievu messaġġi malajr kemm jistgħu sakemm ilaħħqu mal-mexxej u jidħlu fl-ISR. M'hemm l-ebda lock-in u l-ebda ħtieġa li tarmi d-dejta kollha tiegħek.

Telf ta' konnettività

Kafka għandu aktar komponenti minn RabbitMQ, għalhekk għandu sett aktar kumpless ta 'mġieba meta l-cluster isir skonnettjat. Iżda Kafka oriġinarjament kien iddisinjat għal clusters, għalhekk is-soluzzjonijiet huma maħsuba tajjeb ħafna.

Hawn taħt hawn diversi xenarji ta' falliment tal-konnettività:

  • Xenarju 1: Is-segwaċi ma jarax il-mexxej, iżda xorta jara liż-Żookeeper.
  • Xenarju 2: Il-mexxej ma jara l-ebda segwaċi, iżda xorta jara lil Zookeeper.
  • Xenarju 3: Is-segwaċi jara lill-mexxej, iżda ma jarax lil Zookeeper.
  • Xenarju 4: Il-mexxej jara s-segwaċi, iżda ma jarax liż-Żookeeper.
  • Xenarju 5: Is-segwaċi huwa kompletament separat kemm minn nodi Kafka oħra kif ukoll minn Zookeeper.
  • Xenarju 6: Il-mexxej huwa kompletament separat kemm minn nodi Kafka oħra kif ukoll minn Zookeeper.
  • Xenarju 7: In-nodu tal-kontrollur Kafka ma jistax jara node Kafka ieħor.
  • Xenarju 8: Il-kontrollur Kafka ma jarax Zookeeper.

Kull xenarju għandu l-imġieba tiegħu.

Xenarju 1: Is-segwaċi ma jarax il-mexxej, iżda xorta jara lil Zookeeper

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 22. Xenarju 1: ISR ta' tliet repliki

Il-falliment tal-konnettività jifred is-sensar 3 mis-sensara 1 u 2, iżda mhux minn Zookeeper. Broker 3 ma jistax jibghat aktar talbiet fetch. Wara li jkun għadda ż-żmien replica.lag.time.max.ms titneħħa mill-ISR u ma tipparteċipax fl-impenji tal-messaġġ. Ladarba l-konnettività tiġi restawrata, terġa 'tibda t-talbiet ta' ġbir u tingħaqad mal-ISR meta tlaħħaq mal-mexxej. Zookeeper se jkompli jirċievi pings u jassumi li s-sensar huwa ħaj u tajjeb.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 23. Xenarju 1: Is-sensar jitneħħa mill-ISR jekk ma tiġi riċevuta l-ebda talba għall-ġbir minnu fl-intervall replica.lag.time.max.ms

M'hemm l-ebda sospensjoni split-brain jew node bħal f'RabbitMQ. Minflok, is-sensja titnaqqas.

Xenarju 2: Leader ma jara l-ebda segwaċi, iżda xorta jara lil Zookeeper

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 24. Xenarju 2. Mexxej u żewġ segwaċi

Tqassim fil-konnettività tan-netwerk jifred lill-mexxej mis-segwaċi, iżda s-sensar xorta jista 'jara lil Zookeeper. Bħal fl-ewwel xenarju, l-ISR jiċkien, iżda din id-darba biss lill-mexxej peress li s-segwaċi kollha jieqfu jibagħtu talbiet għall-ġbir. Għal darb'oħra, m'hemm l-ebda diviżjoni loġika. Minflok, hemm telf ta’ redundancy għal messaġġi ġodda sakemm il-konnettività tiġi restawrata. Zookeeper ikompli jirċievi pings u jemmen li s-sensar huwa ħaj u tajjeb.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 25. Xenarju 2. ISR naqas biss għall-mexxej

Xenarju 3. Is-segwaċi jara lill-mexxej, iżda ma jarax liż-Żookeeper

Is-segwaċi huwa separat minn Zookeeper, iżda mhux mis-sensar mal-mexxej. Bħala riżultat, is-segwaċi jkompli jagħmel it-talbiet għall-ġbir u jkun membru tal-ISR. Zookeeper m'għadux jirċievi pings u jirreġistra crash ta 'sensar, iżda peress li huwa biss segwaċi, m'hemm l-ebda konsegwenzi wara l-irkupru.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 26. Xenarju 3: Is-segwaċi jkompli jibgħat talbiet għall-ġbir lill-mexxej

Xenarju 4. Leader jara segwaċi, iżda ma jarax Zookeeper

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 27. Xenarju 4. Mexxej u żewġ segwaċi

Il-mexxej huwa separat minn Zookeeper, iżda mhux mis-sensara b'segwaċi.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 28. Xenarju 4: Mexxej iżolat minn Zookeeper

Wara xi żmien, Zookeeper jirreġistra falliment ta 'sensar u jinnotifika lill-kontrollur dwar dan. Huwa se jagħżel mexxej ġdid fost is-segwaċi tiegħu. Madankollu, il-mexxej oriġinali se jkompli jaħseb li huwa l-mexxej u se jkompli jaċċetta dħul minn acks=1. Is-segwaċi m'għadhomx jibagħtulu talbiet għal ġibda, u għalhekk se jqishom mejta u jipprova jnaqqas l-ISR għalih innifsu. Iżda peress li m'għandux konnessjoni ma' Zookeeper, mhux se jkun jista 'jagħmel dan, u f'dak il-punt se jirrifjuta li jaċċetta kwalunkwe dħul ieħor.

Messaġġi acks=kollha mhux se jirċievi rikonoxximent għaliex l-ISR l-ewwel jixgħel ir-repliki kollha, u l-messaġġi ma jaslux għalihom. Meta l-mexxej oriġinali jipprova jneħħihom mill-ISR, ma jkunx jista 'jagħmel dan u jieqaf jaċċetta xi messaġġi.

Il-klijenti dalwaqt jinnutaw il-bidla fil-mexxej u jibdew jibagħtu r-rekords lis-server il-ġdid. Ladarba n-netwerk jiġi rrestawrat, il-mexxej oriġinali jara li m'għadux mexxej u jaqta 'l-log tiegħu għall-valur HW li l-mexxej il-ġdid kellu fil-ħin tan-nuqqas li jevita d-diverġenza fil-log. Imbagħad jibda jibgħat talbiet għall-ġibda lill-mexxej il-ġdid. Ir-rekords kollha mill-mexxej oriġinali li mhumiex replikati għall-mexxej il-ġdid jintilfu. Jiġifieri jintilfu messaġġi li ma ġewx rikonoxxuti mill-mexxej oriġinali f’dawk il-ftit sekondi meta żewġ mexxejja kienu qed jaħdmu.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 29. Xenarju 4. Il-mexxej fuq sensar 1 isir segwaċi wara li n-netwerk jiġi restawrat

Xenarju 5: Is-segwaċi huwa kompletament separat kemm minn nodi Kafka oħra kif ukoll minn Zookeeper

Is-segwaċi huwa kompletament iżolat kemm minn nodi Kafka oħra kif ukoll minn Zookeeper. Huwa sempliċiment ineħħi lilu nnifsu mill-ISR sakemm in-netwerk jiġi restawrat, u mbagħad ilaħħaq mal-oħrajn.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 30. Xenarju 5: Is-segwaċi iżolat jitneħħa mill-ISR

Xenarju 6: Il-mexxej huwa kompletament separat kemm minn nodi Kafka oħra kif ukoll minn Zookeeper

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 31. Xenarju 6. Mexxej u żewġ segwaċi

Il-mexxej huwa kompletament iżolat mis-segwaċi tiegħu, il-kontrollur u ż-Żookeeper. Għal perjodu qasir se tkompli taċċetta entrati minn acks=1.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 32. Xenarju 6: L-iżolament tal-mexxej minn nodi oħra Kafka u Zookeeper

Li ma rċeviex talbiet wara l-iskadenza replica.lag.time.max.ms, se jipprova jnaqqas l-ISR għalih innifsu, iżda mhux se jkun jista 'jagħmel dan minħabba li m'hemm l-ebda komunikazzjoni ma' Zookeeper, allura tieqaf taċċetta jikteb.

Sadanittant, Zookeeper se jimmarka s-sensar iżolat bħala mejjet u l-kontrollur se jeleġġi mexxej ġdid.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 33. Xenarju 6. Żewġ mexxejja

Il-mexxej oriġinali jista 'jaċċetta daħliet għal ftit sekondi, iżda mbagħad jieqaf jaċċetta kwalunkwe messaġġ. Il-klijenti jiġu aġġornati kull 60 sekonda bl-aħħar metadejta. Huma jkunu infurmati bil-bidla fil-mexxej u jibdew jibagħtu l-entrati lill-mexxej il-ġdid.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 34. Xenarju 6: Il-manifatturi jaqilbu għal mexxej ġdid

L-iskrizzjonijiet ikkonfermati kollha magħmula mill-mexxej oriġinali peress li t-telf tal-konnettività se jintilfu. Ladarba n-netwerk jiġi restawrat, il-mexxej oriġinali se jiskopri permezz ta 'Zookeeper li m'għadux il-mexxej. Imbagħad jonqos il-log tiegħu mal-HW tal-mexxej il-ġdid fil-ħin tal-elezzjoni u jibda jibgħat it-talbiet bħala segwaċi.

RabbitMQ vs Kafka: Tolleranza għal Ħsara u Disponibbiltà Għolja
Ross. 35. Xenarju 6: Il-mexxej oriġinali jsir segwaċi wara li tiġi rrestawrata l-konnettività tan-netwerk

F'din is-sitwazzjoni, separazzjoni loġika tista 'sseħħ għal perjodu qasir, iżda biss jekk acks=1 и min.insync.repliki ukoll 1. Is-separazzjoni loġika tispiċċa awtomatikament jew wara li n-netwerk jiġi restawrat, meta l-mexxej oriġinali jirrealizza li m'għadux il-mexxej, jew meta l-klijenti kollha jirrealizzaw li l-mexxej inbidel u jibdew jikteb lill-mexxej il-ġdid - liema jiġri l-ewwel. Fi kwalunkwe każ, xi messaġġi se jintilfu, iżda biss bi acks=1.

Hemm varjant ieħor ta 'dan ix-xenarju fejn, eżatt qabel il-qsim tan-netwerk, is-segwaċi waqgħu lura u l-mexxej ikkompressa l-ISR għal innifsu. Imbagħad isir iżolat minħabba telf ta 'konnettività. Jiġi elett mexxej ġdid, iżda l-mexxej oriġinali jkompli jaċċetta l-entrati, anke acks=kollha, għax m'hemm ħadd ieħor fl-ISR ħlief lilu. Dawn ir-rekords jintilfu ladarba n-netwerk jiġi restawrat. L-uniku mod biex tiġi evitata din l-għażla huwa min.insync.replicas = 2.

Xenarju 7: Nodu tal-Kontrollur Kafka Ma Jistax Ara Nodu Kafka Ieħor

B'mod ġenerali, ladarba tintilef il-konnessjoni ma 'node Kafka, il-kontrollur ma jkunx jista' jittrasmetti l-ebda informazzjoni dwar il-bidla tal-mexxej għalih. Fl-agħar każ, dan iwassal għal separazzjoni loġika għal żmien qasir, bħal fix-xenarju 6. Iktar iva milli le, is-sensar sempliċement ma jsirx kandidat għat-tmexxija jekk dan tal-aħħar jonqos.

Xenarju 8: Il-kontrollur Kafka ma jarax Zookeeper

Zookeeper mhux se jirċievi ping mill-kontrollur waqa 'u se jagħżel node Kafka ġdid bħala l-kontrollur. Il-kontrollur oriġinali jista 'jkompli jippreżenta ruħu bħala tali, iżda ma jirċievix notifiki minn Zookeeper, għalhekk mhux se jkollu l-ebda kompiti x'jwettaq. Ladarba n-netwerk jiġi restawrat, huwa se jirrealizza li m'għadux kontrollur, iżda sar node Kafka regolari.

Konklużjonijiet mix-xenarji

Naraw li t-telf tal-konnettività tas-segwaċi ma jirriżultax f'telf ta 'messaġġi, iżda sempliċement inaqqas temporanjament is-sensja sakemm in-netwerk jiġi restawrat. Dan, ovvjament, jista 'jwassal għal telf ta' data jekk jintilfu nodu wieħed jew aktar.

Jekk il-mexxej jinfired minn Zookeeper minħabba telf ta' konnettività, dan jista' jirriżulta f'messaġġi mitlufa minn acks=1. In-nuqqas ta 'komunikazzjoni ma' Zookeeper jikkawża qasma loġika qasira maż-żewġ mexxejja. Din il-problema tissolva bil-parametru acks=kollha.

Parametru min.insync.repliki f'żewġ repliki jew aktar jipprovdi assigurazzjoni addizzjonali li dawn ix-xenarji għal żmien qasir ma jirriżultawx f'messaġġi mitlufa bħal fix-Xenarju 6.

Sommarju tal-Messaġġi Mitlufa

Ejja elenka l-modi kollha kif tista' titlef id-dejta f'Kafka:

  • Kwalunkwe falliment tal-mexxej jekk il-messaġġi ġew ikkonfermati bl-użu acks=1
  • Kwalunkwe transizzjoni mhux nadif ta 'tmexxija, jiġifieri, għal segwaċi barra l-ISR, anke ma acks=kollha
  • L-iżolament tal-mexxej minn Zookeeper jekk messaġġi kienu kkonfermati bl-użu acks=1
  • Iżolament sħiħ tal-mexxej li diġà ċkien il-grupp ISR għalih innifsu. Il-messaġġi kollha se jintilfu, anke acks=kollha. Dan huwa minnu biss jekk min.insync.replicas=1.
  • Fallimenti simultanji tan-nodi tal-partizzjoni kollha. Minħabba li l-messaġġi huma rikonoxxuti mill-memorja, xi wħud jistgħu għadhom ma nkitbux fuq disk. Wara li jerġgħu jibdew is-servers, xi messaġġi jistgħu jkunu neqsin.

Transizzjonijiet ta' tmexxija mhux ħażin jistgħu jiġu evitati jew billi jiġu pprojbiti jew billi jiġu żgurati mill-inqas żewġ sensji. L-aktar konfigurazzjoni dejjiema hija kombinazzjoni acks=kollha и min.insync.repliki aktar minn 1.

Tqabbil dirett tal-affidabbiltà ta 'RabbitMQ u Kafka

Biex tiġi żgurata affidabbiltà u disponibbiltà għolja, iż-żewġ pjattaformi jimplimentaw sistema ta 'replikazzjoni primarja u sekondarja. Madankollu, RabbitMQ għandu għarqub ta 'Akilles. Meta jerġgħu jikkonnettjaw wara falliment, in-nodi jarmu d-dejta tagħhom u s-sinkronizzazzjoni tiġi mblukkata. Dan il-whammy doppju jpoġġi fid-dubju l-lonġevità tal-kjuwijiet kbar f'RabbitMQ. Ikollok taċċetta jew redundancy mnaqqsa jew ħinijiet twal ta' imblukkar. It-tnaqqis ta’ redundancy iżid ir-riskju ta’ telf kbir ta’ data. Iżda jekk il-kjuwijiet huma żgħar, allura għall-fini ta 'redundancy, perjodi qosra ta' indisponibbiltà (ftit sekondi) jistgħu jiġu ttrattati bl-użu ta 'tentattivi ta' konnessjoni ripetuti.

Kafka m'għandux din il-problema. Jarmi d-dejta biss mill-punt ta 'diverġenza bejn il-mexxej u s-segwaċi. Id-dejta kollha kondiviża tiġi ssejvjata. Barra minn hekk, ir-replikazzjoni ma timblokkax is-sistema. Il-mexxej ikompli jaċċetta l-karigi filwaqt li s-segwaċi l-ġdid jaqbad, għalhekk għad-devops, li jingħaqdu jew jerġgħu jingħaqdu mal-cluster isir kompitu trivjali. Naturalment, għad hemm kwistjonijiet bħal bandwidth tan-netwerk waqt ir-replikazzjoni. Jekk iżżid segwaċi multipli fl-istess ħin, tista' tiltaqa' ma' limitu ta' bandwidth.

RabbitMQ huwa superjuri għal Kafka fl-affidabilità meta servers multipli fi cluster ifallu fl-istess ħin. Kif diġà għedna, RabbitMQ jibgħat konferma lill-pubblikatur biss wara li l-messaġġ jinkiteb fuq disk mill-kaptan u l-mirja kollha. Iżda dan iżid latenza addizzjonali għal żewġ raġunijiet:

  • fsync kull ftit mijiet ta' millisekondi
  • Il-falliment tal-mera jista 'jiġi nnotat biss wara li l-ħajja tal-pakketti li jivverifikaw id-disponibbiltà ta' kull node (qurdien nett) tkun skadiet. Jekk il-mera tonqos jew taqa ', dan iżid dewmien.

L-imħatra ta’ Kafka hija li jekk messaġġ jinħażen f’diversi nodi, jista’ jirrikonoxxi messaġġi hekk kif jolqtu l-memorja. Minħabba dan, hemm riskju li jintilfu messaġġi ta 'kull tip (anke acks=kollha, min.insync.replicas=2) f'każ ta' falliment simultanju.

B'mod ġenerali, Kafka juri prestazzjoni aħjar tas-softwer u huwa ddisinjat mill-bidu għal clusters. In-numru ta 'segwaċi jista' jiżdied għal 11 jekk meħtieġ għall-affidabbiltà. Fattur ta' replikazzjoni 5 u numru minimu ta' repliki fis-sinkronizzazzjoni min.insync.replicas=3 se tagħmel it-telf tal-messaġġ avveniment rari ħafna. Jekk l-infrastruttura tiegħek tista' tappoġġja dan il-proporzjon ta' replikazzjoni u l-livell ta' redundancy, allura tista' tagħżel din l-għażla.

RabbitMQ clustering huwa tajjeb għal kjuwijiet żgħar. Iżda anke kjuwijiet żgħar jistgħu jikbru malajr meta jkun hemm traffiku qawwi. Ladarba l-kjuwijiet isiru kbar, ikollok tagħmel għażliet iebsa bejn id-disponibbiltà u l-affidabbiltà. RabbitMQ clustering huwa l-aktar adattat għal sitwazzjonijiet mhux tipiċi fejn il-benefiċċji tal-flessibilità ta 'RabbitMQ jegħlbu kwalunkwe żvantaġġi tagħha clustering.

Antidotu wieħed għall-vulnerabbiltà ta' RabbitMQ għal kjuwijiet kbar huwa li jinqasmu f'ħafna kjuwijiet iżgħar. Jekk ma teħtieġx tordna sħiħa tal-kju kollu, iżda biss il-messaġġi rilevanti (per eżempju, messaġġi minn klijent speċifiku), jew ma tordna xejn, allura din l-għażla hija aċċettabbli: ħares lejn il-proġett tiegħi Rebalancer biex taqsam il-kju (il-proġett għadu fi stadju bikri).

Fl-aħħarnett, tinsiex dwar numru ta 'bugs fil-mekkaniżmi ta' raggruppament u replikazzjoni kemm ta 'RabbitMQ kif ukoll ta' Kafka. Maż-żmien, is-sistemi saru aktar maturi u stabbli, iżda l-ebda messaġġ qatt mhu se jkun 100% sigur mit-telf! Barra minn hekk, inċidenti fuq skala kbira jseħħu fiċ-ċentri tad-dejta!

Jekk tlift xi ħaġa, għamilt żball, jew ma taqbilx ma' xi punti, tħossok liberu li tikteb kumment jew ikkuntattjani.

Spiss inkun mistoqsi: "X'nagħżel, Kafka jew RabbitMQ?", "Liema pjattaforma hija aħjar?". Il-verità hi li tiddependi tassew fuq is-sitwazzjoni tiegħek, l-esperjenza attwali, eċċ. Ninsab lura milli nagħti l-opinjoni tiegħi għax tkun wisq simplifikazzjoni li nirrakkomanda pjattaforma waħda għall-każijiet kollha ta' użu u l-limitazzjonijiet possibbli. Ktibt din is-sensiela ta’ artikli sabiex tkun tista’ tifforma l-opinjoni tiegħek.

Irrid ngħid li ż-żewġ sistemi huma mexxejja f'dan il-qasam. Jista’ nkun xi ftit preġudikata għax mill-esperjenza tiegħi bi proġetti għandi t-tendenza li nivvalorizza affarijiet bħall-ordni ta’ messaġġi garantiti u l-affidabbiltà.

Nara teknoloġiji oħra li m'għandhomx din l-affidabbiltà u l-ordni garantit, imbagħad inħares lejn RabbitMQ u Kafka u nirrealizza l-valur inkredibbli ta 'dawn iż-żewġ sistemi.

Sors: www.habr.com

Żid kumment