RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability

Π’ miaging artikulo among gitan-aw ang RabbitMQ clustering alang sa fault tolerance ug taas nga pagkaanaa. Karon atong tun-an pag-ayo ang Apache Kafka.

Dinhi ang yunit sa pagkopya mao ang partisyon. Ang matag hilisgutan adunay usa o daghang mga seksyon. Ang matag seksyon adunay lider nga adunay mga sumusunod o wala. Sa paghimo sa usa ka hilisgutan, imong gitino ang gidaghanon sa mga partisyon ug ang replication coefficient. Ang kasagaran nga kantidad mao ang 3, nga nagpasabut nga tulo ka mga replika: usa ka lider ug duha ka sumusunod.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 1. Upat ka mga seksyon ang gipang-apod-apod sa tulo ka mga broker

Ang tanan nga mga hangyo sa pagbasa ug pagsulat moadto sa lider. Ang mga tagasunod kanunay nga nagpadala mga hangyo sa lider aron makadawat sa labing bag-ong mga mensahe. Ang mga konsumedor dili gayud modangop sa mga sumusunod; ang naulahi anaa lamang alang sa redundancy ug fault tolerance.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability

Pagkapakyas sa partisyon

Kung mapakyas ang usa ka broker, ang mga lider sa daghang mga seksyon kanunay nga mapakyas. Sa matag usa kanila, usa ka sumusunod gikan sa laing node mahimong lider. Sa tinuud, dili kini kanunay ang kaso, tungod kay ang hinungdan sa pag-synchronize nag-impluwensya usab: kung adunay mga naka-synchronize nga mga tagasunod, ug kung wala, kung gitugutan ba ang pagbalhin sa usa ka unsynchronized nga kopya. Apan dili na lang nato himoong komplikado ang mga butang sa pagkakaron.

Ang Broker 3 mibiya sa network, ug usa ka bag-ong lider ang napili para sa seksyon 2 sa broker 2.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 2. Ang Broker 3 namatay ug ang iyang follower sa broker 2 napili isip bag-ong lider sa partition 2

Unya ang broker 1 mobiya ug ang seksyon 1 mawad-an usab sa ilang lider, kansang papel ipasa sa broker 2.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 3. Adunay usa ka broker nga nahabilin. Ang tanan nga mga lider naa sa usa ka broker nga adunay zero redundancy

Sa diha nga ang broker 1 mobalik sa online, kini nagdugang upat ka mga sumusunod, nga naghatag ug pipila ka redundancy sa matag partisyon. Apan ang tanan nga mga lider nagpabilin gihapon sa broker 2.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 4. Ang mga lider nagpabilin sa broker 2

Kung moabut ang broker 3, mibalik kami sa tulo nga mga replika matag partisyon. Apan ang tanan nga mga lider anaa gihapon sa broker 2.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 5. Dili balanse nga pagbutang sa mga lider pagkahuman sa pagpahiuli sa mga broker 1 ug 3

Ang Kafka adunay himan alang sa mas maayo nga pagbalanse sa lider kaysa RabbitMQ. Didto, kinahanglan ka nga mogamit usa ka ikatulo nga partido nga plugin o script nga nagbag-o sa mga palisiya sa pagbalhin sa master node pinaagi sa pagkunhod sa redundancy sa panahon sa paglalin. Dugang pa, alang sa daghang mga pila kinahanglan namon nga dawaton ang dili magamit sa panahon sa pag-synchronize.

Ang Kafka adunay konsepto nga "gipili nga mga replika" alang sa papel sa lider. Kung gihimo ang mga partisyon sa hilisgutan, gisulayan ni Kafka nga iapod-apod ang mga lider nga parehas sa mga node ug markahan ang una nga mga lider nga gusto. Sa paglabay sa panahon, tungod sa mga pag-reboot sa server, mga kapakyasan, ug mga pagkaguba sa koneksyon, ang mga lider mahimong mahuman sa ubang mga node, sama sa grabe nga kaso nga gihulagway sa ibabaw.

Aron ayuhon kini, ang Kafka nagtanyag ug duha ka kapilian:

  • Kapilian auto.leader.rebalance.enable=true nagtugot sa controller node nga awtomatiko nga i-reassign ang mga lider balik sa gusto nga mga replika ug sa ingon ibalik ang uniporme nga pag-apod-apod.
  • Mahimong ipadagan sa tagdumala ang script kafka-preferred-replica-election.sh para sa manual reassignment.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 6. Mga replika pagkahuman sa pagbalanse

Kini usa ka gipasimple nga bersyon sa kapakyasan, apan ang reyalidad mas komplikado, bisan kung wala’y labi ka komplikado dinhi. Ang tanan moabut ngadto sa synchronized replika (In-Sync Replicas, ISR).

Na-synchronize nga Replicas (ISR)

Ang ISR usa ka hugpong sa mga kopya sa usa ka partisyon nga giisip nga "synchronized" (in-sync). Adunay usa ka lider, apan mahimo nga walay mga sumusunod. Ang usa ka sumusunod gikonsiderar nga dungan kon kini nakahimo og eksaktong mga kopya sa tanang mensahe sa lider sa wala pa matapos ang agwat. replica.lag.time.max.ms.

Ang usa ka sumusunod gikuha gikan sa set sa ISR kung kini:

  • wala mohimo og hangyo sa pagpili alang sa agwat replica.lag.time.max.ms (gituo nga patay)
  • wala makahimo sa pag-update sa panahon sa agwat replica.lag.time.max.ms (gikonsiderar nga hinay)

Ang mga tagasunod naghimo sa mga hangyo sa sampol sa agwat replica.fetch.wait.max.ms, nga nag-default sa 500ms.

Aron tin-aw nga ipasabut ang katuyoan sa ISR, kinahanglan naton tan-awon ang mga kumpirmasyon gikan sa prodyuser ug pipila nga mga senaryo sa kapakyasan. Makapili ang mga prodyuser kung magpadala ang broker og kumpirmasyon:

  • acks=0, wala ipadala ang kumpirmasyon
  • acks=1, ang kumpirmasyon ipadala human ang lider nagsulat og mensahe sa iyang lokal nga log
  • acks=all, ang kumpirmasyon gipadala human ang tanan nga mga replika sa ISR nagsulat sa mensahe ngadto sa lokal nga mga troso

