RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite

В dènye atik nou te gade gwoupman RabbitMQ pou tolerans fay ak disponiblite segondè. Koulye a, ann fouye byen fon nan Apache Kafka.

Isit la inite replikasyon an se patisyon an. Chak sijè gen youn oswa plis seksyon. Chak seksyon gen yon lidè avèk oswa san patizan. Lè w ap kreye yon sijè, ou presize kantite patisyon ak koyefisyan replikasyon an. Valè abityèl la se 3, ki vle di twa kopi: yon sèl lidè ak de disip.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 1. Kat seksyon yo distribye nan mitan twa koutye

Tout demann li ak ekri ale nan lidè a. Patizan detanzantan voye demann bay lidè a pou resevwa dènye mesaj yo. Konsomatè yo pa janm tounen vin jwenn disip yo;

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite

Echèk patisyon

Lè yon koutye echwe, lidè yo nan plizyè seksyon souvan echwe. Nan chak nan yo, yon disip ki soti nan yon lòt ne vin lidè a. An reyalite, sa a se pa toujou ka a, depi faktè nan senkronizasyon tou enfliyanse: si gen senkronize disip, epi si se pa, Lè sa a, si wi ou non chanje nan yon replik unsynchronized pèmèt. Men, annou pa konplike bagay yo pou kounye a.

Koutye 3 kite rezo a, epi yo eli yon nouvo lidè pou seksyon 2 nan koutye 2.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 2. Koutye 3 mouri epi disip li sou koutye 2 eli kòm nouvo lidè patisyon 2 a.

Lè sa a, koutye 1 kite ak seksyon 1 tou pèdi lidè li, ki gen wòl pase nan koutye 2.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 3. Gen yon sèl koutye ki rete. Tout lidè yo sou yon sèl koutye ak zewo èkse

Lè koutye 1 tounen sou entènèt, li ajoute kat disip, bay kèk redondance nan chak patisyon. Men, tout lidè yo toujou rete sou koutye 2.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 4. Lidè yo rete sou koutye 2

Lè koutye 3 vini, nou tounen nan twa kopi pou chak patisyon. Men, tout lidè yo toujou sou koutye 2.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 5. Plasman dezekilib nan lidè apre restorasyon nan koutye 1 ak 3

Kafka gen yon zouti pou pi bon re-balanse lidè pase RabbitMQ. La, ou te oblije sèvi ak yon Plugin twazyèm-pati oswa script ki chanje règleman yo pou imigre ne mèt la pa diminye èkse pandan migrasyon. Anplis de sa, pou gwo ke nou te oblije aksepte indisponibilite pandan senkronizasyon.

Kafka gen konsèp nan "replik pi pito" pou wòl lidè. Lè patisyon sijè yo kreye, Kafka eseye distribye lidè yo respire atravè nœuds epi make premye lidè sa yo kòm pi pito. Apre yon tan, akòz rdemare sèvè, echèk, ak pann koneksyon, lidè yo ka fini sou lòt nœuds, tankou nan ka ekstrèm ki dekri pi wo a.

Pou repare sa a, Kafka ofri de opsyon:

  • Opsyon auto.leader.rebalance.enable=vre pèmèt ne kontwolè a otomatikman reassigner lidè yo tounen nan kopi pi pito epi kidonk retabli distribisyon inifòm.
  • Administratè a ka kouri script la kafka-preferred-replica-election.sh pou chanjman manyèl.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 6. Replik apre re-balanse

Sa a se te yon vèsyon senplifye nan echèk la, men reyalite a se pi konplèks, byenke pa gen anyen ki twò konplike isit la. Li tout vini desann nan kopi senkronize (In-Sync Replicas, ISR).

Replik senkronize (ISR)

Yon ISR se yon seri kopi yon patisyon ki konsidere kòm "senkronize" (an-sync). Gen yon lidè, men ka pa gen patizan. Yon disip konsidere kòm senkronize si li te fè kopi egzak tout mesaj lidè a anvan entèval la ekspire replica.lag.time.max.ms.

Yo retire yon disip nan seri ISR ​​si li:

  • pa t 'fè yon demann yo chwazi pou entèval la replica.lag.time.max.ms (prespoze mouri)
  • pa t 'jere mete ajou pandan entèval la replica.lag.time.max.ms (konsidere ralanti)

Patizan yo fè demann echantiyon nan entèval la replica.fetch.wait.max.ms, ki par défaut pou 500ms.

Pou eksplike klèman objektif ISR, nou bezwen gade konfimasyon pwodiktè a ak kèk senaryo echèk. Pwodiktè yo ka chwazi lè koutye a voye konfimasyon:

  • acks=0, konfimasyon pa voye
  • acks=1, yo voye konfimasyon apre lidè a te ekri yon mesaj nan jounal lokal li a
  • acks=tout, yo voye konfimasyon apre tout kopi nan ISR yo te ekri mesaj la nan mòso lokal yo

Nan tèminoloji Kafka, si ISR ​​te sove yon mesaj, li se "komèt". Acks=all se opsyon ki pi an sekirite, men tou ajoute plis reta. Ann gade de egzanp echèk ak fason diferan opsyon 'acks' yo kominike avèk konsèp ISR la.

Acks=1 ak ISR

