RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar

В labarin karshe mun duba tari na RabbitMQ don jure rashin kuskure da wadatuwa mai yawa. Yanzu bari mu zurfafa cikin Apache Kafka.

Anan raka'ar kwafi shine bangare. Kowane batu yana da sassa ɗaya ko fiye. Kowane sashe yana da jagora mai mabiya ko maras sa. Lokacin ƙirƙirar jigo, kuna ƙididdige adadin ɓangarori da ƙimar kwafi. Adadin da aka saba shine 3, wanda ke nufin kwafi uku: jagora ɗaya da mabiya biyu.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 1. Ana rarraba sassa hudu tsakanin dillalai uku

Duk buƙatun karantawa da rubuta suna zuwa ga jagora. Mabiya lokaci-lokaci suna aika buƙatu zuwa ga jagora don karɓar sabbin saƙonni. Masu amfani ba sa juya zuwa mabiya; na ƙarshe ya wanzu ne kawai don sakewa da haƙurin kuskure.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar

Rashin rabo

Lokacin da dillali ya gaza, shugabannin sassa da yawa sukan gaza. A cikin kowannensu, mabiyi daga wani kulli ya zama jagora. A zahiri, ba koyaushe haka lamarin yake ba, tunda yanayin aiki tare kuma yana tasiri: ko akwai masu bin aiki tare, idan kuma ba haka ba, to ko canzawa zuwa kwafin da ba a daidaita shi ba an yarda. Amma kada mu dagula abubuwa a yanzu.

Dillali 3 ya bar cibiyar sadarwa, kuma an zaɓi sabon shugaba don sashe na 2 a dillali 2.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 2. Dillali 3 ya rasu sannan aka zabi mabiyinsa akan dillali 2 a matsayin sabon shugaban jam'iyyar part 2.

Sannan dillali 1 ya bar sashe na 1 shima ya rasa jagoransa, wanda aikinsa ya wuce dillali 2.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 3. Akwai dillali guda daya. Duk shugabanni suna kan dillali ɗaya ba tare da jan aiki ba

Lokacin da dillali 1 ya dawo kan layi, yana ƙara mabiya huɗu, yana ba da wasu raguwa ga kowane bangare. Amma duk shugabannin sun kasance a kan dillali 2.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 4. Shugabanni sun kasance kan dillali 2

Lokacin da dillali 3 ya fito, muna komawa zuwa kwafi uku a kowane bangare. Amma duk shugabannin suna kan dillali 2.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 5. Rashin daidaiton shugabanni bayan maido da dillalai na 1 da 3

Kafka yana da kayan aiki don ingantaccen daidaitawar jagora fiye da RabbitMQ. A can, dole ne ku yi amfani da plugin ɗin ɓangare na uku ko rubutun wanda ya canza manufofin ƙaura babban kullin ta hanyar rage raguwa yayin ƙaura. Bugu da kari, don manyan layukan da muka yi dole ne mu yarda da rashin samuwa yayin aiki tare.

Kafka yana da ma'anar "fifificin kwafi" don matsayin jagora. Lokacin da aka ƙirƙiri ɓangarori na jigo, Kafka na ƙoƙarin rarraba shugabanni daidai gwargwado a ko'ina kuma ya sanya waɗancan shugabannin farko a matsayin waɗanda aka fi so. A tsawon lokaci, saboda sake kunnawar uwar garken, gazawa, da lalacewar haɗin kai, shugabanni na iya ƙarewa akan wasu nodes, kamar a cikin matsanancin yanayin da aka bayyana a sama.

Don gyara wannan, Kafka yana ba da zaɓuɓɓuka biyu:

  • Zaɓi auto.leader.rebalance.enable=gaskiya yana ba da kullin mai sarrafawa damar sake sanya shugabannin kai tsaye zuwa ga kwafin da aka fi so kuma ta haka ne ya dawo da rarraba iri ɗaya.
  • Mai gudanarwa na iya gudanar da rubutun kafka-wanda aka fi so-replica-zaben.sh don sake aikin hannu.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 6. Kwafi bayan sake daidaitawa

Wannan sigar gazawa ce mai sauƙi, amma gaskiyar ta fi rikitarwa, kodayake babu wani abu mai rikitarwa a nan. Duk ya zo ƙasa zuwa kwafi masu aiki tare (In-Sync Replicas, ISR).

Rubuce-rubuce masu aiki tare (ISR)

ISR saitin kwafi ne na wani bangare wanda ake ganin “aikin daidaitawa” (in-sync). Akwai shugaba, amma ba za a sami mabiya ba. Ana ɗaukar mabiyi aiki tare idan ya yi daidai kwafin duk saƙonnin jagora kafin tazarar ta ƙare. replica.lag.time.max.ms.