Sa terminolohiya sa Kafka, kung ang ISR nagtipig sa usa ka mensahe, kini "gitugyan". Ang Acks=all mao ang labing luwas nga kapilian, apan nagdugang usab ug dugang nga paglangan. Atong tan-awon ang duha ka pananglitan sa kapakyasan ug kung giunsa ang lainlaing 'acks' nga mga kapilian nakig-uban sa konsepto sa ISR.

Acks=1 ug ISR

Niini nga pananglitan, atong makita nga kung ang lider dili maghulat sa matag mensahe gikan sa tanan nga mga sumusunod nga maluwas, nan ang pagkawala sa datos posible kung ang lider mapakyas. Ang pag-navigate sa usa ka wala ma-sync nga sumusunod mahimong ma-enable o ma-disable pinaagi sa pag-set dili limpyo.lider.election.enable.

Sa kini nga pananglitan, ang tiggama adunay kantidad nga acks = 1. Ang seksyon giapod-apod sa tanan nga tulo nga mga broker. Ang Broker 3 naa sa luyo, kini nag-synchronize sa lider walo ka segundos ang milabay ug karon 7456 ka mga mensahe sa likod. Ang Broker 1 usa ra ka segundo sa ulahi. Ang among prodyuser nagpadala usa ka mensahe ug dali nga nakadawat usa ka ack back, nga wala’y overhead sa hinay o patay nga mga sumusunod nga wala gihulat sa lider.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 7. ISR nga adunay tulo ka replika

Ang Broker 2 napakyas ug ang prodyuser nakadawat usa ka sayup sa koneksyon. Human mapasa ang liderato sa broker 1, mawala ang 123 ka mensahe. Ang sumusunod sa broker 1 kabahin sa ISR, apan dili hingpit nga na-synchronize sa lider sa dihang nahulog kini.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 8. Ang mga mensahe mawala kung kini nahagsa

Sa configuration bootstrap.servers Ang tiggama adunay daghang mga broker nga nakalista ug makapangutana sa laing broker kung kinsa ang bag-ong lider sa seksyon. Naghimo kini usa ka koneksyon sa broker 1 ug nagpadayon sa pagpadala mga mensahe.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 9. Ang pagpadala sa mga mensahe magpadayon human sa mubo nga pahulay

Ang Broker 3 mas layo pa. Naghimo kini og mga hangyo sa pagkuha apan dili ma-sync. Mahimo kini tungod sa hinay nga koneksyon sa network tali sa mga broker, isyu sa pagtipig, ug uban pa. Gikuha kini gikan sa ISR. Karon ang ISR naglangkob sa usa ka replika - ang lider! Ang tiggama nagpadayon sa pagpadala mga mensahe ug nakadawat mga kumpirmasyon.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 10. Ang tagasunod sa broker 3 gikuha gikan sa ISR

Ang Broker 1 nahulog ug ang papel sa pagpangulo moadto sa broker 3 nga nawala ang 15286 nga mga mensahe! Ang tiggama nakadawat usa ka mensahe sa sayup sa koneksyon. Ang pagbalhin ngadto sa usa ka lider sa gawas sa ISR posible lamang tungod sa setting unclean.leader.election.enable=tinuod. Kung kini na-install sa bakak nga mga, unya dili mahitabo ang transisyon ug ang tanang hangyo sa pagbasa ug pagsulat isalikway. Niini nga kaso, naghulat kami sa broker 1 nga mobalik uban ang iyang wala'y sulod nga datos sa replika, nga mopuli pag-usab sa pagpangulo.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 11. Ang Broker 1 nahulog. Kung mahitabo ang usa ka kapakyasan, daghang mga mensahe ang nawala

Ang prodyuser nagtukod usa ka koneksyon sa katapusan nga broker ug nakita nga siya karon ang lider sa seksyon. Nagsugod siya pagpadala mga mensahe sa broker 3.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 12. Human sa mubo nga pahulay, ang mga mensahe ipadala pag-usab ngadto sa seksyon 0

Nakita namon nga, gawas sa mubu nga mga pagkabalda aron matukod ang mga bag-ong koneksyon ug pagpangita alang sa usa ka bag-ong lider, ang tiggama kanunay nga nagpadala mga mensahe. Kini nga configuration nagsiguro sa pagkaanaa sa gasto sa pagkamakanunayon (data security). Kafka nawala sa liboan ka mga mensahe apan nagpadayon sa pagdawat sa bag-ong mga sinulat.

Acks=tanan ug ISR

Atong balikon kini nga senaryo pag-usab, apan uban sa acks = tanan. Ang Broker 3 adunay kasagaran nga latency nga upat ka segundo. Ang tiggama nagpadala usa ka mensahe nga adunay acks = tanan, ug karon wala makadawat ug dali nga tubag. Ang lider naghulat alang sa mensahe nga maluwas sa tanan nga mga replika sa ISR.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 13. ISR nga adunay tulo ka replika. Ang usa hinay, nga miresulta sa pagkalangan sa pagrekord

Human sa upat ka segundos sa dugang nga paglangan, ang broker 2 nagpadala ug ack. Ang tanan nga mga replika karon hingpit nga na-update.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 14. Ang tanan nga mga replika nagtipig og mga mensahe ug ipadala ang ack

Ang Broker 3 karon nahulog sa luyo ug gikuha gikan sa ISR. Mahinungdanon nga pagkunhod ang latency tungod kay wala’y hinay nga mga kopya nga nahabilin sa ISR. Ang Broker 2 karon naghulat lamang sa broker 1, ug siya adunay average nga lag nga 500 ms.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 15. Ang replika sa broker 3 gikuha gikan sa ISR

Dayon ang broker 2 nahulog ug ang pagpangulo moagi sa broker 1 nga walay pagkawala sa mga mensahe.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 16. Nahulog ang Broker 2

Ang tiggama nakakaplag usa ka bag-ong lider ug nagsugod sa pagpadala mga mensahe kaniya. Ang latency dugang nga pagkunhod tungod kay ang ISR karon naglangkob sa usa ka replica! Busa ang kapilian acks = tanan wala makadugang sa redundancy.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 17. Ang replika sa broker 1 nanguna nga dili mawala ang mga mensahe

Unya ang broker 1 nahagsa ug ang nanguna moadto sa broker 3 nga adunay pagkawala sa 14238 nga mga mensahe!

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 18. Ang Broker 1 namatay ug ang pagbalhin sa pagpangulo nga adunay dili limpyo nga setting nagresulta sa daghang pagkawala sa datos