Nan egzanp sa a, nou pral wè ke si lidè a pa tann pou chak mesaj soti nan tout disip yo dwe sove, Lè sa a, pèt done se posib si lidè a echwe. Navigasyon nan yon disip ki pa senkronize ka aktive oswa enfim pa mete unclean.leader.election.enable.

Nan egzanp sa a, manifakti a gen valè acks=1. Seksyon an distribye nan tout twa koutye yo. Koutye 3 se dèyè, li senkronize ak lidè a uit segonn de sa e kounye a se 7456 mesaj dèyè. Koutye 1 te sèlman yon segonn dèyè. Pwodiktè nou an voye yon mesaj epi byen vit resevwa yon ack tounen, san yo pa anlè patizan ralanti oswa mouri ke lidè a pa ap tann.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 7. ISR ak twa kopi

Koutye 2 echwe epi pwodiktè a resevwa yon erè koneksyon. Apre lidèchip pase bay koutye 1, nou pèdi 123 mesaj. Disip la sou koutye 1 te fè pati ISR ​​a, men li pa te konplètman senkronize ak lidè a lè li te tonbe.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 8. Mesaj yo pèdi lè li aksidan

Nan konfigirasyon bootstrap.servers Manifakti a gen plizyè koutye ki nan lis epi li ka mande yon lòt koutye ki se lidè nan nouvo seksyon. Lè sa a, li etabli yon koneksyon ak koutye 1 epi li kontinye voye mesaj.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 9. Voye mesaj rekòmanse apre yon ti repo

Koutye 3 se menm pi lwen dèyè. Li fè demann chache men li pa ka senkronize. Sa a ka akòz koneksyon rezo ralanti ant koutye, pwoblèm depo, elatriye Li se retire nan ISR la. Koulye a, ISR a konsiste de yon sèl kopi - lidè a! Manifakti a kontinye voye mesaj epi resevwa konfimasyon.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 10. Patisipan sou koutye 3 yo retire nan ISR la

Koutye 1 desann epi wòl lidèchip la ale nan koutye 3 ak pèt 15286 mesaj! Manifakti a resevwa yon mesaj erè koneksyon. Tranzisyon an nan yon lidè deyò nan ISR la te posib sèlman akòz anviwònman an unclean.leader.election.enable=vre. Si li enstale nan fo, Lè sa a, tranzisyon an pa ta rive epi tout demann li ak ekri yo ta rejte. Nan ka sa a, nou tann pou koutye 1 retounen ak done entak li nan kopi a, ki pral ankò pran sou lidèchip.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 11. Koutye 1 tonbe. Si gen yon echèk, yon gwo kantite mesaj yo pèdi

Pwodiktè a etabli yon koneksyon ak dènye koutye a epi li wè ke li se kounye a lidè nan seksyon an. Li kòmanse voye mesaj bay koutye 3.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 12. Apre yon ti repo, mesaj yo voye ankò nan seksyon 0

Nou te wè ke, apa de entèripsyon kout pou etabli nouvo koneksyon ak rechèch pou yon nouvo lidè, manifakti a te toujou ap voye mesaj. Konfigirasyon sa a asire disponiblite nan depans lan nan konsistans (sekirite done). Kafka te pèdi plizyè milye mesaj men li te kontinye aksepte nouvo ekriti yo.

Acks=tout ak ISR

Ann repete senaryo sa a ankò, men avèk acks=tout. Koutye 3 gen yon latansi mwayèn nan kat segonn. Manifakti a voye yon mesaj ak acks=tout, epi kounye a pa resevwa yon repons rapid. Lidè a ap tann mesaj la sove pa tout kopi nan ISR la.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 13. ISR ak twa kopi. Youn se ralanti, sa ki lakòz reta anrejistreman

Apre kat segonn reta adisyonèl, koutye 2 voye yon ack. Tout kopi yo kounye a konplètman mete ajou.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 14. Tout kopi sove mesaj epi voye ack

Koutye 3 kounye a tonbe pi lwen dèyè epi yo retire li nan ISR la. Latansi siyifikativman redwi paske pa gen okenn kopi dousman ki rete nan ISR la. Koutye 2 kounye a ap tann sèlman pou koutye 1, epi li gen yon dekalaj mwayèn nan 500 ms.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 15. Yo retire kopi nan koutye 3 nan ISR la

Lè sa a, koutye 2 tonbe ak lidèchip pase nan koutye 1 san yo pa pèdi mesaj.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 16. Koutye 2 tonbe

Manifakti a jwenn yon nouvo lidè epi li kòmanse voye mesaj ba li. Latansi a pi lwen redwi paske ISR kounye a konsiste de yon sèl kopi! Se poutèt sa opsyon an acks=tout pa ajoute redondance.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 17. Replica sou koutye 1 pran devan san pèdi mesaj

Lè sa a, koutye 1 aksidan ak plon an ale nan koutye 3 ak yon pèt nan 14238 mesaj!

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 18. Koutye 1 mouri ak tranzisyon lidèchip ak anviwònman sal lakòz anpil pèt done

Nou pa t 'kapab enstale opsyon an unclean.leader.election.enable nan sans vrè. Pa default li egal fo. Anviwònman acks=tout с unclean.leader.election.enable=vre bay aksè ak kèk sekirite done te ajoute. Men, jan ou ka wè, nou ka toujou pèdi mesaj.