Ana cire mabiyi daga saitin ISR idan:

  • bai yi roƙo don zaɓar don tazara ba replica.lag.time.max.ms (wanda ake zaton ya mutu)
  • bai gudanar da sabuntawa ba yayin tazara replica.lag.time.max.ms (la'akari a hankali)

Mabiya suna yin buƙatun samfur a cikin tazara replica.fetch.wait.max.ms, wanda ya gaza zuwa 500ms.

Don bayyana maƙasudin ISR a fili, muna buƙatar duba tabbaci daga mai samarwa da wasu al'amuran gazawa. Masu samarwa za su iya zaɓar lokacin da dillali ya aika tabbaci:

  • acks=0, ba a aiko da tabbaci ba
  • acks=1, ana aika da tabbaci bayan shugaba ya rubuta sako zuwa log ɗin sa na gida
  • acks=all, ana aika tabbaci bayan duk kwafi a cikin ISR sun rubuta saƙon zuwa rajistan ayyukan gida

A cikin kalmomin Kafka, idan ISR ta ajiye saƙo, an "yi". Acks=duk shine mafi aminci zaɓi, amma kuma yana ƙara ƙarin jinkiri. Bari mu kalli misalai guda biyu na gazawa da yadda zaɓuɓɓukan 'acks' daban-daban ke hulɗa tare da ra'ayin ISR.

Acks=1 da ISR

A cikin wannan misali, za mu ga cewa idan shugaba bai jira kowane sako daga duk masu bi ya tsira ba, to, asarar bayanai yana yiwuwa idan shugaban ya kasa. Ana iya kunna ko kashe kewayawa zuwa mabiyin da ba a daidaita ba ta saiti rashin tsarki.shugaban.zaben.amfani.

A cikin wannan misali, mai ƙira yana da ƙimar acks=1. An rarraba sashin a kan duk dillalai uku. Dillali 3 yana bayansa, yayi aiki tare da shugaban daƙiƙa takwas da suka wuce kuma yanzu yana bayan saƙon 7456. Dillali 1 ya kasance bayan dakika daya kacal. Furodusanmu ya aiko da sako da sauri ya karɓi amsa, ba tare da wuce gona da iri na mabiya a hankali ko matattu waɗanda shugaban baya jira ba.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 7. ISR tare da kwafi uku

Dillali 2 ya gaza kuma mai samarwa ya sami kuskuren haɗi. Bayan jagoranci ya wuce zuwa dillali 1, mun rasa saƙonni 123. Mai bi a kan dillali 1 ya kasance wani ɓangare na ISR, amma ba a daidaita shi da jagora ba lokacin da ya faɗi.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 8. Saƙonni suna ɓacewa lokacin da ya fadi

A cikin tsari bootstrap.sabar Mai sana'anta yana da dillalai da yawa da aka jera kuma suna iya tambayar wani dillali wanda shine sabon shugaban sashe. Sannan ta kafa haɗin kai zuwa dillali 1 kuma ta ci gaba da aika saƙonni.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 9. Ana ci gaba da aika saƙonni bayan ɗan gajeren hutu

Dillali 3 ma yana gaba a baya. Yana yin buƙatun debo amma ba zai iya daidaitawa ba. Wannan na iya zama saboda jinkirin haɗin yanar gizo tsakanin dillalai, batun ajiya, da sauransu. An cire shi daga ISR. Yanzu ISR ya ƙunshi kwafi ɗaya - jagora! Mai ƙira ya ci gaba da aika saƙonni da karɓar tabbaci.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 10. An cire Mabiyi akan dillali 3 daga ISR

Dillali 1 ya sauka kuma aikin jagoranci ya tafi dillali 3 tare da asarar saƙonnin 15286! Mai ƙira yana karɓar saƙon kuskuren haɗi. Canji zuwa jagora a wajen ISR ya yiwu ne kawai saboda saitin m.leader.election.enable=gaskiya. Idan an shigar dashi arya, to canjin ba zai faru ba kuma duk buƙatun karantawa da rubuta za a ƙi su. A wannan yanayin, muna jiran dillali 1 ya dawo tare da cikakkun bayanansa a cikin kwafin, wanda zai sake ɗaukar jagoranci.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 11. Dillali 1 faduwa. Lokacin da gazawa ta faru, yawancin saƙonni suna ɓacewa

Mai samarwa ya kafa haɗin gwiwa tare da dillali na ƙarshe kuma yana ganin cewa yanzu shine jagoran sashin. Ya fara aika sako zuwa dillali 3.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 12. Bayan ɗan gajeren hutu, ana sake aika saƙonni zuwa sashe na 0

Mun ga cewa, baya ga gajeriyar katsewa don kafa sabbin hanyoyin sadarwa da neman sabon jagora, masana'anta suna aika sakonni akai-akai. Wannan saitin yana tabbatar da samuwa a farashin daidaito (tsaro bayanan). Kafka ya rasa dubban saƙonni amma ya ci gaba da karɓar sababbin rubuce-rubuce.

Acks = duk da ISR

Bari mu sake maimaita wannan yanayin, amma tare da acks=duk. Dillali 3 yana da matsakaicin jinkiri na daƙiƙa huɗu. Mai sana'anta yana aika sako tare da acks=duk, kuma yanzu baya samun amsa mai sauri. Jagora yana jira don adana saƙon ta duk kwafi a cikin ISR.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 13. ISR tare da kwafi uku. Ɗaya yana jinkirin, yana haifar da jinkirin rikodin

Bayan daƙiƙa huɗu na ƙarin jinkiri, dillali 2 yana aika sako. Duk kwafi yanzu an sabunta su sosai.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 14. Duk kwafi ajiye saƙonni da aika ack

Broker 3 yanzu ya faɗi gaba kuma an cire shi daga ISR. Latency yana raguwa sosai saboda babu jinkirin kwafi da aka bari a cikin ISR. Dillali 2 yanzu yana jiran dillali 1 kawai, kuma yana da matsakaicin raguwar 500 ms.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 15. An cire kwafi akan dillali 3 daga ISR

Sai dillali 2 ya fadi kuma shugabanci ya wuce zuwa dillali 1 ba tare da asarar sakonni ba.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 16. Dillali 2 faduwa

Maƙerin ya sami sabon shugaba kuma ya fara aika masa saƙonni. An ƙara rage latency saboda ISR yanzu ya ƙunshi kwafi ɗaya! Saboda haka zabin acks=duk baya kara jan aiki.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 17. Kwafi akan dillali 1 yana jagorantar ba tare da rasa saƙonni ba

Sai dillali 1 ya fado kuma jagorar ta tafi dillali 3 tare da asarar saƙonni 14238!

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 18. Dillali 1 ya mutu kuma canjin jagoranci tare da saiti mara tsabta yana haifar da asarar bayanai mai yawa

Ba mu iya shigar da zaɓin ba rashin tsarki.shugaban.zaben.amfani cikin ma'ana gaskiya. Ta hanyar tsoho daidai yake arya. Saituna acks=duk с m.leader.election.enable=gaskiya yana ba da dama ga wasu ƙarin tsaro na bayanai. Amma kamar yadda kuke gani, har yanzu muna iya rasa saƙonni.

Amma idan muna son ƙara tsaro bayanan fa? Kuna iya saka m.leader.election.enable = ƙarya, amma wannan ba lallai ba ne ya kare mu daga asarar bayanai. Idan jagoran ya fadi da karfi kuma ya dauki bayanan tare da su, sa'an nan kuma har yanzu saƙonni suna ɓacewa, da samuwa yana ɓacewa har sai mai gudanarwa ya dawo da halin da ake ciki.

Yana da kyau a tabbatar da cewa duk saƙonni ba su da yawa, kuma in ba haka ba a zubar da rikodin. Bayan haka, aƙalla daga mahangar dillali, asarar bayanai ba ta yiwuwa ne kawai idan aka sami gazawar biyu ko fiye a lokaci guda.

Acks=duk, min.insync.replicas da ISR

Tare da daidaitawar jigo min.insync.replicas Muna ƙara matakin tsaro na bayanai. Bari mu sake shiga cikin ɓangaren ƙarshe na yanayin da ya gabata, amma wannan lokacin tare da min.insync.replicas=2.

Don haka dillali 2 yana da jagorar kwafi kuma an cire mai bin dillali 3 daga ISR.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 19. ISR daga kwafi biyu

Dillali 2 ya faɗi kuma jagoranci ya wuce zuwa dillali 1 ba tare da asarar saƙonni ba. Amma yanzu ISR ta ƙunshi kwafi ɗaya kawai. Wannan bai dace da mafi ƙarancin lamba don karɓar bayanan ba, don haka dillali ya amsa ƙoƙarin rubutawa tare da kuskure Babu Isasshen Replicas.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 20. Yawan ISRs ɗaya ne ƙasa da ƙayyadaddun a min.insync.replicas

Wannan saitin yana sadaukar da samuwa don daidaito. Kafin mu yarda da saƙo, muna tabbatar da cewa an rubuta shi zuwa aƙalla kwafi biyu. Wannan yana ba masana'anta ƙarin tabbaci. Anan, asarar saƙon yana yiwuwa ne kawai idan kwafi biyu suka gaza a lokaci guda a cikin ɗan gajeren lokaci har sai an maimaita saƙon zuwa ƙarin mabiyi, wanda ba zai yuwu ba. Amma idan kun kasance super paranoid, za ku iya saita ma'anar maimaitawa zuwa 5, kuma min.insync.replicas ta 3. A nan dole ne dillalai uku su faɗi lokaci guda don rasa rikodin! Tabbas, kuna biyan wannan amincin a cikin ƙarin latency.

Lokacin samun dama ya zama dole don tsaron bayanai

Kamar yadda a cikin da RabbitMQ, wani lokacin samun dama ya zama dole don tsaron bayanai. Ga abin da kuke buƙatar tunani akai:

  • Shin mai wallafa zai iya dawo da kuskure kawai kuma ya sami sabis na sama ko mai amfani ya sake gwadawa daga baya?
  • Mai bugawa zai iya ajiye saƙon a cikin gida ko a cikin bayanan bayanai don sake gwadawa daga baya?

Idan amsar ita ce a'a, to, inganta samuwa yana inganta tsaro na bayanai. Za ku rasa ƙarancin bayanai idan kun zaɓi samuwa maimakon ba yin rikodi. Don haka, duk ya zo ne don gano ma'auni, kuma yanke shawara ya dogara da takamaiman halin da ake ciki.

Ma'anar ISR

ISR suite yana ba ku damar zaɓar ma'auni mafi kyau tsakanin tsaro da latency. Misali, tabbatar da samuwa a yayin gazawar mafi yawan kwafi, rage tasirin matattu ko jinkirin kwafi dangane da latency.

Mu kanmu muke zabar ma'anar replica.lag.time.max.ms bisa ga bukatun ku. Mahimmanci, wannan siga yana nufin nawa jinkirin da muke son karɓa lokacin acks=duk. Matsakaicin ƙimar daƙiƙa goma ne. Idan wannan ya yi tsawo a gare ku, za ku iya rage shi. Sa'an nan kuma yawan canje-canje a cikin ISR zai karu, tun da za a cire masu bin kuma a kara yawan lokuta.

RabbitMQ saitin madubi ne kawai wanda ke buƙatar maimaitawa. Madubai a hankali suna gabatar da ƙarin latency, kuma matattun madubai na iya jira har sai fakitin da ke duba samuwar kowane kulli (kas ɗin net) don amsawa. ISR hanya ce mai ban sha'awa don guje wa waɗannan batutuwan latency. Amma muna haɗarin rasa sakewa tunda ISR na iya raguwa kawai ga jagora. Don guje wa wannan haɗari, yi amfani da saitin min.insync.replicas.

Garantin haɗin abokin ciniki

A cikin saiti bootstrap.sabar furodusa da mabukaci na iya ƙayyade dillalai da yawa don haɗa abokan ciniki. Manufar ita ce, lokacin da kumburi ɗaya ya faɗi, akwai sauran abubuwan da suka rage waɗanda abokin ciniki zai iya buɗe haɗin gwiwa da su. Waɗannan ba lallai ba ne shugabannin sashe ba ne, amma kawai ginshiƙi ne don fara lodi. Abokin ciniki zai iya tambayar su wane kumburi ne ke karbar bakuncin jagoran ɓangaren karantawa/rubutu.

A cikin RabbitMQ, abokan ciniki na iya haɗawa zuwa kowane kulli, kuma hanyar shiga cikin gida tana aika buƙatar zuwa inda yake buƙatar zuwa. Wannan yana nufin cewa zaku iya shigar da ma'aunin nauyi a gaban RabbitMQ. Kafka yana buƙatar abokan ciniki su haɗa zuwa kumburin da ke ɗaukar nauyin jagoran ɓangaren daidai. A irin wannan yanayin, ba za ku iya shigar da ma'aunin nauyi ba. Jerin bootstrap.sabar Yana da mahimmanci cewa abokan ciniki zasu iya samun dama kuma su nemo madaidaicin nodes bayan gazawar.

Kafka Consensus Architecture

Har ya zuwa yanzu, ba mu yi la'akari da yadda ƙungiyar ta sami labarin faduwar dillali da yadda ake zaɓen sabon shugaba ba. Don fahimtar yadda Kafka ke aiki tare da sassan cibiyar sadarwa, da farko kuna buƙatar fahimtar gine-ginen yarjejeniya.

Kowane gungu na Kafka ana tura shi tare da gungun Zookeeper, wanda sabis ne na yarjejeniya da aka rarraba wanda ke ba da damar tsarin don cimma yarjejeniya kan wasu jihohin da aka bayar, yana ba da fifiko kan daidaito akan samuwa. Ana buƙatar izinin yawancin nodes na Zookeeper don amincewa da karantawa da rubuta ayyukan.

Zookeeper yana adana yanayin gungu:

  • Jerin batutuwa, sassan, tsari, kwafin jagora na yanzu, kwafi wanda aka fi so.
  • Mambobin tari. Kowane dillali yana ping cluster Zookeeper. Idan ba ta karɓi ping a cikin ƙayyadadden lokaci ba, to Zookeeper yana yin rikodin dillali kamar yadda babu shi.
  • Zaɓin babba da madaidaitan nodes don mai sarrafawa.

Kullin mai sarrafawa ɗaya ne daga cikin dillalan Kafka waɗanda ke da alhakin zaɓen shugabannin kwafi. Zookeeper yana aika sanarwa ga mai sarrafawa game da ƙungiyar tari da canje-canjen jigo, kuma dole ne mai kulawa yayi aiki akan waɗannan canje-canje.

Misali, bari mu dauki sabon maudu'i mai kashi goma da ma'auni na maimaitawa na 3. Dole ne mai kula da shi ya zabi jagora ga kowane bangare, yana kokarin rarraba shugabanni a tsakanin dillalai.

Ga kowane mai sarrafa sashe:

  • sabunta bayanai a cikin Zookeeper game da ISR da jagora;
  • Yana aika LeaderAndISRCommand ga kowane dillali wanda ya karɓi kwafin wannan bangare, yana sanar da dillalai game da ISR da jagora.

Lokacin da dillali tare da jagora ya faɗi, Zookeeper yana aika sanarwa zuwa ga mai sarrafawa, kuma ta zaɓi sabon jagora. Bugu da ƙari, mai sarrafawa ya fara sabunta Zookeeper sannan ya aika umarni ga kowane dillali yana sanar da su canjin shugabanci.

Kowane shugaba yana da alhakin daukar ISRs. Saituna replica.lag.time.max.ms yasan wanda zai shiga can. Lokacin da ISR ya canza, jagora yana aika sabon bayani zuwa Zookeeper.

Ana sanar da mai kula da gidan adana duk wani canje-canje ta yadda idan aka samu gazawa, gudanarwa ta sauya lami lafiya zuwa sabon shugaba.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 21. Kafka Consensus

Ka'idar maimaitawa

Fahimtar cikakkun bayanai na kwafi yana taimaka muku mafi fahimtar yuwuwar asarar bayanai.

Tambayoyin Samfurin, Ƙarshen Kashe Log (LEO) da Alamar Highwater (HW)

Mun yi la'akari da cewa mabiya lokaci-lokaci suna aika buƙatun neman zuwa ga jagora. Matsakaicin tsoho shine 500ms. Wannan ya bambanta da RabbitMQ da cewa a cikin RabbitMQ maimaitawa ba ta madubi jerin gwano ya fara ba amma ta maigidan. Maigidan yana tura canje-canje zuwa madubai.

Jagora da duk masu bibiya suna adana alamar Log End Offset (LEO) da alamar Highwater (HW). Alamar LEO tana adana madaidaicin saƙon ƙarshe a cikin kwafi na gida, kuma HW tana riƙe da diyya na alƙawarin ƙarshe. Ka tuna cewa don ƙaddamar da matsayi, dole ne a ci gaba da saƙon a duk kwafin ISR. Wannan yana nufin cewa LEO yawanci yana ɗan gaban HW.

Lokacin da jagora ya karɓi saƙo, yana adana shi a cikin gida. Mai bi yana yin buƙatun kawo ta hanyar aika LEO ɗin sa. Daga nan sai shugaban ya aika da saƙon saƙon da suka fara daga wannan LEO kuma yana aika da HW na yanzu. Lokacin da jagora ya karɓi bayanin cewa duk kwafi sun adana saƙon a lokacin da aka bayar, yana motsa alamar HW. Jagora ne kawai zai iya motsa HW, don haka duk masu bi za su san ƙimar halin yanzu a cikin martani ga buƙatar su. Wannan yana nufin cewa masu bi za su iya ja baya da jagora a cikin saƙo da ilimin HW. Masu amfani suna karɓar saƙonni har zuwa HW na yanzu kawai.

Lura cewa "nace" yana nufin rubutawa zuwa ƙwaƙwalwar ajiya, ba zuwa diski ba. Don yin aiki, Kafka yana aiki tare zuwa faifai a takamaiman tazara. RabbitMQ kuma yana da irin wannan tazara, amma zai aika da sanarwa ga mawallafin kawai bayan maigidan da duk madubin sun rubuta saƙon zuwa diski. Masu haɓaka Kafka, saboda dalilai na aiki, sun yanke shawarar aika ack da zarar an rubuta saƙon zuwa ƙwaƙwalwar ajiya. Kafka ya yi fare cewa sakewa yana daidaita haɗarin adana saƙon da aka amince da su a cikin ƙwaƙwalwar ajiya kawai.

gazawar jagora

Lokacin da jagora ya faɗi, Zookeeper yana sanar da mai kulawa, kuma yana zaɓar sabon kwafin jagora. Sabon shugaban ya kafa sabon alamar HW bisa ga LEO. Masu bi suna karɓar bayani game da sabon shugaba. Dangane da sigar Kafka, mai bi zai zaɓi ɗaya daga cikin yanayi biyu:

  1. Zai yanke log ɗin gida zuwa sanannen HW kuma ya aika da buƙatu ga sabon jagora don saƙonni bayan wannan alamar.
  2. Zai aika buƙatu zuwa ga jagora don gano HW a lokacin da aka zaɓe shi a matsayin jagora, sannan ya yanke log ɗin zuwa wannan. Daga nan za ta fara yin buƙatun kawo na lokaci-lokaci farawa daga wannan koma baya.

Mai bi zai iya buƙatar yanke log ɗin don dalilai masu zuwa:

  • Lokacin da jagora ya kasa, mabiyi na farko a cikin tsarin ISR mai rijista tare da Zookeeper ya lashe zaben kuma ya zama jagora. Duk masu bi a kan ISR, ko da yake ana la'akari da su "a cikin daidaitawa," ƙila ba su sami kwafin duk saƙonni daga tsohon shugaban ba. Yana yiwuwa gabaɗaya cewa mabiyin da aka bayyana ba shi da mafi kyawun kwafi na zamani. Kafka yana tabbatar da cewa babu bambanci tsakanin kwafi. Don haka, don guje wa saɓani, kowane mabiyi dole ne ya yanke log ɗinsa zuwa ƙimar HW na sabon shugaba a lokacin zaɓensa. Wannan shi ne wani dalilin da ya sa saitin acks=duk don haka mahimmanci don daidaito.
  • Ana rubuta saƙon lokaci-lokaci zuwa faifai. Idan duk nodes ɗin gungu sun gaza a lokaci guda, to za'a adana kwafi tare da ɓangarorin daban-daban akan faifai. Mai yiyuwa ne idan dillalai suka dawo kan layi, sabon shugaban da aka zaba zai kasance a bayan mabiyansa saboda an ajiye shi a diski kafin sauran.

Haɗuwa tare da tari

Lokacin sake haɗawa da tari, kwafin suna yin daidai da lokacin da jagora ya gaza: suna duba kwafin jagora kuma su yanke log ɗin su zuwa HW (a lokacin zaɓe). A kwatankwacin, RabbitMQ daidai yake ɗaukar nodes ɗin da aka haɗa su azaman sabo. A cikin duka biyun, dillali yana watsar da kowace jiha. Idan ana amfani da aiki tare ta atomatik, to dole ne maigida ya kwafi kwatankwacin duk abubuwan da ke ciki zuwa sabon madubi a cikin hanyar "bari dukan duniya ta jira". Maigidan baya yarda da duk wani aiki na karantawa ko rubutawa yayin wannan aikin. Wannan hanya tana haifar da matsaloli a cikin manyan layukan layi.

Kafka log ne da aka rarraba kuma gabaɗaya yana adana saƙonni fiye da layin RabbitMQ, inda ake cire bayanai daga layin bayan an karanta shi. Ya kamata layu masu aiki su kasance kaɗan kaɗan. Amma Kafka wani gungu ne mai nasa manufofin riƙewa, wanda zai iya saita tsawon kwanaki ko makonni. Katange jerin gwano da cikakken tsarin aiki tare ba za a yarda da shi ba don log ɗin da aka rarraba. Madadin haka, mabiyan Kafka kawai suna yanke log ɗin su zuwa HW na jagora (a lokacin zaɓensa) idan kwafin su yana gaban jagora. A cikin yanayin da ya fi dacewa, lokacin da mai bi ya kasance a baya, kawai yana fara neman buƙatun farawa da LEO na yanzu.

Sabbin mabiyan ko waɗanda suka dawo suna farawa a wajen ISR kuma ba sa shiga cikin aikatawa. Suna aiki tare da ƙungiyar kawai, suna karɓar saƙonni da sauri kamar yadda za su iya har sai sun cim ma shugaba kuma su shiga ISR. Babu kulle-kulle kuma babu buƙatar jefar da duk bayanan ku.

Rashin haɗin kai

Kafka yana da abubuwa da yawa fiye da RabbitMQ, don haka yana da ƙarin haɗaɗɗiyar ɗabi'a lokacin da tari ya katse. Amma Kafka an tsara shi ne don gungu, don haka ana tunanin mafita sosai.

A ƙasa akwai yanayin gazawar haɗin kai da yawa:

  • Yanayi na 1: Mabiyi baya ganin shugaba, amma har yanzu yana ganin mai tsaron gidan Zoo.
  • Yanayi na 2: Jagora baya ganin mabiya, amma har yanzu yana ganin Zookeeper.
  • Hali na 3: Mabiyi yana ganin jagora, amma ba ya ganin mai kula da gidan zoo.
  • Hali na 4: Jagora yana ganin mabiya, amma ba ya ganin mai kula da gidan zoo.
  • Yanayi na 5: Mabiyi ya bambanta da sauran nodes na Kafka da Zookeeper.
  • Yanayi na 6: Jagora ya bambanta da sauran nodes na Kafka da Zookeeper.
  • Hali na 7: Kullin mai sarrafa Kafka ba zai iya ganin wani kumburin Kafka ba.
  • Yanayi na 8: Mai kula da Kafka baya ganin Zookeeper.

Kowane labari yana da nasa hali.

Yanayin 1: Mabiyi baya ganin jagora, amma har yanzu yana ganin Zookeeper

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 22. Scenario 1: ISR na kwafi uku

Rashin haɗin haɗin kai yana raba dillali 3 daga dillalai 1 da 2, amma ba daga Zookeeper ba. Dillali 3 ba zai iya sake aika buƙatun kawowa ba. Bayan lokaci ya wuce replica.lag.time.max.ms an cire shi daga ISR kuma baya shiga cikin ayyukan saƙo. Da zarar an dawo da haɗin kai, zai dawo da buƙatun kuma ya shiga cikin ISR lokacin da ya ci karo da jagora. Zookeeper zai ci gaba da karɓar pings kuma ya ɗauka cewa dillalin yana raye kuma cikin koshin lafiya.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 23. Yanayi na 1: An cire dillali daga ISR idan ba a sami buƙatun debo daga gare ta ba a cikin tazarar replica.lag.time.max.ms

Babu tsaga-kwakwalwa ko dakatarwar kumburi kamar a RabbitMQ. Maimakon haka, an rage yawan aiki.

Yanayi na 2: Jagora baya ganin mabiya, amma har yanzu yana ganin Zookeeper

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 24. Hali 2. Jagora da mabiya biyu

Rushewar haɗin yanar gizon yana raba jagora daga mabiyan, amma dillali na iya ganin Zookeeper. Kamar yadda yake a cikin yanayin farko, ISR yana raguwa, amma wannan lokacin kawai ga jagora yayin da duk mabiyan ke daina aika buƙatun buƙatun. Bugu da ƙari, babu rabo mai ma'ana. Madadin haka, akwai asarar sakewa don sabbin saƙonni har sai an dawo da haɗin kai. Zookeeper ya ci gaba da karɓar pings kuma ya yi imanin cewa dillalin yana da rai kuma yana cikin koshin lafiya.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 25. Scenario 2. ISR ya ragu kawai ga jagora

Yanayi na 3. Mabiyi yana ganin shugaba, amma baya ganin mai tsaron gidan Zoo

An raba mai bin da Zookeeper, amma ba daga dillali tare da shugaba ba. Sakamakon haka, mai bin ya ci gaba da yin buƙatun buƙatun kuma ya zama memba na ISR. Zookeeper baya karɓar pings kuma yayi rajistar haɗarin dillali, amma tunda mabiyi ne kawai, babu wani sakamako bayan murmurewa.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 26. Scenario 3: Mabiyi ya ci gaba da aika buƙatun neman zuwa ga jagora

Yanayi 4. Jagora yana ganin mabiya, amma baya ganin Zookeeper

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 27. Hali 4. Jagora da mabiya biyu

An raba jagora da Zookeeper, amma ba daga dillalai masu mabiya ba.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 28. Hali na 4: Jagoran da aka ware daga Zookeeper

Bayan wani lokaci, Zookeeper zai yi rajistar gazawar dillali kuma ya sanar da mai kulawa game da shi. Zai zabi sabon shugaba a cikin mabiyansa. Koyaya, jagora na ainihi zai ci gaba da tunanin cewa shine jagora kuma zai ci gaba da karɓar shigarwar daga aiki = 1. Mabiya ba su sake aika masa buƙatun buƙatun ba, don haka zai ɗauka sun mutu kuma ya yi ƙoƙarin rage ISR ga kanta. Amma tunda ba ta da alaƙa da Zookeeper, ba za ta iya yin hakan ba, kuma a lokacin za ta ƙi karɓar wani ƙarin shigarwar.

saƙonnin acks=duk Ba za a sami sanarwa ba saboda ISR ta fara kunna duk kwafi, kuma saƙonni ba su isa gare su ba. Lokacin da ainihin shugaban yayi ƙoƙarin cire su daga ISR, ba zai iya yin hakan ba kuma zai daina karɓar kowane saƙon kwata-kwata.

Ba da daɗewa ba abokan ciniki suna lura da canjin jagora kuma su fara aika bayanai zuwa sabuwar uwar garken. Da zarar an dawo da hanyar sadarwar, jagoran na asali ya ga cewa ba jagora ba ne kuma ya yanke gunkinsa zuwa ƙimar HW da sabon shugaban ya kasance a lokacin rashin nasarar guje wa bambancin katako. Daga nan za ta fara aika buƙatun buƙatun zuwa ga sabon shugaba. Duk bayanan da aka samu daga shugaban na asali da ba a kwaikwayi sabon shugaba sun ɓace. Wato sakonnin da shugaban na asali bai amince da su ba a cikin wadannan 'yan dakiku lokacin da shugabanni biyu ke aiki za a rasa.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 29. Yanayi 4. Jagora akan dillali 1 ya zama mabiyi bayan an dawo da hanyar sadarwa

Yanayi na 5: Mabiyi ya bambanta da sauran nodes na Kafka da Zookeeper

Mai bi ya keɓe gabaɗaya daga sauran nodes na Kafka da Zookeeper. Kawai ya cire kansa daga ISR har sai an dawo da hanyar sadarwar, sannan ya kama sauran.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 30. Yanayi na 5: An cire mabiyi keɓe daga ISR

Yanayi na 6: Jagora ya bambanta da sauran nodes na Kafka da Zookeeper

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 31. Hali 6. Jagora da mabiya biyu

Jagoran ya keɓe gaba ɗaya daga mabiyansa, mai kula da gidan Zoo. Na ɗan gajeren lokaci zai ci gaba da karɓar shigarwar daga aiki = 1.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 32. Yanayi na 6: Keɓe shugaba daga sauran nodes na Kafka da Zookeeper

Ba a karɓi buƙatun bayan ƙarewa ba replica.lag.time.max.ms, zai yi ƙoƙari ya rage ISR ga kanta, amma ba zai iya yin haka ba saboda babu sadarwa tare da Zookeeper, to, zai daina karɓar rubuce-rubuce.

A halin yanzu, Zookeeper zai yiwa dillalin keɓaɓɓen alama ya mutu kuma mai kula zai zaɓi sabon shugaba.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 33. Labari 6. Shugabanni biyu

Shugaban asali na iya karɓar shigarwar na ɗan daƙiƙa kaɗan, amma sai ya daina karɓar kowane saƙo. Ana sabunta abokan ciniki kowane daƙiƙa 60 tare da sabuwar metadata. Za a sanar da su canjin shugaban kuma za su fara aika bayanai ga sabon shugaban.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 34. Yanayi na 6: Masu masana'anta sun canza zuwa sabon jagora

Duk ingantaccen shigarwar da shugaban na asali ya yi tunda asarar haɗin kai za a rasa. Da zarar an dawo da hanyar sadarwar, ainihin jagorar zai gano ta wurin Zookeeper cewa ba ita ce jagora ba. Sa'an nan kuma za ta yanke log ɗin ta zuwa HW na sabon shugaba a lokacin zaɓe kuma ta fara aika buƙatun a matsayin mabiyi.

RabbitMQ vs Kafka: Haƙurin Laifi da Babban Samuwar
Shinkafa 35. Yanayi na 6: Jagoran asali ya zama mabiyi bayan an dawo da haɗin yanar gizo

A wannan yanayin, rabuwar hankali na iya faruwa na ɗan gajeren lokaci, amma idan kawai aiki = 1 и min.insync.replicas Har ila yau, 1. Rabuwar hankali ta atomatik ta ƙare ko dai bayan an dawo da hanyar sadarwa, lokacin da shugaban farko ya gane cewa ba shi ne jagora ba, ko kuma lokacin da duk abokan ciniki suka gane cewa jagoran ya canza kuma ya fara rubutawa ga sabon shugaba - duk abin da ya fara. A kowane hali, wasu saƙonni za a rasa, amma tare da aiki = 1.

Akwai wani bambance-bambancen wannan yanayin inda, kafin hanyar sadarwar ta rabu, mabiyan sun fadi a baya kuma jagoran ya matsa ISR zuwa kansa kawai. Daga nan sai ya zama saniyar ware saboda asarar haɗin kai. An zaɓi sabon shugaba, amma shugaba na ainihi ya ci gaba da karɓar shigarwar, ko da acks=duk, domin babu wani a cikin ISR sai shi. Waɗannan bayanan za su ɓace da zarar an dawo da hanyar sadarwa. Hanya daya tilo don guje wa wannan zabin ita ce min.insync.replicas = 2.

Yanayi na 7: Node Controller Kafka Ba zai iya ganin Wani Node na Kafka ba

Gabaɗaya, da zarar haɗin haɗin gwiwa tare da kumburin Kafka ya ɓace, mai sarrafawa ba zai iya isar da duk wani shugaban da ya canza bayanai zuwa gare shi ba. A cikin mafi munin yanayi, wannan zai haifar da rabuwa mai ma'ana na ɗan gajeren lokaci, kamar yadda yake a cikin labari na 6. Mafi sau da yawa fiye da haka, dillali ba zai zama ɗan takara don jagoranci ba idan na karshen ya kasa.

Yanayi na 8: Mai kula da Kafka baya ganin Zookeeper

Zookeeper ba zai karɓi ping daga faɗuwar mai sarrafa ba kuma zai zaɓi sabon kumburin Kafka a matsayin mai sarrafawa. Mai sarrafawa na asali na iya ci gaba da gabatar da kansa a matsayin haka, amma baya karɓar sanarwa daga Zookeeper, don haka ba zai sami wasu ayyuka da zai yi ba. Da zarar an dawo da hanyar sadarwa, zai gane cewa shi ba mai sarrafawa ba ne, amma ya zama kullun Kafka na yau da kullum.

Ƙarshe daga al'amuran

Mun ga cewa asarar haɗin haɗin mai bin baya haifar da asarar saƙo, amma kawai yana rage raguwa na ɗan lokaci har sai an dawo da hanyar sadarwa. Wannan, ba shakka, na iya haifar da asarar bayanai idan ɗaya ko fiye da nodes sun ɓace.

Idan jagora ya rabu da Zookeeper saboda asarar haɗin kai, wannan zai iya haifar da asarar saƙonni daga aiki = 1. Rashin sadarwa tare da Zookeeper yana haifar da taƙaitaccen rarrabuwa tsakanin shugabannin biyu. Ana magance wannan matsalar ta hanyar siga acks=duk.

Alamar min.insync.replicas cikin kwafi biyu ko fiye yana ba da ƙarin tabbaci cewa irin waɗannan yanayin gajeriyar yanayi ba za su haifar da asarar saƙonnin kamar yadda yake a cikin Scenario 6 ba.

Takaitaccen Saƙonnin Batattu

Bari mu lissafa duk hanyoyin da zaku iya rasa bayanai a cikin Kafka:

  • Duk wani gazawar jagora idan an tabbatar da saƙonni ta amfani da su aiki = 1
  • Duk wani ƙazantaccen canji na jagoranci, wato, zuwa mabiyi a wajen ISR, har ma da acks=duk
  • Keɓe shugaba daga Zookeeper idan an tabbatar da yin amfani da saƙonni aiki = 1
  • Cikakken keɓewa na jagoran wanda ya riga ya rushe ƙungiyar ISR zuwa kansa. Duk saƙonnin za a ɓace, ko da acks=duk. Wannan gaskiya ne kawai idan min.insync.replicas=1.
  • Kasala lokaci guda na duk nodes bangare. Saboda ana yarda da saƙonni daga ƙwaƙwalwar ajiya, wasu ƙila har yanzu ba a rubuta su zuwa faifai ba. Bayan sake kunna sabar, wasu saƙonni na iya ɓacewa.

Za a iya kauce wa mizanin shugabanci mara tsarki ta hanyar hana su ko tabbatar da aƙalla sauyi biyu. Tsarin da ya fi dacewa shine haɗuwa acks=duk и min.insync.replicas fiye 1.

Kwatancen kai tsaye na amincin RabbitMQ da Kafka

Don tabbatar da aminci da babban samuwa, duka dandamali suna aiwatar da tsarin kwafi na farko da na biyu. Koyaya, RabbitMQ yana da diddigin Achilles. Lokacin sake haɗawa bayan gazawar, nodes suna zubar da bayanan su kuma ana toshe aiki tare. Wannan nau'in whammy biyu yana kira a cikin tambaya game da tsawon lokacin manyan layuka a cikin RabbitMQ. Dole ne ku karɓi ko dai rage yawan sakewa ko kuma tsawon lokacin tarewa. Rage raguwa yana ƙara haɗarin babban asarar bayanai. Amma idan layukan sun kasance ƙanana, to saboda sake sakewa, za a iya magance gajerun lokutan rashin samuwa (waɗanda kaɗan) ta amfani da ƙoƙarin haɗin gwiwa akai-akai.

Kafka ba shi da wannan matsalar. Yana watsar da bayanai kawai daga inda ake samun rarrabuwar kawuna tsakanin shugaba da mai bi. An adana duk bayanan da aka raba. Bugu da kari, kwafi baya toshe tsarin. Jagora ya ci gaba da karɓar mukamai yayin da sabon mabiyin ya kama, don haka ga masu sadaukarwa, shiga ko sake haɗawa da tari ya zama ƙaramin aiki. Tabbas, har yanzu akwai batutuwa irin su bandwidth na cibiyar sadarwa yayin maimaitawa. Idan kun ƙara mabiya da yawa a lokaci guda, kuna iya fuskantar iyakacin bandwidth.

RabbitMQ ya fi Kafka amintacce lokacin da yawancin sabobin a cikin tari suka gaza a lokaci guda. Kamar yadda muka fada a baya, RabbitMQ yana aika da tabbaci ga mawallafin ne kawai bayan an rubuta saƙon zuwa faifai ta master da duk madubi. Amma wannan yana ƙara ƙarin latency don dalilai guda biyu:

  • fsync kowane miliyon ɗari kaɗan
  • Ana iya lura da gazawar madubi ne kawai bayan rayuwar fakitin da ke bincika kasancewar kowane kumburi (kas ɗin net) ya ƙare. Idan madubi ya ragu ko ya faɗi, wannan yana ƙara jinkiri.

Fare na Kafka shine idan an adana saƙo a cikin kuɗaɗe da yawa, zai iya amincewa da saƙonni da zarar sun shiga ƙwaƙwalwar ajiya. Saboda wannan, akwai haɗarin rasa saƙonnin kowane nau'i (ko da acks=duk, min.insync.replicas=2) idan aka samu gazawar lokaci guda.

Gabaɗaya, Kafka yana nuna mafi kyawun aikin software kuma an tsara shi daga ƙasa har zuwa gungu. Ana iya ƙara yawan mabiya zuwa 11 idan ya cancanta don amintacce. Matsakaicin maimaitawa 5 da mafi ƙarancin adadin kwafi a aiki tare min.insync.replicas=3 zai sa asara sako wani lamari ne da ba kasafai ba. Idan kayan aikin ku na iya tallafawa wannan rabon maimaitawa da matakin sakewa, to zaku iya zaɓar wannan zaɓi.

Tarin RabbitMQ yana da kyau ga ƙananan layukan layi. Amma ko da ƙananan layukan na iya girma da sauri idan akwai cunkoson ababen hawa. Da zarar layukan sun yi girma, za ku yi zaɓe masu tsauri tsakanin samuwa da dogaro. Tarin RabbitMQ ya fi dacewa da yanayin da ba na yau da kullun ba inda fa'idodin sassaucin RabbitMQ ya fi kowane rashin lahani na tarinsa.

Magani ɗaya ga raunin RabbitMQ ga manyan layukan shine raba su cikin ƙananan layukan da yawa. Idan ba kwa buƙatar cikakken tsari na duka jerin gwano, amma kawai saƙonnin da suka dace (misali, saƙonni daga takamaiman abokin ciniki), ko kuma ba ku yin odar komai kwata-kwata, to wannan zaɓin abin karɓa ne: duba aikina. Mai daidaitawa don raba jerin gwano (aikin yana kan matakin farko).

A ƙarshe, kar a manta game da adadin kwari a cikin tsarin tari da maimaitawa na duka RabbitMQ da Kafka. A tsawon lokaci, tsarin ya zama mafi girma da kwanciyar hankali, amma babu wani sako da zai kasance 100% lafiya daga asara! Bugu da ƙari, manyan hatsarori suna faruwa a cibiyoyin bayanai!

Idan na rasa wani abu, na yi kuskure, ko kun ƙi yarda da kowane batu, jin daɗin rubuta sharhi ko tuntube ni.

Ana yawan tambayata: "Me za a zaɓa, Kafka ko RabbitMQ?", "Wane dandamali ya fi kyau?". Gaskiyar ita ce da gaske ya dogara da halin da ake ciki, ƙwarewar halin yanzu, da dai sauransu. Ina jinkirin ba da ra'ayi na saboda zai zama da yawa na oversimplification don ba da shawarar dandamali ɗaya don duk lokuta masu amfani da iyakoki. Na rubuta wannan jerin kasidu ne domin ku samar da ra'ayin ku.

Ina so in ce duka tsarin su ne shugabanni a wannan yanki. Zan iya zama ɗan son zuciya saboda daga gwaninta tare da ayyuka na kan daraja abubuwa kamar garantin odar saƙo da aminci.

Ina ganin wasu fasahohin da ba su da wannan abin dogaro da garantin oda, sannan na kalli RabbitMQ da Kafka kuma na fahimci ƙimar ban mamaki na duka waɗannan tsarin.

source: www.habr.com

Add a comment