Dili namo ma-install ang opsyon dili limpyo.lider.election.enable ngadto sa kahulogan tinuod nga. Sa kasagaran kini katumbas sa bakak nga mga. Mga setting acks = tanan с unclean.leader.election.enable=tinuod naghatag og accessibility uban sa pipila ka dugang nga data seguridad. Apan sa imong nakita, mahimo gihapon nga mawala ang mga mensahe.

Apan unsa man kung gusto namon nga madugangan ang seguridad sa datos? Mahimo nimong ibutang hugaw.lider.election.enable = bakak, apan kini dili kinahanglan nga manalipod kanato gikan sa pagkawala sa datos. Kung ang lider nahulog pag-ayo ug gikuha ang datos uban niini, nan ang mga mensahe nawala gihapon, ug ang pagkaanaa nawala hangtud nga gipahiuli sa tagdumala ang sitwasyon.

Mas maayo nga masiguro nga ang tanan nga mga mensahe sobra, ug kung dili, isalikway ang pagrekord. Dayon, labing menos gikan sa punto sa panglantaw sa broker, ang pagkawala sa datos posible lamang kung adunay duha o labaw pa nga dungan nga mga kapakyasan.

Acks=all, min.insync.replicas ug ISR

Uban sa pag-configure sa hilisgutan min.insync.replicas Gidugangan namon ang lebel sa seguridad sa datos. Atong balikan ang katapusang bahin sa miaging senaryo pag-usab, apan niining higayona uban sa min.insync.replicas=2.

Busa ang broker 2 adunay usa ka lider sa replika ug ang sumusunod sa broker 3 gikuha gikan sa ISR.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 19. ISR gikan sa duha ka replika

Ang Broker 2 nahulog ug ang pagpangulo moagi sa broker 1 nga walay pagkawala sa mga mensahe. Apan karon ang ISR naglangkob lamang sa usa ka replika. Wala kini makaabot sa minimum nga gidaghanon aron makadawat og mga rekord, ug busa ang broker mitubag sa pagsulay sa pagsulat nga adunay usa ka sayup Dili Igo nga mga Replika.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 20. Ang gidaghanon sa mga ISR usa ka ubos kay sa gipiho sa min.insync.replicas

Kini nga pag-configure nagsakripisyo sa pagkaanaa alang sa pagkamakanunayon. Sa dili pa ilhon ang usa ka mensahe, among gisiguro nga kini gisulat sa labing menos duha ka replika. Naghatag kini sa tiggama og dugang nga pagsalig. Dinhi, ang pagkawala sa mensahe posible lamang kung ang duha ka mga replika mapakyas nga dungan sa usa ka mubo nga agwat hangtod ang mensahe gisundog sa usa ka dugang nga sumusunod, nga dili mahimo. Apan kung super paranoid ka, mahimo nimong i-set ang replication factor sa 5, ug min.insync.replicas pinaagi sa 3. Dinhi ang tulo ka mga broker kinahanglan mahulog sa samang higayon aron mawala ang rekord! Siyempre, gibayran nimo kini nga kasaligan sa dugang nga latency.

Kung gikinahanglan ang accessibility alang sa seguridad sa datos

Sama sa kaso sa RabbitMQ, usahay gikinahanglan ang accessibility alang sa seguridad sa datos. Ania ang kinahanglan nimong hunahunaon:

  • Mahimo bang ibalik lang sa magmamantala ang usa ka sayup ug ipasulay pag-usab ang upstream nga serbisyo o tiggamit sa ulahi?
  • Mahimo bang i-save sa magmamantala ang mensahe sa lokal o sa usa ka database aron sulayan pag-usab sa ulahi?

Kung ang tubag dili, nan ang pag-optimize sa pagkaanaa makapauswag sa seguridad sa datos. Mawala nimo ang gamay nga datos kung pilion nimo ang pagkaanaa imbes nga dili magrekord. Busa, ang tanan moabut sa pagpangita sa balanse, ug ang desisyon nagdepende sa piho nga sitwasyon.

Ang kahulogan sa ISR

Ang ISR suite nagtugot kanimo sa pagpili sa labing maayo nga balanse tali sa seguridad sa datos ug latency. Pananglitan, siguroha ang pagkaanaa sa higayon nga mapakyas ang kadaghanan sa mga replika, pagminus sa epekto sa patay o hinay nga mga replika sa termino sa latency.

Gipili namo ang kahulogan sa among kaugalingon replica.lag.time.max.ms sumala sa imong mga panginahanglan. Sa tinuud, kini nga parameter nagpasabut kung unsa ka daghang paglangan ang andam natong dawaton kung kanus-a acks = tanan. Ang default nga kantidad mao ang napulo ka segundo. Kung kini taas kaayo alang kanimo, mahimo nimo kini pakunhuran. Unya ang kadaghan sa mga pagbag-o sa ISR modaghan, tungod kay ang mga tagasunod tangtangon ug idugang kanunay.

Ang RabbitMQ usa ka hugpong sa mga salamin nga kinahanglan nga kopyahon. Ang hinay nga mga salamin nagpaila sa dugang nga latency, ug ang patay nga mga salamin mahimong maghulat hangtud nga ang mga pakete nga magsusi sa pagkaanaa sa matag node (net tick) sa pagtubag. Ang ISR usa ka makapaikag nga paagi aron malikayan kini nga mga isyu sa latency. Apan nameligro kami nga mawad-an sa redundancy tungod kay ang ISR mahimo ra nga mubu sa lider. Aron malikayan kini nga risgo, gamita ang setting min.insync.replicas.

Garantiya sa koneksyon sa kliyente

Sa mga kahimtang bootstrap.servers ang prodyuser ug konsumedor mahimong magtino sa daghang mga broker para sa pagkonektar sa mga kliyente. Ang ideya mao nga kung ang usa ka node nahulog, adunay daghang mga ekstra nga nahabilin diin ang kliyente makaabli sa usa ka koneksyon. Dili kini kinahanglan nga mga lider sa seksyon, apan usa lamang ka springboard alang sa inisyal nga pagkarga. Mahimong pangutan-on sila sa kliyente kung unsang node ang nag-host sa lider sa pagbasa / pagsulat sa partisyon.