Men, e si nou vle ogmante sekirite done? Ou ka mete unclean.leader.election.enable = fo, men sa a pa pral nesesèman pwoteje nou kont pèt done. Si lidè a tonbe difisil epi li pran done yo ak li, Lè sa a, mesaj yo toujou pèdi, plis disponiblite pèdi jiskaske administratè a retabli sitiyasyon an.

Li se pi bon asire ke tout mesaj yo redondants, epi otreman jete anrejistreman an. Lè sa a, omwen nan pwen de vi koutye a, pèt done se sèlman posib nan evènman an nan de oswa plis echèk similtane.

Acks=tout, min.insync.replicas ak ISR

Avèk konfigirasyon sijè min.insync.replicas Nou ap ogmante nivo sekirite done yo. Ann ale nan dènye pati senaryo anvan an ankò, men fwa sa a ak min.insync.replicas=2.

Se konsa, koutye 2 gen yon lidè kopi ak disip la sou koutye 3 yo retire nan ISR la.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 19. ISR soti nan de kopi

Koutye 2 tonbe epi lidèchip pase bay koutye 1 san pèt mesaj. Men koulye a, ISR a konsiste de yon sèl kopi. Sa a pa satisfè kantite minimòm pou resevwa dosye, ak Se poutèt sa koutye a reponn a tantativ la ekri ak yon erè NotEnoughReplicas.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 20. Kantite ISR yo se youn pi ba pase sa ki espesifye nan min.insync.replicas

Konfigirasyon sa a sakrifye disponiblite pou konsistans. Anvan nou rekonèt yon mesaj, nou asire ke li ekri nan omwen de kopi. Sa a bay manifakti a plis konfyans. Isit la, pèt mesaj se sèlman posib si de kopi echwe ansanm nan yon entèval kout jiskaske mesaj la repwodui nan yon disip adisyonèl, ki se fasil. Men, si w ap super paranoya, ou ka mete faktè replikasyon a 5, ak min.insync.replicas pa 3. Isit la twa koutye dwe tonbe an menm tan an pèdi dosye a! Natirèlman, ou peye pou fyab sa a nan latansi adisyonèl.

Lè aksè nesesè pou sekirite done yo

Kòm nan ka ak RabbitMQ, pafwa aksè nesesè pou sekirite done yo. Men sa ou bezwen reflechi sou:

  • Èske Piblikatè a tou senpleman retounen yon erè epi fè sèvis en oswa itilizatè a eseye ankò pita?
  • Èske piblikatè a ka sove mesaj la lokalman oswa nan yon baz done pou eseye ankò pita?

Si repons lan se non, lè sa a optimize disponiblite amelyore sekirite done yo. Ou pral pèdi mwens done si w chwazi disponiblite olye w pa anrejistre. Kidonk, li tout vini desann nan jwenn yon balans, ak desizyon an depann sou sitiyasyon an espesifik.

Siyifikasyon ISR nan lang Angle

Suite ISR la pèmèt ou chwazi pi bon balans ant sekirite done ak latansi. Pou egzanp, asire disponiblite nan evènman an nan echèk nan majorite nan kopi, minimize enpak la nan kopi mouri oswa ralanti an tèm de latansi.

Nou chwazi siyifikasyon an tèt nou replica.lag.time.max.ms selon bezwen ou yo. Esansyèlman, paramèt sa a vle di konbyen reta nou vle aksepte lè acks=tout. Valè default la se dis segonn. Si sa a twò lontan pou ou, ou ka diminye li. Lè sa a, frekans nan chanjman nan ISR la ap ogmante, depi disip yo pral retire epi ajoute pi souvan.

RabbitMQ se tou senpleman yon seri miwa ki bezwen repwodui. Miwa ralanti entwodui latansi adisyonèl, ak miwa ki mouri yo ka tann jiskaske pake ki tcheke disponiblite chak ne (tik nèt) pou reponn. ISR se yon fason enteresan pou evite pwoblèm latansi sa yo. Men, nou riske pèdi èkse depi ISR ​​a ka sèlman retresi lidè a. Pou evite risk sa a, sèvi ak anviwònman an min.insync.replicas.

Garanti koneksyon kliyan

Nan anviwònman yo bootstrap.servers pwodiktè ak konsomatè ka presize plizyè koutye pou konekte kliyan yo. Lide a se ke lè yon ne desann, gen plizyè rezèv ki rete ak ki kliyan an ka louvri yon koneksyon. Sa yo se pa nesesèman lidè seksyon yo, men tou senpleman yon tranplen pou premye loading. Kliyan an ka mande yo ki ne hôtes lidè patisyon li/ekri.

Nan RabbitMQ, kliyan yo ka konekte nan nenpòt ne, ak routage entèn voye demann lan kote li bezwen ale. Sa vle di ke ou ka enstale yon balans chaj devan RabbitMQ. Kafka mande pou kliyan yo konekte nan ne ki gen tout pouvwa a lidè patisyon ki koresponn lan. Nan yon sitiyasyon konsa, ou pa ka enstale yon balans chaj. Lis bootstrap.servers Li enpòtan pou kliyan yo ka jwenn aksè epi jwenn nœuds kòrèk yo apre yon echèk.