Sa RabbitMQ, ang mga kliyente mahimong magkonektar sa bisan unsang node, ug ang internal nga ruta nagpadala sa hangyo kung diin kini kinahanglan nga moadto. Kini nagpasabot nga mahimo nimong i-install ang usa ka load balancer sa atubangan sa RabbitMQ. Ang Kafka nagkinahanglan sa mga kliyente nga magkonektar sa node nga nag-host sa katugbang nga lider sa partisyon. Sa ingon nga sitwasyon, dili ka maka-install og load balancer. Listahan bootstrap.servers Importante nga ang mga kliyente maka-access ug makapangita sa husto nga mga node human sa kapakyasan.

Kafka Consensus Architecture

Hangtud karon, wala namo mahunahuna kung giunsa nahibal-an sa cluster ang bahin sa pagkahulog sa broker ug kung giunsa ang usa ka bag-ong lider gipili. Aron mahibal-an kung giunsa ang pagtrabaho sa Kafka sa mga partisyon sa network, kinahanglan nimo nga masabtan una ang arkitektura sa konsensus.

Ang matag cluster sa Kafka gipakatap kauban ang usa ka cluster sa Zookeeper, nga usa ka giapod-apod nga serbisyo sa consensus nga nagtugot sa sistema nga makab-ot ang consensus sa pipila nga gihatag nga estado, nga nag-una sa pagkamakanunayon kaysa pagkaanaa. Ang pagtugot sa kadaghanan sa mga node sa Zookeeper gikinahanglan aron maaprobahan ang mga operasyon sa pagbasa ug pagsulat.

Gitipigan sa Zookeeper ang kahimtang sa cluster:

  • Listahan sa mga hilisgutan, mga seksyon, configuration, kasamtangan nga lider replika, gipalabi replika.
  • Mga miyembro sa cluster. Ang matag broker nag-ping sa cluster sa Zookeeper. Kung wala kini makadawat usa ka ping sa sulod sa usa ka piho nga yugto sa panahon, unya girekord sa Zookeeper ang broker nga dili magamit.
  • Pagpili sa nag-una ug ekstra nga mga node alang sa controller.

Ang controller node usa sa mga Kafka brokers nga responsable sa pagpili sa mga lider sa replika. Ang Zookeeper nagpadala og mga pahibalo ngadto sa controller mahitungod sa cluster membership ug mga kausaban sa hilisgutan, ug ang controller kinahanglan nga molihok niini nga mga kausaban.

Pananglitan, magkuha kita usa ka bag-ong hilisgutan nga adunay napulo ka partisyon ug usa ka hinungdan sa pagkopya sa 3. Ang tigkontrol kinahanglan nga magpili usa ka lider alang sa matag partisyon, nga naningkamot nga maapod-apod ang mga lider sa labing maayo taliwala sa mga broker.

Alang sa matag seksiyon controller:

  • nag-update sa impormasyon sa Zookeeper bahin sa ISR ug lider;
  • Nagpadala usa ka LeaderAndISSRomand sa matag broker nga nag-host sa usa ka kopya niini nga partisyon, nga nagpahibalo sa mga broker bahin sa ISR ug ang lider.

Kung ang usa ka broker nga adunay usa ka lider nahulog, ang Zookeeper nagpadala usa ka pahibalo sa controller, ug kini nagpili usa ka bag-ong lider. Sa makausa pa, ang controller una nga nag-update sa Zookeeper ug dayon nagpadala usa ka mando sa matag broker nga nagpahibalo kanila sa pagbag-o sa pagpangulo.

Ang matag lider mao ang responsable sa pag-recruit sa mga ISR. Mga setting replica.lag.time.max.ms nagdeterminar kon kinsa ang mosulod didto. Kung nabag-o ang ISR, gipasa sa lider ang bag-ong kasayuran sa Zookeeper.

Ang Zookeeper kanunay nga gipahibalo sa bisan unsang mga pagbag-o aron kung adunay kapakyasan, hapsay nga pagbalhin ang pagdumala sa usa ka bag-ong lider.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 21. Kafka Consensus

Protocol sa pagkopya

Ang pagsabot sa mga detalye sa pagkopya makatabang nimo nga mas masabtan ang posibleng pagkawala sa datos nga mga sitwasyon.

Mga sampol nga pangutana, Log End Offset (LEO) ug Highwater Mark (HW)

Among gikonsiderar nga ang mga sumusunod kanunay nga magpadala sa mga hangyo sa pagkuha sa lider. Ang default interval mao ang 500ms. Lahi kini sa RabbitMQ nga ang pagkopya sa RabbitMQ wala gisugdan sa salamin sa pila apan sa agalon. Giduso sa agalon ang mga pagbag-o sa mga salamin.

Ang lider ug ang tanan nga mga sumusunod nagtipig sa Log End Offset (LEO) ug ang Highwater (HW) nga label. Ang LEO nga marka nagtipig sa offset sa kataposang mensahe sa lokal nga replika, ug ang HW maoy naghupot sa offset sa kataposang commit. Hinumdumi nga alang sa commit status, ang mensahe kinahanglan nga magpadayon sa tanan nga mga replika sa ISR. Kini nagpasabot nga ang LEO kasagaran nag-una og gamay sa HW.

Kon ang lider makadawat og mensahe, kini magtipig niini sa lokal. Ang follower mihimo ug fetch request pinaagi sa pagpadala sa iyang LEO. Ang lider unya magpadala sa usa ka batch sa mga mensahe sugod niini nga LEO ug ipadala usab ang kasamtangan nga HW. Sa diha nga ang lider makadawat og impormasyon nga ang tanan nga mga replika nagtipig sa mensahe sa gihatag nga offset, kini nagpalihok sa marka sa HW. Ang lider ra ang makalihok sa HW, ug aron mahibal-an sa tanan nga mga sumusunod ang karon nga kantidad sa mga tubag sa ilang hangyo. Kini nagpasabot nga ang mga sumusunod mahimong maulahi sa lider sa mensahe ug kahibalo sa HW. Ang mga konsumedor makadawat og mga mensahe lamang hangtod sa kasamtangan nga HW.

Timan-i nga ang "nagpadayon" nagpasabut nga gisulat sa memorya, dili sa disk. Alang sa pasundayag, ang Kafka nag-synchronize sa disk sa usa ka piho nga agwat. Ang RabbitMQ usab adunay ingon nga agwat, apan magpadala kini usa ka pag-ila sa magmamantala pagkahuman gisulat sa agalon ug sa tanan nga mga salamin ang mensahe sa disk. Ang mga nag-develop sa Kafka, tungod sa mga hinungdan sa pasundayag, nakahukom nga magpadala usa ka ack sa diha nga ang mensahe gisulat sa memorya. Gipusta ni Kafka nga ang redundancy mabawi ang peligro sa daklit nga pagtipig sa mga giila nga mensahe sa memorya lamang.

Pagkapakyas sa lider

Kung nahulog ang usa ka lider, gipahibalo sa Zookeeper ang controller, ug nagpili kini usa ka bag-ong replika sa lider. Ang bag-ong lider nagtakda ug bag-ong marka sa HW sumala sa iyang LEO. Ang mga sumusunod makadawat dayon og impormasyon bahin sa bag-ong lider. Depende sa bersyon sa Kafka, ang sumusunod mopili sa usa sa duha ka senaryo:

  1. Kini putlon ang lokal nga log sa usa ka nailhan nga HW ug magpadala usa ka hangyo sa bag-ong lider alang sa mga mensahe pagkahuman niini nga marka.
  2. Magpadala usa ka hangyo sa lider aron mahibal-an ang HW sa panahon nga siya napili nga lider, ug dayon putlon ang log sa kini nga offset. Magsugod na dayon kini paghimo og mga hangyo sa pagkuha matag karon ug unya sugod niining offset.

Kinahanglang putlon sa usa ka follower ang log tungod sa mosunod nga mga rason:

  • Kung mapakyas ang usa ka lider, ang unang sumusunod sa set sa ISR nga narehistro sa Zookeeper ang modaog sa eleksyon ug mahimong lider. Ang tanan nga mga tagasunod sa ISR, bisan kung gikonsiderar nga "nag-sync," mahimong wala makadawat mga kopya sa tanan nga mga mensahe gikan sa kanhing lider. Posible nga ang gipili nga tagasunod wala’y pinakabag-o nga kopya. Gisiguro ni Kafka nga wala’y kalainan tali sa mga replika. Busa, aron malikayan ang mga panagsumpaki, ang matag sumusunod kinahanglang putlon ang log niini ngadto sa HW nga kantidad sa bag-ong lider sa panahon sa iyang pagpili. Kini usa pa ka hinungdan ngano nga nagbutang acks = tanan importante kaayo alang sa pagkamakanunayon.
  • Ang mga mensahe matag karon ug unya gisulat sa disk. Kung ang tanan nga mga cluster node mapakyas sa parehas nga oras, nan ang mga replika nga adunay lainlaing mga offset itago sa mga disk. Posible nga sa pagbalik sa mga brokers online, ang bag-ong lider nga napili mao ang luyo sa iyang mga sumusunod tungod kay naluwas siya sa disk sa wala pa ang uban.

Reunion uban sa cluster

Sa pag-apil pag-usab sa cluster, ang mga replika mobuhat sama sa dihang ang usa ka lider mapakyas: ilang susihon ang replika sa lider ug putlon ang ilang troso ngadto sa HW niini (sa panahon sa eleksyon). Sa pagtandi, ang RabbitMQ parehas nga nagtagad sa mga nahiusa nga mga node nga bag-o. Sa duha ka mga kaso, gisalikway sa broker ang bisan unsang kasamtangan nga estado. Kung gigamit ang awtomatik nga pag-synchronize, kinahanglan nga kopyahon sa agalon ang tanan nga sulud karon sa bag-ong salamin sa usa ka pamaagi nga "paabuta ang tibuuk kalibutan". Ang agalon dili modawat sa bisan unsang pagbasa o pagsulat nga mga operasyon sa panahon niini nga operasyon. Kini nga pamaagi nagmugna og mga problema sa dagkong mga pila.

Ang Kafka usa ka gipang-apod-apod nga log ug sa kinatibuk-an nagtipig kini og daghang mga mensahe kaysa usa ka RabbitMQ queue, diin ang data gikuha gikan sa pila pagkahuman nabasa. Ang aktibo nga mga pila kinahanglan magpabilin nga medyo gamay. Apan ang Kafka usa ka log nga adunay kaugalingon nga palisiya sa pagpadayon, nga mahimong magtakda usa ka yugto sa mga adlaw o semana. Ang pag-ali sa pila ug ang hingpit nga pamaagi sa pag-synchronize dili gyud madawat alang sa usa ka gipang-apod-apod nga log. Hinunoa, ang mga sumusunod sa Kafka yanong putlon ang ilang troso ngadto sa HW sa lider (sa panahon sa iyang pagkapili) kon ang ilang kopya kay sa lider. Sa mas lagmit nga kaso, kung ang tagasunod naa sa luyo, magsugod ra kini paghimo mga hangyo sa pagkuha sugod sa karon nga LEO.

Ang mga bag-o o miapil pag-usab nga mga sumusunod magsugod sa gawas sa ISR ug dili moapil sa mga commit. Nagtrabaho lang sila kauban sa grupo, nga nakadawat mga mensahe sa labing madali nga mahimo nila hangtod nga maabut nila ang lider ug mosulod sa ISR. Walay lock-in ug dili kinahanglan nga ilabay ang tanan nimong data.

Pagkawala sa koneksyon

Ang Kafka adunay daghang mga sangkap kaysa RabbitMQ, mao nga kini adunay usa ka labi ka komplikado nga hugpong sa mga pamatasan kung ang cluster mahimong madiskonekta. Apan ang Kafka orihinal nga gidisenyo alang sa mga pungpong, mao nga ang mga solusyon maayo kaayo nga gihunahuna.

Sa ubos mao ang daghang mga senaryo sa pagkapakyas sa koneksyon:

  • Scenario 1: Ang sumusunod dili makakita sa lider, apan makakita gihapon sa Zookeeper.
  • Scenario 2: Ang lider walay makita nga mga sumusunod, apan nakakita gihapon sa Zookeeper.
  • Scenario 3: Ang sumusunod nakakita sa lider, apan wala makakita sa Zookeeper.
  • Scenario 4: Ang lider nakakita sa mga sumusunod, apan wala makakita sa Zookeeper.
  • Scenario 5: Ang tagasunod hingpit nga bulag gikan sa ubang mga Kafka node ug Zookeeper.
  • Scenario 6: Ang lider hingpit nga bulag gikan sa ubang mga Kafka node ug Zookeeper.
  • Scenario 7: Ang Kafka controller node dili makakita og laing Kafka node.
  • Scenario 8: Kafka controller wala makakita Zookeeper.

Ang matag senaryo adunay kaugalingong kinaiya.

Scenario 1: Ang follower dili makakita sa lider, apan nakakita gihapon sa Zookeeper

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 22. Scenario 1: ISR sa tulo ka replika