Kafka konsansis Achitekti

Jiska kounye a, nou pa te konsidere ki jan gwoup la aprann sou sezon otòn nan koutye a ak ki jan yon nouvo lidè yo eli. Pou konprann ki jan Kafka travay ak patisyon rezo a, ou bezwen premye konprann achitekti konsansis la.

Chak gwoup Kafka deplwaye ansanm ak yon gwoup Zookeeper, ki se yon sèvis konsansis distribiye ki pèmèt sistèm nan rive nan yon konsansis sou kèk eta bay, priyorite konsistans sou disponiblite. Konsantman yon majorite nan nœuds Zookeeper yo oblije apwouve operasyon lekti ak ekri.

Zookeeper estoke eta gwoup la:

  • Lis sijè, seksyon, konfigirasyon, kopi aktyèl lidè, kopi pi pito.
  • Manm gwoup yo. Chak koutye ping gwoup Zookeeper la. Si li pa resevwa yon ping nan yon peryòd tan espesifye, Lè sa a, Zookeeper anrejistre koutye a kòm pa disponib.
  • Chwazi nœuds prensipal ak rezèv pou kontwolè a.

Nœud kontwolè a se youn nan koutye Kafka ki responsab pou eli lidè kopi yo. Zookeeper voye notifikasyon bay kontwolè a sou manm gwoup la ak chanjman sijè, epi kontwolè a dwe aji sou chanjman sa yo.

Pou egzanp, ann pran yon nouvo sijè ki gen dis patisyon ak yon faktè replikasyon nan 3. Kontwolè a dwe eli yon lidè pou chak patisyon, ap eseye distribye lidè yo nan mitan koutye yo.

Pou chak kontwolè seksyon:

  • mete ajou enfòmasyon nan Zookeeper sou ISR ak lidè;
  • Voye yon LeaderAndISRCommand bay chak koutye ki gen tout pouvwa a yon kopi patisyon sa a, enfòme koutye yo sou ISR la ak lidè a.

Lè yon koutye ki gen yon lidè tonbe, Zookeeper voye yon notifikasyon bay kontwolè a, epi li chwazi yon nouvo lidè. Ankò, kontwolè a premye mete ajou Zookeeper epi answit voye yon kòmand bay chak koutye avèti yo sou chanjman nan lidèchip.

Chak lidè responsab pou rekrite ISR yo. Anviwònman replica.lag.time.max.ms detèmine ki moun ki pral antre la. Lè ISR a chanje, lidè a transmèt nouvo enfòmasyon bay Zookeeper.

Zookeeper toujou enfòme sou nenpòt ki chanjman pou ke nan ka yon echèk, jesyon tranzisyon san pwoblèm nan yon nouvo lidè.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 21. Kafka konsansis

Pwotokòl replikasyon

Konprann detay yo nan replikasyon ede ou pi byen konprann senaryo potansyèl pèt done.

Rekèt echantiyonaj, Log End Offset (LEO) ak Highwater Mark (HW)

Nou konsidere ke patizan yo detanzantan voye demann chache bay lidè a. Entèval default la se 500ms. Sa a diferan de RabbitMQ nan ke nan RabbitMQ replikasyon pa inisye pa glas la keu men pa mèt la. Mèt la pouse chanjman nan miwa yo.

Lidè a ak tout patizan yo sove Log End Offset (LEO) ak etikèt Highwater (HW). Mak LEO a estoke konpanse dènye mesaj la nan kopi lokal la, epi HW kenbe konpanse dènye komite a. Sonje ke pou estati komite, mesaj la dwe pèsiste atravè tout kopi ISR. Sa vle di ke LEO anjeneral yon ti kras devan HW.

Lè lidè a resevwa yon mesaj, li estoke li lokalman. Disip la fè yon demann chache lè li transmèt LEO li. Lè sa a, lidè a voye yon pakèt mesaj ki kòmanse nan LEO sa a epi tou li transmèt HW aktyèl la. Lè lidè a resevwa enfòmasyon ke tout kopi yo te estoke mesaj la nan konpanse yo bay la, li deplase mak HW la. Se sèlman lidè a ki ka deplase HW a, epi konsa tout disip yo pral konnen valè aktyèl la nan repons yo nan demann yo. Sa vle di ke disip yo ka retade dèyè lidè nan tou de mesaj ak konesans HW. Konsomatè yo resevwa mesaj sèlman jiska HW aktyèl la.

Remake byen ke "pèsiste" vle di ekri nan memwa, pa nan disk. Pou pèfòmans, Kafka senkronize sou disk nan yon entèval espesifik. RabbitMQ tou gen yon entèval konsa, men li pral voye yon rekonesans bay Piblikatè a sèlman apre mèt la ak tout miwa yo te ekri mesaj la sou disk. Devlopè Kafka yo, pou rezon pèfòmans, deside voye yon ack le pli vit ke mesaj la ekri nan memwa. Kafka parye ke redondans konpanse risk pou yo estoke yon ti tan mesaj rekonèt nan memwa sèlman.

Lidè echèk