Ang pagkapakyas sa koneksyon nagbulag sa broker 3 gikan sa mga broker 1 ug 2, apan dili gikan sa Zookeeper. Ang Broker 3 dili na makapadala ug mga hangyo sa pagkuha. Paglabay sa panahon replica.lag.time.max.ms kini gikuha gikan sa ISR ug dili moapil sa mga mensahe commits. Kung mabalik ang koneksyon, ipadayon niini ang mga hangyo sa pagkuha ug moapil sa ISR kung maabutan ang lider. Ang Zookeeper magpadayon nga makadawat og mga ping ug maghunahuna nga ang broker buhi ug maayo.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 23. Scenario 1: Ang broker gikuha gikan sa ISR kung walay hangyo sa pagkuha nga nadawat gikan niini sulod sa replica.lag.time.max.ms interval

Walay split-utok o node suspension sama sa RabbitMQ. Hinunoa, ang redundancy mikunhod.

Scenario 2: Ang lider walay makita nga mga sumusunod, apan nakakita gihapon sa Zookeeper

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 24. Scenario 2. Lider ug duha ka sumusunod

Ang pagkaguba sa koneksyon sa network nagbulag sa lider gikan sa mga sumusunod, apan ang broker makakita gihapon sa Zookeeper. Sama sa una nga senaryo, ang ISR nag-urong, apan niining higayona lamang sa lider tungod kay ang tanan nga mga sumusunod mihunong sa pagpadala sa mga hangyo sa pagkuha. Pag-usab, walay lohikal nga dibisyon. Hinunoa, adunay pagkawala sa redundancy alang sa bag-ong mga mensahe hangtud nga ang koneksyon mapasig-uli. Ang Zookeeper nagpadayon sa pagdawat sa mga ping ug nagtuo nga ang broker buhi ug maayo.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 25. Scenario 2. Ang ISR migamay lamang sa lider

Scenario 3. Ang sumusunod nakakita sa lider, apan wala makakita sa Zookeeper

Ang sumusunod nahimulag gikan sa Zookeeper, apan dili gikan sa broker uban sa lider. Ingon usa ka sangputanan, ang sumusunod nagpadayon sa paghimo og mga hangyo sa pagkuha ug mahimong miyembro sa ISR. Ang Zookeeper wala na makadawat og mga ping ug nagparehistro sa usa ka pagkahagsa sa broker, apan tungod kay kini usa lamang ka sumusunod, walay mga sangputanan human sa pagkaayo.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 26. Scenario 3: Ang sumusunod nagpadayon sa pagpadala sa mga hangyo sa pagkuha ngadto sa lider

Scenario 4. Ang lider nakakita sa mga sumusunod, apan wala makakita sa Zookeeper

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 27. Scenario 4. Lider ug duha ka sumusunod

Ang lider nahimulag gikan sa Zookeeper, apan dili gikan sa mga broker nga adunay mga sumusunod.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 28. Scenario 4: Lider nga nahimulag sa Zookeeper

Pagkahuman sa pila ka oras, ang Zookeeper magparehistro sa usa ka kapakyasan sa broker ug ipahibalo ang tigkontrol bahin niini. Magpili siyag bag-ong pangulo taliwala sa iyang mga sumusunod. Bisan pa, ang orihinal nga lider magpadayon sa paghunahuna nga kini ang lider ug magpadayon sa pagdawat sa mga entri gikan sa acks=1. Ang mga tagasunod wala na magpadala kaniya sa mga hangyo sa pagkuha, mao nga iyang isipon sila nga patay ug sulayan nga ipaubos ang ISR sa iyang kaugalingon. Apan tungod kay wala kini koneksyon sa Zookeeper, dili kini makahimo niini, ug nianang puntoha magdumili sa pagdawat sa bisan unsang dugang nga mga entries.

Mga mensahe acks = tanan dili makadawat og pag-ila tungod kay ang ISR unang nag-turn sa tanang mga replika, ug ang mga mensahe dili makaabot kanila. Kung ang orihinal nga lider mosulay sa pagtangtang kanila gikan sa ISR, dili kini mahimo ug mohunong sa pagdawat sa bisan unsang mga mensahe.

Ang mga kliyente sa wala madugay nakamatikod sa pagbag-o sa lider ug nagsugod sa pagpadala sa mga rekord sa bag-ong server. Kung mabalik na ang network, makita sa orihinal nga lider nga dili na kini usa ka lider ug giputol ang log niini sa kantidad sa HW nga naa sa bag-ong lider sa panahon nga napakyas aron malikayan ang pagkalainlain sa log. Magsugod kini sa pagpadala sa mga hangyo sa pagkuha sa bag-ong lider. Ang tanan nga mga rekord gikan sa orihinal nga lider nga wala gisundog sa bag-ong lider nawala. Sa ato pa, mawala ang mga mensahe nga wala giila sa orihinal nga lider sa pipila ka segundo nga nagtrabaho ang duha ka lider.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 29. Scenario 4. Ang lider sa broker 1 nahimong follower human mapasig-uli ang network

Scenario 5: Ang tagasunod hingpit nga bulag gikan sa ubang mga Kafka node ug Zookeeper

Ang sumusunod hingpit nga nahimulag gikan sa ubang mga Kafka node ug Zookeeper. Gitangtang ra niya ang iyang kaugalingon gikan sa ISR hangtod nga nabalik ang network, ug dayon nadakpan ang uban.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 30. Scenario 5: Ang nahilit nga sumusunod gikuha gikan sa ISR

Scenario 6: Ang lider hingpit nga bulag gikan sa ubang mga Kafka node ug Zookeeper

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 31. Scenario 6. Lider ug duha ka sumusunod

Ang lider hingpit nga nahimulag gikan sa iyang mga sumusunod, ang controller ug Zookeeper. Sulod sa mubo nga panahon magpadayon kini sa pagdawat sa mga entri gikan sa acks=1.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 32. Scenario 6: Pag-isolate sa lider gikan sa ubang Kafka ug Zookeeper nodes

Wala makadawat mga hangyo pagkahuman matapos replica.lag.time.max.ms, kini mosulay sa pagkunhod sa ISR sa iyang kaugalingon, apan dili makahimo niini tungod kay walay komunikasyon uban sa Zookeeper, unya kini mohunong sa pagdawat sa mga sinulat.