Lè yon lidè tonbe, Zookeeper notifye kontwolè a, epi li chwazi yon nouvo kopi lidè. Nouvo lidè a mete yon nouvo mak HW dapre LEO li. Lè sa a, disip yo resevwa enfòmasyon sou nouvo lidè a. Tou depan de vèsyon an nan Kafka, disip la pral chwazi youn nan de senaryo:

  1. Li pral tronpe jounal lokal la nan yon HW li te ye epi voye yon demann bay nouvo lidè a pou mesaj apre mak sa a.
  2. Ap voye yon demann bay lidè a pou chèche konnen HW a nan moman li te eli lidè, ak Lè sa a, tronpe boutèy la nan konpanse sa a. Lè sa a, li pral kòmanse fè demann chache peryodik kòmanse nan konpanse sa a.

Yon disip ka bezwen tronpe boutèy demi lit la pou rezon sa yo:

  • Lè yon lidè echwe, premye patizan nan seri ISR ​​ki anrejistre ak Zookeeper genyen eleksyon an epi li vin lidè. Tout disip sou ISR, byenke yo konsidere kòm "nan senkronizasyon," ka pa te resevwa kopi tout mesaj nan men ansyen lidè a. Li antyèman posib ke disip ki prezante a pa gen kopi ki pi ajou. Kafka asire ke pa gen okenn divergence ant kopi. Kidonk, pou evite dezakò, chak patizan dwe tronpe jounal li a valè HW nouvo lidè a nan moman eleksyon l 'yo. Sa a se yon lòt rezon ki fè anviwònman acks=tout tèlman enpòtan pou konsistans.
  • Mesaj yo ekri detanzantan sou disk. Si tout nœuds gwoup echwe an menm tan, Lè sa a, kopi ak konpanse diferan yo pral estoke sou disk yo. Li posib ke lè koutye yo tounen sou entènèt, nouvo lidè ki eli a pral dèyè disip li yo paske li te sove sou disk anvan lòt yo.

Reyinyon ak gwoup la

Lè yo rejwenn gwoup la, kopi yo fè menm jan ak lè yon lidè echwe: yo tcheke kopi lidè a epi yo tronpe log yo nan HW li (nan moman eleksyon an). An konparezon, RabbitMQ egalman trete nœuds reyini kòm konplètman nouvo. Nan de ka, koutye a jete nenpòt eta ki egziste deja. Si yo itilize senkronizasyon otomatik, Lè sa a, mèt la dwe repwodui absoliman tout kontni aktyèl la nan nouvo glas la nan yon metòd "kite lemonn antye tann". Mèt la pa aksepte okenn operasyon lekti oswa ekri pandan operasyon sa a. Apwòch sa a kreye pwoblèm nan gwo ke moun kap kriye.

Kafka se yon boutèy demi lit distribiye, epi an jeneral li estoke plis mesaj pase yon keu RabbitMQ, kote done yo retire nan keu la apre li fin li. File aktif yo ta dwe rete relativman piti. Men, Kafka se yon boutèy demi lit ak pwòp politik retansyon li yo, ki ka mete yon peryòd de jou oswa semèn. Bloke keu la ak apwòch senkronizasyon konplè se absoliman akseptab pou yon boutèy demi lit distribiye. Olye de sa, patizan Kafka yo tou senpleman tronpe boutèy demi lit yo nan HW lidè a (nan moman eleksyon an) si kopi yo devan lidè a. Nan ka ki gen plis chans, lè disip la dèyè, li tou senpleman kòmanse fè demann chache kòmanse ak LEO aktyèl li yo.

Nouvo disip oswa patisipan ki rejwenn yo kòmanse andeyò ISR epi yo pa patisipe nan komèt. Yo tou senpleman travay ansanm ak gwoup la, resevwa mesaj osi vit ke yo kapab jiskaske yo kenbe ak lidè a epi antre nan ISR la. Pa gen okenn fèmen-nan epi pa gen okenn bezwen jete tout done ou yo.

Pèt koneksyon

Kafka gen plis eleman pase RabbitMQ, kidonk li gen yon seri konpòtman ki pi konplèks lè gwoup la vin dekonekte. Men, Kafka te okòmansman fèt pou grap, kidonk solisyon yo trè byen panse.

Anba a gen plizyè senaryo echèk koneksyon:

  • Senaryo 1: disip la pa wè lidè a, men li toujou wè Zookeeper la.
  • Senaryo 2: Lidè a pa wè okenn disip, men li toujou wè Zookeeper.
  • Senaryo 3: disip la wè lidè a, men li pa wè Zookeeper la.
  • Senaryo 4: Lidè a wè patizan yo, men li pa wè Zookeeper la.
  • Senaryo 5: disip la konplètman separe de lòt nœuds Kafka ak Zookeeper.
  • Senaryo 6: Lidè a konplètman separe de lòt nœuds Kafka ak Zookeeper.
  • Senaryo 7: Ne kontwolè Kafka pa ka wè yon lòt ne Kafka.
  • Senaryo 8: Kontwolè Kafka pa wè Zookeeper.

Chak senaryo gen konpòtman pwòp li yo.

Senaryo 1: Patizan pa wè lidè a, men li toujou wè Zookeeper

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 22. Senaryo 1: ISR nan twa kopi

Echèk koneksyon an separe koutye 3 ak koutye 1 ak 2, men se pa ak Zookeeper. Koutye 3 pa ka voye demann chache ankò. Apre tan fin pase replica.lag.time.max.ms li retire nan ISR la epi li pa patisipe nan komite mesaj. Yon fwa koneksyon yo retabli, li pral rekòmanse chache demann epi rantre nan ISR a lè li kenbe ak lidè a. Zookeeper ap kontinye resevwa ping ak asime ke koutye a vivan e byen.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 23. Senaryo 1: Yo retire koutye a nan ISR la si yo pa resevwa okenn demann chache nan men li nan entèval replica.lag.time.max.ms.

Pa gen okenn sispansyon fann-sèvo oswa ne tankou nan RabbitMQ. Olye de sa, èkse redwi.

Senaryo 2: Lidè pa wè okenn disip, men li toujou wè Zookeeper

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 24. Senaryo 2. Lidè ak de patizan

Yon pann nan koneksyon rezo separe lidè a ak disip yo, men koutye a ka toujou wè Zookeeper. Kòm nan premye senaryo a, ISR a retresi, men fwa sa a sèlman nan lidè a kòm tout disip sispann voye demann chache. Ankò, pa gen okenn divizyon lojik. Olye de sa, gen yon pèt redondance pou nouvo mesaj jiskaske koneksyon retabli. Zookeeper kontinye resevwa ping epi li kwè ke koutye a vivan e byen.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 25. Senaryo 2. ISR te retresi sèlman nan lidè a

Senaryo 3. Patizan wè lidè a, men li pa wè Zookeeper la

Se disip la separe de Zookeeper, men se pa ak koutye a ak lidè a. Kòm yon rezilta, disip la kontinye fè demann chache epi vin yon manm nan ISR la. Zookeeper pa resevwa ping ankò epi anrejistre yon aksidan koutye, men kòm li se sèlman yon disip, pa gen okenn konsekans apre rekiperasyon an.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 26. Senaryo 3: disip la kontinye voye demann chache bay lidè a

Senaryo 4. Lidè wè patizan, men li pa wè Zookeeper

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 27. Senaryo 4. Lidè ak de patizan

Lidè a separe de Zookeeper, men se pa koutye ki gen disip yo.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 28. Senaryo 4: Lidè izole nan Zookeeper

Apre kèk tan, Zookeeper pral anrejistre yon echèk koutye epi avize kontwolè a sou li. Li pral chwazi yon nouvo lidè pami disip li yo. Sepandan, lidè orijinal la ap kontinye panse ke li se lidè a epi yo pral kontinye aksepte antre nan ack=1. Patizan yo pa voye l 'al chache demann ankò, kidonk li pral konsidere yo mouri epi eseye retresi ISR ​​nan tèt li. Men, kòm li pa gen yon koneksyon ak Zookeeper, li pa pral kapab fè sa, epi nan pwen sa a pral refize aksepte nenpòt lòt antre.

Mesaj acks=tout p ap resevwa yon rekonesans paske ISR a premye limen tout kopi, epi mesaj pa rive jwenn yo. Lè lidè orijinal la ap eseye retire yo nan ISR la, li p ap kapab fè sa epi li pral sispann aksepte nenpòt mesaj ditou.

Kliyan byento remake chanjman nan lidè epi yo kòmanse voye dosye nan nouvo sèvè a. Yon fwa ke rezo a retabli, lidè orijinal la wè ke li pa yon lidè ankò epi li tronke boutèy demi lit li a valè HW ke nouvo lidè a te genyen nan moman echèk pou evite divergence log. Lè sa a, li pral kòmanse voye demann chache bay nouvo lidè a. Tout dosye lidè orijinal la ki pa repwodui nouvo lidè a pèdi. Sa vle di, mesaj lidè orijinal la pat rekonèt nan kèk segonn lè de lidè t ap travay pral pèdi.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 29. Senaryo 4. Lidè nan koutye 1 vin tounen yon disip apre rezo a retabli

Senaryo 5: disip la konplètman separe de lòt nœuds Kafka ak Zookeeper

Se disip la konplètman izole nan tou de lòt nœuds Kafka ak Zookeeper. Li tou senpleman retire tèt li nan ISR a jiskaske rezo a retabli, ak Lè sa a, kenbe ak lòt moun yo.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 30. Senaryo 5: Yo retire disip izole nan ISR

Senaryo 6: Lidè a konplètman separe de lòt nœuds Kafka ak Zookeeper

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 31. Senaryo 6. Lidè ak de patizan

Lidè a konplètman izole ak disip li yo, kontwolè a ak Zookeeper. Pou yon kout peryòd li pral kontinye aksepte antre nan ack=1.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 32. Senaryo 6: Izolasyon lidè nan lòt Kafka ak Zookeeper nœuds

Pa te resevwa demann apre ekspirasyon replica.lag.time.max.ms, li pral eseye retresi ISR ​​nan tèt li, men li pa pral kapab fè sa paske pa gen okenn kominikasyon ak Zookeeper, Lè sa a, li pral sispann aksepte ekri.

Pandan se tan, Zookeeper pral make koutye izole a kòm mouri epi kontwolè a pral eli yon nouvo lidè.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 33. Senaryo 6. De lidè