Samtang, markahan sa Zookeeper ang nahilit nga broker nga patay na ug ang tigkontrol magpili usa ka bag-ong lider.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 33. Scenario 6. Duha ka lider

Ang orihinal nga lider mahimong modawat sa mga entri sulod sa pipila ka segundo, apan mohunong sa pagdawat sa bisan unsang mga mensahe. Gi-update ang mga kliyente matag 60 segundos gamit ang pinakabag-o nga metadata. Ipahibalo sila sa pagbag-o sa lider ug magsugod sa pagpadala sa mga entry sa bag-ong lider.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 34. Scenario 6: Ang mga tiggama mibalhin sa usa ka bag-ong lider

Ang tanan nga nakumpirma nga mga entry nga gihimo sa orihinal nga lider sukad ang pagkawala sa koneksyon mawala. Kung mabalik na ang network, madiskubre sa orihinal nga lider pinaagi sa Zookeeper nga dili na kini ang lider. Dayon putlon niini ang log niini ngadto sa HW sa bag-ong lider sa panahon sa eleksyon ug magsugod sa pagpadala og mga hangyo isip sumusunod.

RabbitMQ vs Kafka: Pag-agwanta sa Kasaypanan ug Taas nga Availability
bugas. 35. Scenario 6: Ang orihinal nga lider nahimong sumusunod human mapasig-uli ang koneksyon sa network

Niini nga sitwasyon, ang lohikal nga panagbulag mahimong mahitabo sa mubo nga panahon, apan kung acks=1 ΠΈ min.insync.replicas usab 1. Awtomatikong matapos ang lohikal nga panagbulag bisan human mapasig-uli ang network, kung ang orihinal nga lider makaamgo nga dili na siya ang lider, o kung ang tanan nga kliyente makaamgo nga ang lider nausab ug nagsugod sa pagsulat sa bag-ong lider - kung unsa ang mahitabo una. Sa bisan unsa nga kaso, ang pipila ka mga mensahe mawala, apan uban lamang acks=1.

Adunay lain nga variant niini nga senaryo diin, sa wala pa ang network nabahin, ang mga sumusunod nahulog sa luyo ug ang lider nag-compress sa ISR sa iyang kaugalingon lamang. Dayon kini mahimong nahimulag tungod sa pagkawala sa koneksyon. Usa ka bag-ong lider ang napili, apan ang orihinal nga lider nagpadayon sa pagdawat sa mga entri, bisan pa acks = tanan, kay wala nay lain sa ISR gawas niya. Kini nga mga rekord mawala sa higayon nga ang network mapasig-uli. Ang bugtong paagi aron malikayan kini nga kapilian mao ang min.insync.replicas = 2.

Sitwasyon 7: Ang Kafka Controller Node Dili Makita ang Laing Kafka Node

Sa kinatibuk-an, sa higayon nga ang koneksyon sa usa ka Kafka node mawala, ang controller dili makahimo sa pagpadala sa bisan unsa nga lider change impormasyon ngadto niini. Sa pinakagrabe nga kaso, kini modala ngadto sa usa ka hamubo nga lohikal nga panagbulag, sama sa senaryo 6. Mas kasagaran kay sa dili, ang broker dili lamang mahimong kandidato alang sa pagpangulo kon ang naulahi mapakyas.

Scenario 8: Kafka controller wala makakita Zookeeper

Ang Zookeeper dili makadawat og ping gikan sa nahulog nga controller ug mopili og bag-ong Kafka node isip controller. Ang orihinal nga controller mahimong magpadayon sa pagpresentar sa iyang kaugalingon sa ingon, apan wala kini makadawat mga pahibalo gikan sa Zookeeper, mao nga wala kini mga buluhaton nga buhaton. Sa diha nga ang network gipahiuli, siya makaamgo nga siya dili na usa ka controller, apan nahimong usa ka regular nga Kafka node.

Mga konklusyon gikan sa mga senaryo

Nakita namon nga ang pagkawala sa pagkadugtong sa mga tagasunod dili moresulta sa pagkawala sa mensahe, apan temporaryo lang nga makunhuran ang redundancy hangtod mabalik ang network. Kini, siyempre, mahimong mosangput sa pagkawala sa datos kung nawala ang usa o daghang mga node.

Kung ang lider mabulag gikan sa Zookeeper tungod sa pagkawala sa koneksyon, kini mahimong moresulta sa mga mensahe nga mawala gikan sa acks=1. Ang kakulang sa komunikasyon sa Zookeeper hinungdan sa usa ka mubo nga lohikal nga panagbulag sa duha nga mga lider. Kini nga problema masulbad pinaagi sa parameter acks = tanan.

Parameter min.insync.replicas ngadto sa duha o labaw pa nga mga replika naghatag og dugang nga kasiguruhan nga ang maong mga short-term scenario dili moresulta sa nawala nga mga mensahe sama sa Scenario 6.

Katingbanan sa Nawala nga mga Mensahe

Atong ilista ang tanang paagi nga mawad-an ka og data sa Kafka:

  • Ang bisan unsang pagkapakyas sa lider kung ang mga mensahe gikumpirma nga gigamit acks=1
  • Bisan unsa nga mahugaw nga transisyon sa pagpangulo, nga mao, ngadto sa usa ka sumusunod sa gawas sa ISR, bisan sa acks = tanan
  • Pagbulag sa lider gikan sa Zookeeper kung ang mga mensahe nakumpirma nga gigamit acks=1
  • Hingpit nga pagkahimulag sa lider nga mikupos na sa grupo sa ISR ngadto sa iyang kaugalingon. Ang tanan nga mga mensahe mawala, bisan pa acks = tanan. Kini tinuod lamang kon min.insync.replicas=1.
  • Dungan nga mga kapakyasan sa tanang partition node. Tungod kay ang mga mensahe giila gikan sa memorya, ang uban mahimong wala pa masulat sa disk. Pagkahuman sa pag-reboot sa mga server, ang pipila ka mga mensahe mahimong nawala.

Ang dili putli nga mga transisyon sa pagpangulo mahimong malikayan pinaagi sa bisan hain nga pagdili kanila o pagsiguro sa labing menos duha ka redundancies. Ang labing lig-on nga configuration mao ang usa ka kombinasyon acks = tanan ΠΈ min.insync.replicas labaw sa 1.

Direkta nga pagtandi sa kasaligan sa RabbitMQ ug Kafka