Lidè orijinal la ka aksepte antre pou kèk segond, men answit sispann aksepte nenpòt mesaj. Kliyan yo mete ajou chak 60 segonn ak dènye metadata yo. Yo pral enfòme sou chanjman lidè a epi yo pral kòmanse voye antre bay nouvo lidè a.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 34. Senaryo 6: Manifakti yo chanje nan yon nouvo lidè

Tout antre konfime ke lidè orijinal la te fè depi pèt koneksyon an pral pèdi. Yon fwa rezo a retabli, lidè orijinal la pral dekouvri atravè Zookeeper ke li pa lidè a ankò. Lè sa a, li pral tronpe jounal li a nan HW nouvo lidè a nan moman eleksyon an epi kòmanse voye demann kòm yon disip.

RabbitMQ vs Kafka: tolerans fay ak gwo disponiblite
Diri. 35. Senaryo 6: Lidè orijinal la vin tounen yon disip apre yo fin retabli koneksyon rezo a

Nan sitiyasyon sa a, separasyon lojik ka rive pou yon kout peryòd, men sèlman si ack=1 и min.insync.replicas tou 1. Separasyon lojik otomatikman fini swa apre rezo a retabli, lè lidè orijinal la reyalize ke li pa lidè ankò, oswa lè tout kliyan reyalize ke lidè a te chanje epi yo kòmanse ekri nouvo lidè a - kèlkeswa sa ki rive anvan. Nan nenpòt ka, kèk mesaj yo pral pèdi, men sèlman avèk yo ack=1.

Gen yon lòt varyant nan senaryo sa a kote, jis anvan rezo a divize, disip yo te tonbe dèyè ak lidè a konprese ISR a jis tèt li. Lè sa a, li vin izole akòz pèt koneksyon. Yon nouvo lidè eli, men lidè orijinal la kontinye aksepte antre, menm acks=tout, paske pa gen okenn lòt moun nan ISR eksepte li. Dosye sa yo pral pèdi yon fwa rezo a retabli. Sèl fason pou evite opsyon sa a se min.insync.replicas = 2.

Senaryo 7: Kafka Controller Node pa ka wè yon lòt Kafka Node

An jeneral, yon fwa koneksyon an ak yon ne Kafka pèdi, kontwolè a pa pral kapab transmèt okenn enfòmasyon chanjman lidè nan li. Nan ka ki pi mal la, sa ap mennen nan yon separasyon lojik kout tèm, tankou nan senaryo 6. Pi souvan pase pa, koutye a pral tou senpleman pa vin yon kandida pou lidèchip si lèt la echwe.

Senaryo 8: Kontwolè Kafka pa wè Zookeeper

Zookeeper pa pral resevwa yon ping nan men kontwolè a tonbe epi li pral chwazi yon nouvo ne Kafka kòm kontwolè a. Kontwolè orijinal la ka kontinye prezante tèt li kòm sa, men li pa resevwa notifikasyon nan men Zookeeper, kidonk li pap gen okenn travay pou l fè. Yon fwa rezo a retabli, li pral reyalize ke li pa yon kontwolè ankò, men li te vin tounen yon ne Kafka regilye.

Konklizyon soti nan senaryo yo

Nou wè ke pèt koneksyon disip la pa lakòz pèt mesaj, men tou senpleman diminye èkse tanporèman jiskaske rezo a retabli. Sa a, nan kou, ka mennen nan pèt done si youn oswa plis nœuds yo pèdi.

Si lidè a vin separe ak Zookeeper akòz yon pèt koneksyon, sa ka lakòz mesaj yo te pèdi nan ack=1. Mank kominikasyon ak Zookeeper lakòz yon ti divizyon lojik ak de lidè yo. Pwoblèm sa a rezoud pa paramèt la acks=tout.

Paramèt min.insync.replicas an de oswa plis kopi bay plis asirans ke senaryo kout tèm sa yo pa pral lakòz mesaj pèdi tankou nan Senaryo 6.

Rezime mesaj ki pèdi yo

Ann fè lis tout fason ou ka pèdi done nan Kafka:

  • Nenpòt echèk lidè si mesaj yo te konfime lè l sèvi avèk ack=1
  • Nenpòt tranzisyon sal nan lidèchip, se sa ki, nan yon disip deyò ISR a, menm avèk acks=tout
  • Izole lidè a nan Zookeeper si mesaj yo te konfime lè l sèvi avèk ack=1
  • Izolasyon konplè nan lidè a ki te deja retresi gwoup la ISR desann nan tèt li. Tout mesaj yo pral pèdi, menm acks=tout. Sa a se laverite sèlman si min.insync.replicas=1.
  • Echèk similtane nan tout nœuds patisyon yo. Paske mesaj yo rekonèt nan memwa, kèk ka poko ekri sou disk. Apre rdemare serveurs yo, kèk mesaj ka manke.

Yo ka evite tranzisyon lidèchip ki pa bon, swa lè w entèdi yo oswa si w asire omwen de rdondans. Konfigirasyon ki pi dirab se yon konbinezon acks=tout и min.insync.replicas plis pase 1.

Konparezon dirèk nan fyab nan RabbitMQ ak Kafka

Pou asire fyab ak disponiblite segondè, tou de platfòm aplike yon sistèm replikasyon prensipal ak segondè. Sepandan, RabbitMQ gen yon talon Achilles. Lè rekonekte apre yon echèk, nœuds jete done yo epi senkronizasyon bloke. Doub whammy sa a mete an kesyon lonjevite gwo ke moun kap kriye nan RabbitMQ. Ou pral oblije aksepte swa redwi èkse oswa tan bloke lontan. Diminye redondance ogmante risk pou pèt done masiv. Men, si ke moun kap kriye yo piti, lè sa a pou dedomajman pou la redondance, peryòd kout nan indisponibilite (kèk segonn) ka fè fas ak lè l sèvi avèk tantativ koneksyon repete.

Kafka pa gen pwoblèm sa a. Li jete done sèlman nan pwen divergence ant lidè a ak disip la. Tout done pataje yo sove. Anplis de sa, replikasyon pa bloke sistèm nan. Lidè a ap kontinye aksepte pòs pandan nouvo disip la ratrape, kidonk pou devops, rantre nan oswa rejwenn gwoup la vin tounen yon travay trivial. Natirèlman, toujou gen pwoblèm tankou Pleasant rezo pandan replikasyon. Si ou ajoute plizyè disip an menm tan, ou ka rankontre yon limit Pleasant.

RabbitMQ siperyè Kafka nan fyab lè plizyè sèvè nan yon gwoup echwe an menm tan. Kòm nou te deja di, RabbitMQ voye yon konfimasyon bay piblikatè a sèlman apre yo fin ekri mesaj la sou disk pa mèt la ak tout miwa. Men, sa a ajoute plis latansi pou de rezon:

  • fsync chak kèk santèn milisgond
  • Ka echèk nan glas la sèlman dwe remake apre tout lavi a nan pake yo ki tcheke disponiblite a nan chak ne (tik nèt) te ekspire. Si glas la ralanti oswa tonbe, sa ajoute yon reta.

Parye Kafka a se ke si se yon mesaj ki estoke atravè plizyè nœuds, li ka rekonèt mesaj le pli vit ke yo frape memwa. Poutèt sa, gen yon risk pou yo pèdi mesaj nenpòt kalite (menm acks=tout, min.insync.replicas=2) nan ka echèk similtane.

An jeneral, Kafka montre pi bon pèfòmans lojisyèl epi li fèt depi nan baz pou grap. Nimewo a nan disip yo ka ogmante a 11 si sa nesesè pou fyab. Faktè replikasyon 5 ak kantite minimòm kopi nan senkronizasyon min.insync.replicas=3 pral fè pèt mesaj yon evènman trè ra. Si enfrastrikti ou a ka sipòte rapò replikasyon sa a ak nivo redondance, Lè sa a, ou ka chwazi opsyon sa a.

RabbitMQ clustering bon pou ti ke moun kap kriye. Men, menm ti ke moun kap kriye ka grandi byen vit lè gen gwo trafik. Yon fwa ke moun kap kriye yo vin gwo, ou pral oblije fè chwa difisil ant disponiblite ak fyab. RabbitMQ clustering pi byen adapte pou sitiyasyon ki pa tipik kote benefis ki genyen nan fleksibilite RabbitMQ a depase nenpòt dezavantaj nan clustering li yo.

Yon antidot kont vilnerabilite RabbitMQ nan gwo ke moun kap kriye se kraze yo nan anpil ke moun kap kriye ki pi piti. Si ou pa bezwen kòmande konplè nan tout keu la, men se sèlman mesaj ki enpòtan yo (pa egzanp, mesaj ki soti nan yon kliyan espesifik), oswa pa bay lòd pou anyen ditou, Lè sa a, opsyon sa a akseptab: gade nan pwojè mwen an. Rebalancer divize keu a (pwojè a toujou nan yon etap bonè).

Finalman, pa bliye sou yon kantite pinèz nan gwoupman ak mekanis replikasyon nan tou de RabbitMQ ak Kafka. Apre yon tan, sistèm yo te vin pi matirite ak ki estab, men pa gen okenn mesaj p'ap janm 100% an sekirite kont pèt! Anplis de sa, gwo aksidan rive nan sant done!

Si mwen rate yon bagay, fè yon erè, oswa ou pa dakò ak nenpòt nan pwen yo, santi yo lib yo ekri yon kòmantè oswa kontakte mwen.

Yo souvan mande m: "Kisa pou m chwazi, Kafka oswa RabbitMQ?", "Ki platfòm ki pi bon?". Verite a se ke li vrèman depann de sitiyasyon ou, eksperyans aktyèl, elatriye Mwen ezite bay opinyon mwen paske li ta twòp nan yon senplifikasyon twòp rekòmande yon platfòm pou tout ka itilizasyon ak limit posib. Mwen te ekri seri atik sa a pou ou ka fòme pwòp opinyon ou.

Mwen vle di ke tou de sistèm yo se lidè nan domèn sa a. Mwen ka yon ti kras patipri paske nan eksperyans mwen ak pwojè mwen gen tandans bay bagay sa yo valè tankou garanti mesaj lòd ak fyab.

Mwen wè lòt teknoloji ki manke fyab sa a ak lòd garanti, Lè sa a, mwen gade nan RabbitMQ ak Kafka epi reyalize valè a enkwayab nan tou de nan sistèm sa yo.

Sous: www.habr.com

Add nouvo kòmantè