Aron masiguro ang pagkakasaligan ug taas nga pagkaanaa, ang duha nga mga platform nagpatuman usa ka panguna ug sekondaryang sistema sa pagkopya. Bisan pa, ang RabbitMQ adunay tikod nga Achilles. Kung magkonektar pag-usab human sa usa ka kapakyasan, ang mga node isalikway ang ilang data ug ang pag-synchronize gibabagan. Kining double whammy nagduhaduha sa taas nga kinabuhi sa dagkong mga pila sa RabbitMQ. Kinahanglan nimong dawaton ang pagkunhod sa redundancy o taas nga mga oras sa pag-block. Ang pagkunhod sa redundancy nagdugang sa risgo sa dako nga pagkawala sa datos. Apan kung gamay ra ang mga pila, nan alang sa pag-usab, ang mubu nga mga panahon nga wala magamit (pipila ka segundo) mahimo’g masulbad gamit ang balik-balik nga pagsulay sa koneksyon.

Kafka wala niini nga problema. Gisalikway lamang niini ang datos gikan sa punto sa kalainan tali sa lider ug sa sumusunod. Ang tanan nga gipaambit nga datos gitipigan. Dugang pa, ang pagkopya dili makababag sa sistema. Ang lider nagpadayon sa pagdawat sa mga post samtang ang bag-ong sumusunod makaapas, mao nga alang sa mga devops, ang pag-apil o pag-apil pag-usab sa cluster nahimong usa ka gamay nga buluhaton. Siyempre, aduna pa'y mga isyu sama sa bandwidth sa network atol sa pagkopya. Kung magdugang ka daghang mga tagasunod sa parehas nga oras, mahimo nimong masugatan ang limitasyon sa bandwidth.

Ang RabbitMQ labaw sa Kafka sa kasaligan kung daghang mga server sa usa ka cluster mapakyas sa parehas nga oras. Sama sa giingon na namon, ang RabbitMQ nagpadala usa ka kumpirmasyon sa magmamantala pagkahuman gisulat ang mensahe sa disk sa agalon ug tanan nga mga salamin. Apan kini nagdugang dugang nga latency tungod sa duha ka hinungdan:

  • fsync matag pipila ka gatus ka millisecond
  • Ang kapakyasan sa salamin mamatikdan lamang human sa tibuok kinabuhi sa mga pakete nga nagsusi sa pagkaanaa sa matag node (net tick) nga na-expire na. Kung ang salamin mohinay o mahulog, kini makadugang sa usa ka paglangan.

Ang pusta ni Kafka mao nga kung ang usa ka mensahe gitipigan sa daghang mga node, kini makaila sa mga mensahe sa diha nga kini naigo sa memorya. Tungod niini, adunay peligro nga mawala ang mga mensahe sa bisan unsang klase (bisan acks = tanan, min.insync.replicas=2) sa kaso sa dungan nga kapakyasan.

Sa kinatibuk-an, ang Kafka nagpakita sa mas maayo nga performance sa software ug gidisenyo gikan sa sinugdanan alang sa mga cluster. Ang gidaghanon sa mga sumusunod mahimong madugangan ngadto sa 11 kon gikinahanglan alang sa kasaligan. Replication factor 5 ug minimum nga gidaghanon sa mga replika sa pag-synchronize min.insync.replicas=3 maghimo sa pagkawala sa mensahe nga usa ka talagsaon nga panghitabo. Kung ang imong imprastraktura makasuporta sa kini nga ratio sa pagkopya ug lebel sa redundancy, nan mahimo nimong pilion kini nga kapilian.

Ang RabbitMQ clustering maayo alang sa gagmay nga mga pila. Apan bisan ang gagmay nga mga pila dali nga motubo kung adunay grabe nga trapiko. Kung modako na ang mga pila, kinahanglan nimo nga maghimo mga lisud nga pagpili tali sa pagkaanaa ug kasaligan. Ang RabbitMQ clustering labing haum alang sa dili kasagaran nga mga sitwasyon diin ang mga benepisyo sa RabbitMQ's flexibility mas labaw pa kay sa bisan unsang mga disbentaha sa clustering niini.

Usa ka antidote sa pagkahuyang sa RabbitMQ sa dagkong mga pila mao ang pagbungkag kanila sa daghang gagmay nga mga pila. Kung wala nimo kinahanglana ang kompleto nga pag-order sa tibuuk nga pila, apan ang mga may kalabotan nga mensahe lamang (pananglitan, mga mensahe gikan sa usa ka piho nga kliyente), o ayaw pag-order bisan unsa, nan kini nga kapilian madawat: tan-awa ang akong proyekto Rebalancer sa pagbahin sa pila (ang proyekto anaa pa sa sayo nga yugto).

Sa katapusan, ayaw kalimti ang bahin sa daghang mga bug sa clustering ug replication nga mga mekanismo sa RabbitMQ ug Kafka. Sa paglabay sa panahon, ang mga sistema nahimong mas hamtong ug lig-on, apan walay mensahe nga 100% luwas gikan sa pagkawala! Dugang pa, ang dagkong mga aksidente nahitabo sa mga sentro sa datos!

Kung nasipyat ko, nasayop, o wala ka mouyon sa bisan unsang mga punto, ayaw pagduhaduha sa pagsulat og komento o kontaka ako.

Kanunay kong gipangutana: "Unsa ang pilion, Kafka o RabbitMQ?", "Unsang plataporma ang mas maayo?". Ang tinuod mao nga kini nagdepende gayud sa imong sitwasyon, kasamtangan nga kasinatian, ug uban pa. Nagduhaduha ako sa paghatag sa akong opinyon tungod kay kini usa ka sobra nga pagpasimple sa pagrekomenda sa usa ka plataporma alang sa tanan nga mga kaso sa paggamit ug posible nga mga limitasyon. Gisulat ko kini nga serye sa mga artikulo aron makahimo ka sa imong kaugalingon nga opinyon.

Gusto nakong isulti nga ang duha nga mga sistema mga lider sa kini nga lugar. Mahimong medyo biased ko tungod kay gikan sa akong kasinatian sa mga proyekto gusto nako nga hatagan og bili ang mga butang sama sa garantiya nga pag-order sa mensahe ug kasaligan.

Nakita nako ang ubang mga teknolohiya nga kulang niini nga kasaligan ug garantiya nga pag-order, unya akong gitan-aw ang RabbitMQ ug Kafka ug nahibal-an ang dili katuohan nga kantidad sa duha niini nga mga sistema.

Source: www.habr.com

Idugang sa usa ka comment