RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት

В የመጨረሻ ጽሑፍ ለስህተት መቻቻል እና ለከፍተኛ ተገኝነት RabbitMQ ስብስቦችን ተመልክተናል። አሁን ወደ Apache Kafka በጥልቀት እንመርምር።

እዚህ, የማባዛት አሃድ ክፍልፍል ነው. እያንዳንዱ ርዕስ አንድ ወይም ከዚያ በላይ ክፍሎች አሉት. እያንዳንዱ ክፍል ተከታይ ያለው ወይም የሌለው መሪ አለው። ርዕስን በሚፈጥሩበት ጊዜ, የክፍሎች ብዛት እና የማባዛት ሁኔታ ይገለጻል. የተለመደው እሴት 3 ነው, እሱም ሶስት መስመሮች ማለት ነው-አንድ መሪ ​​እና ሁለት ተከታዮች.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 1. አራት ክፍሎች በሶስት ደላላዎች ተከፋፍለዋል

ሁሉም የማንበብ እና የመፃፍ ጥያቄዎች ወደ መሪው ይሄዳሉ። የቅርብ ጊዜ መልዕክቶችን ለመቀበል ተከታዮች በየጊዜው ወደ መሪው ጥያቄዎችን ይልካሉ። ሸማቾች ተከታዮችን በፍፁም አይደርሱም ፣ የኋለኛው የሚኖረው ለድጋሚ እና ለስህተት መቻቻል ብቻ ነው።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት

ክፍልፍል አለመሳካት።

ደላላ ሲወድቅ የበርካታ ክፍሎች መሪዎች ብዙ ጊዜ ይወድቃሉ። በእያንዳንዳቸው ውስጥ ከሌላ መስቀለኛ መንገድ ተከታይ መሪ ይሆናል. እንደ እውነቱ ከሆነ, ይህ ሁልጊዜ አይደለም, የማመሳሰያው ሁኔታም እንዲሁ ተጽእኖ ይኖረዋል: የተመሳሰሉ ተከታዮች አሉ, እና ካልሆነ, ወደ ያልተመሳሰለ ቅጂ ሽግግር ይፈቀዳል. ግን ነገሮችን ገና አናወሳስበው።

ደላላ 3 ኔትወርኩን ይተዋል፣ እና አዲስ መሪ በክፍል 2 በደላላ 2 ተመርጧል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 2. ደላላ 3 ሞቶ በደላላ 2 ላይ ያለው ተከታዩ ክፍል 2 አዲሱ መሪ ሆኖ ተመረጠ።

ከዚያም ደላላ 1 ይተዋል ክፍል 1 ደግሞ መሪውን ያጣ ሲሆን ሚናው ወደ ደላላ 2 ያልፋል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 3. አንድ ደላላ ወጣ። ሁሉም መሪዎች ከዜሮ ቅነሳ ጋር በአንድ ደላላ ላይ ናቸው።

ደላላ 1 ወደ መስመር ሲመለስ አራት ተከታዮችን ያክላል፣ ይህም በእያንዳንዱ ክፍል ላይ የተወሰነ ድግግሞሽ ይሰጣል። ግን ሁሉም መሪዎች አሁንም በደላላ 2 ላይ ቆዩ።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 4. መሪዎች በደላላ 2 ላይ ይቆያሉ

ደላላ 3 ሲመጣ በየክፍልፋችን ወደ ሶስት ቅጂዎች እንመለሳለን። ግን ሁሉም መሪዎች አሁንም በደላላ 2 ላይ ናቸው።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 5. ደላሎች 1 እና 3 ከተመለሱ በኋላ ሚዛናዊ ያልሆነ የመሪዎች ምደባ

ካፍካ ከ RabbitMQ የተሻለ የመሪ ማመጣጠን መሳሪያ አለው። እዚያ፣ በስደት ወቅት ተደጋጋሚነትን በመቀነስ ለዋና መስቀለኛ ፍልሰት ፖሊሲዎችን የሚቀይር የሶስተኛ ወገን ተሰኪ ወይም ስክሪፕት መጠቀም ነበረቦት። በተጨማሪም፣ ለትልቅ ወረፋዎች፣ በማመሳሰል ጊዜ አለመገኘትን መቋቋም ነበረብህ።

ካፍካ ለመሪ ሚና "የተመረጡ ምልክቶች" ጽንሰ-ሐሳብ አለው. የአንድ ርዕስ ክፍሎች ሲፈጠሩ ካፍካ መሪዎችን በመስቀለኛ መንገድ ላይ በእኩል ለማከፋፈል ይሞክራል እና እነዚያን የመጀመሪያ መሪዎችን እንደ ተመራጭ ምልክት ያደርጋል። በጊዜ ሂደት፣ በአገልጋይ ዳግም መነሳት፣ ብልሽቶች እና መቋረጥ ምክንያት፣ ከላይ እንደታየው ጽንፈኛ ሁኔታ መሪዎች በሌሎች አንጓዎች ላይ ሊጨርሱ ይችላሉ።

ይህንን ለማስተካከል ካፍካ ሁለት አማራጮችን ይሰጣል-

  • አማራጭ auto.leader.rebalance.enable=እውነት የመቆጣጠሪያው መስቀለኛ መንገድ መሪዎችን ወደ ተመራጭ ቅጂዎች እንዲመልስ እና በዚህም ስርጭቱን እንኳን እንዲመልስ ያስችለዋል።
  • አስተዳዳሪ ስክሪፕቱን ማሄድ ይችላል። kafka-የተመረጠ-ቅጂ-ምርጫ.sh በእጅ እንደገና ለመመደብ.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 6. እንደገና ከተመጣጠነ በኋላ ቅጂዎች

ይህ የብልሽት ቀለል ያለ ስሪት ነበር, ግን እውነታው የበለጠ የተወሳሰበ ነው, ምንም እንኳን እዚህ ምንም የተወሳሰበ ነገር የለም. ሁሉም ወደ የተመሳሰሉ ቅጂዎች (In-Sync Replicas፣ ISR) ይወርዳል።

የተመሳሰሉ ቅጂዎች (አይኤስአርዎች)

አይኤስአር “በውስጠ-አመሳስል” ተብሎ የሚታሰበው የክፋይ ቅጂ ነው። እዚህ መሪ አለ, ግን ተከታዮች ላይኖሩ ይችላሉ. ተከታይ ክፍተቱ ከማለፉ በፊት የሁሉንም መሪ መልዕክቶች ትክክለኛ ቅጂ ካደረገ እንደ ተመሳሰለ ይቆጠራል። replica.lag.time.max.ms.

የሚከተለው ከሆነ ተከታይ ከአይኤስአር ስብስብ ይወገዳል።

  • ለክፍለ ጊዜው ናሙና ጥያቄ አላቀረበም replica.lag.time.max.ms (እንደሞተ ይገመታል)
  • በክፍተቱ ጊዜ ማዘመን አልተቻለም replica.lag.time.max.ms (ዘገምተኛ ይቆጠራል)

ተከታዮች በመካከላቸው የማምጣት ጥያቄዎችን ያቀርባሉ replica.fetch.wait.max.msበነባሪ 500ms ነው።

የአይኤስአርን አላማ በግልፅ ለማብራራት ከአምራቹ ማረጋገጫዎች እና አንዳንድ የውድቀት ሁኔታዎችን መመልከት ያስፈልጋል። ደላላው ማረጋገጫ ሲልክ አምራቾች መምረጥ ይችላሉ፡-

  • acks=0፣ ምንም እውቅና አልተላከም።
  • acks=1፣ መሪው መልዕክቱን ወደ አካባቢያዊ ሎግ ከፃፈ በኋላ እውቅና ይላካል
  • acks=all, እውቅና የሚላከው በ ISR ውስጥ ያሉ ሁሉም ቅጂዎች መልእክቱን ወደ አካባቢያዊ ምዝግብ ማስታወሻዎች ከጻፉ በኋላ ነው.

በካፍካ የቃላት አገባብ፣ አንድ አይኤስአር መልእክት ካከማቸ፣ “የተፈፀመ” ነው። Acks=ሁሉም በጣም አስተማማኝ አማራጭ ነው፣ነገር ግን ከተጨማሪ መዘግየት ጋር ነው የሚመጣው። ሁለት የውድቀት ምሳሌዎችን እና የተለያዩ 'acks' አማራጮች ከአይኤስአር ጽንሰ-ሀሳብ ጋር እንዴት እንደሚገናኙ እንመልከት።

Acks=1 እና ISRs

በዚህ ምሳሌ ውስጥ መሪው እያንዳንዱን መልእክት ከሁሉም ተከታዮች ለመዳን ካልጠበቀ መሪው ካልተሳካ የውሂብ መጥፋት እንደሚቻል እንመለከታለን. ወደ ላልተመሳሰለ ተከታይ መዝለል በማቀናበር ሊነቃ ወይም ሊሰናከል ይችላል። ንፁህ.መሪ.ምርጫ.የሚችል.

በዚህ ምሳሌ፣ አምራቹ acks=1 አለው። ክፍሉ በሦስቱም ደላሎች ተከፋፍሏል። ደላላ 3 ከኋላ አለ፣ ከስምንት ሰከንድ በፊት ከመሪው ጋር ተመሳስሏል እና አሁን 7456 መልዕክቶች ከኋላው ነው። ደላላ 1 ከኋላው አንድ ሰከንድ ብቻ ነበር። የኛ ፕሮዲዩሰር መልእክት ልኮ ቶሎ ቶሎ ይመለሳል፣ መሪው የማይጠብቀው ቀርፋፋ ወይም የሞቱ ተከታዮች ላይ ምንም ክፍያ የለም።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 7. ISR በሶስት ቅጂዎች

ደላላ 2 ይወርዳል እና አምራቹ የግንኙነቱ ስህተት አለበት። መሪነት ወደ ደላላ 1 ከተሸጋገርን በኋላ 123 መልዕክቶችን እናጣለን። በደላላ 1 ላይ ያለው ተከታይ በ ISR ውስጥ ነበር ነገር ግን ሲወድቅ ከመሪው ጋር ሙሉ በሙሉ አልተስማማም።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 8. ሲበላሽ መልዕክቶች ጠፍተዋል።

በማዋቀር ውስጥ bootstrap.አገልጋዮች አምራቹ ብዙ ደላላዎች ተዘርዝረዋል እና ሌላ ደላላ ማን አዲሱ ክፍልፋይ መሪ እንደሆነ መጠየቅ ይችላል። ከዚያ ከደላላ 1 ጋር ግንኙነት ይፈጥራል እና መልዕክቶችን መላክ ይቀጥላል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 9. መልዕክቶችን መላክ ከአጭር እረፍት በኋላ ይቀጥላል

ደላላ 3 ከዚህም በላይ ከኋላው አለ። የማምጣት ጥያቄዎችን ያቀርባል ግን ማመሳሰል አይችልም። ይህ በደላሎች መካከል ያለው ቀርፋፋ የአውታረ መረብ ግንኙነት፣ የማከማቻ ችግር፣ ወዘተ ምክንያት ሊሆን ይችላል። ከአይኤስአር በመወገዱ ላይ ነው። አሁን ISR አንድ ቅጂን ያካትታል - መሪ! አምራቹ መልእክቶችን መላክ እና ማረጋገጫዎችን መቀበልን ይቀጥላል.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 10. በደላላ 3 ላይ ያለው ተከታይ ከአይኤስአር ተወግዷል

ደላላ 1 ወርዶ ደላላው 3 15286 መልእክት በማጣት ቀዳሚውን ስፍራ ይይዛል። አምራቹ የግንኙነት ስህተት መልእክት ይቀበላል። ከአይኤስአር ውጭ ወደ መሪው የሚደረግ ሽግግር የሚቻለው በቅንብሩ ምክንያት ብቻ ነው። ርኩስ.መሪ.ምርጫ.enable=እውነት. ውስጥ ከተጫነ የሐሰት, ከዚያ ሽግግሩ አይከሰትም, እና ሁሉም የማንበብ እና የመፃፍ ጥያቄዎች ውድቅ ይሆናሉ. በዚህ አጋጣሚ ደላላ 1 ያልተነካ መረጃውን በቅጅቱ ውስጥ ይዞ እንዲመለስ እየጠበቅን ነው ይህም እንደገና መሪነቱን ይወስዳል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 11. ደላላ 1 ይወርዳል። ሲበላሽ ብዙ መልዕክቶች ጠፍተዋል።

አምራቹ ከመጨረሻው ደላላ ጋር ግንኙነት ይፈጥራል እና አሁን የክፋይ መሪ መሆኑን ይመለከታል. ወደ ደላላ 3 መልእክት መላክ ይጀምራል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 12. ከአጭር እረፍት በኋላ መልእክቶች ወደ ክፍል 0 ይላካሉ

አዲስ ግንኙነት ለመመስረት እና አዲስ መሪ ለመፈለግ ከአጭር ጊዜ መቆራረጥ በተጨማሪ ፕሮዲዩሰሩ በየጊዜው መልእክት ሲልክ አይተናል። ይህ ውቅር በወጥነት (የውሂብ ደህንነት) ወጪ ተገኝነትን ያቀርባል። ካፍካ በሺዎች የሚቆጠሩ መልዕክቶችን አጥቷል ነገር ግን አዳዲስ መዝገቦችን መቀበሉን ቀጠለ።

Acks=all እና ISR

ይህንን ሁኔታ እንደገና እንድገመው፣ ግን በ acks=ሁሉም. ደላላ 3 መዘግየት በአማካይ አራት ሰከንድ ነው። አምራቹ ከ ጋር መልእክት ይልካል acks=ሁሉምእና አሁን ፈጣን ምላሽ አላገኘም። መሪው መልእክቱ በ ISR ውስጥ ባሉ ሁሉም ቅጂዎች እንዲከማች ይጠብቃል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 13. ISR በሶስት ቅጂዎች. አንደኛው ቀርፋፋ ነው፣ ይህም የመቅጃ መዘግየትን ያስከትላል

ከአራት ሰከንድ ተጨማሪ መዘግየት በኋላ፣ ደላላ 2 ምልክት ይልካል። ሁሉም ቅጂዎች አሁን ሙሉ ለሙሉ ተዘምነዋል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 14. ሁሉም ቅጂዎች መልዕክቶችን ያስቀምጣሉ እና ack ይልካሉ

ደላላ 3 አሁን የበለጠ ከኋላ ሆኖ ከአይኤስአር ተወግዷል። በ ISR ውስጥ ምንም ቀርፋፋ ቅጂዎች ስለሌለ መዘግየት በጣም ይቀንሳል። ደላላ 2 አሁን የሚጠብቀው ደላላ 1ን ብቻ ነው፣ ይህም በአማካይ 500 ሚ.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 15. በደላላ 3 ላይ ያለው ቅጂ ከአይኤስአር ተወግዷል

ደላላ 2 ከዚያ ይወርዳል፣ እና መሪው ወደ ደላላ 1 ያለ መልእክት መጥፋት ይሄዳል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 16. ደላላ 2 ብልሽቶች

አምራቹ አዲስ መሪ አግኝቶ መልዕክቶችን መላክ ይጀምራል። የመዘግየቱ ሁኔታ የበለጠ ይቀንሳል, ምክንያቱም አሁን ISR አንድ ነጠላ ቅጂን ያካትታል! ስለዚህ አማራጭ acks=ሁሉም ተደጋጋሚነት አይጨምርም።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 17. በደላላ 1 ላይ ያለው ቅጂ መልእክት ሳይጠፋ መሪነቱን ይወስዳል

ከዚያም ደላላ 1 ተበላሽቶ 3 መልእክቶችን በማጣት 14238 መሪነቱን ይይዛል!

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 18. ደላላ 1 ሞተ እና የአመራር ሽግግር ንፁህ ያልሆነ አቀማመጥ ከፍተኛ የውሂብ መጥፋት ያስከትላል

ምርጫውን ማዘጋጀት አልቻልንም። ንፁህ.መሪ.ምርጫ.የሚችል ወደ ትርጉም እውነተኛ. በነባሪነት ነው። የሐሰት. በማቀናበር ላይ acks=ሁሉም с ርኩስ.መሪ.ምርጫ.enable=እውነት ከአንዳንድ ተጨማሪ የውሂብ ደህንነት ጋር ተደራሽነትን ይሰጣል። ግን እንደምታየው አሁንም መልዕክቶችን ልናጣ እንችላለን።

ግን የውሂብ ደህንነትን ለመጨመር ብንፈልግስ? ማስቀመጥ ይቻላል cleanan.leader.election.enable = ሐሰትነገር ግን ይህ የግድ ከመረጃ መጥፋት ሊጠብቀን አይችልም። መሪው በጠንካራ ሁኔታ ከወደቀ እና ውሂቡን ከእሱ ጋር ከወሰደ, መልእክቶቹ አሁንም ጠፍተዋል, በተጨማሪም አስተዳዳሪው ሁኔታውን እስኪመልስ ድረስ መገኘቱ ጠፍቷል.

ሁሉም መልእክቶች ከመጠን በላይ መበራከታቸውን ማረጋገጥ የተሻለ ነው, አለበለዚያ ጽሑፉን ያስወግዱ. ከዚያም ቢያንስ ከደላላው እይታ የውሂብ መጥፋት የሚቻለው በአንድ ጊዜ ሁለት ወይም ከዚያ በላይ በሆኑ ውድቀቶች ብቻ ነው።

acks=all፣ min.insync.replicas እና ISR

ከርዕስ ውቅር ጋር min.insync.replicas የውሂብ ደህንነት ደረጃን እንጨምራለን. ያለፈውን ትዕይንት የመጨረሻ ክፍል እንደገና እንሂድ፣ ግን በዚህ ጊዜ min.insync.replicas=2.

ስለዚህ ደላላ 2 የተባዛ መሪ አለው፣ እና በደላላ 3 ላይ ያለው ተከታይ ከአይኤስአር ተወግዷል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 19. የሁለት ቅጂዎች ISR

ደላላ 2 ይወርዳል እና መሪው ወደ ደላላ 1 ያለ መልእክት ሳይጠፋ ይሄዳል። አሁን ግን ISR አንድ ቅጂ ብቻ ይዟል። ይህ ግቤቶችን ለመቀበል አነስተኛውን ቁጥር አያሟላም, እና ስለዚህ ደላላው ለመጻፍ ሙከራ በስህተት ምላሽ ይሰጣል በቂ ቅጂዎች.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 20. ከmin.insync.replicas አንድ ያነሰ የISRዎች ብዛት

ይህ ውቅር ወጥነት ለማግኘት መገኘትን ይከፍላል. መልእክትን ከመቀበላችን በፊት፣ ቢያንስ ለሁለት ቅጂዎች መጻፉን እናረጋግጣለን። ይህ ለአምራቹ የበለጠ በራስ መተማመን ይሰጣል. እዚህ የመልእክት መጥፋት የሚቻለው መልእክቱ ወደ ተጨማሪ ተከታይ እስኪገለጽ ድረስ ሁለት ቅጂዎች በተመሳሳይ ጊዜ ካልተሳኩ ብቻ ነው ይህ የማይመስል ነገር ነው። ነገር ግን ልዕለ ፓራኖይድ ከሆንክ የማባዛት ሁኔታውን ወደ 5 ማቀናበር ትችላለህ min.insync.replicas በ 3. እዚህ ሶስት ደላሎች መዝገቡን ለማጣት በአንድ ጊዜ መውደቅ አለባቸው! እርግጥ ነው, ለእንደዚህ አይነት አስተማማኝነት, ተጨማሪ መዘግየት ይከፍላሉ.

መገኘት ለመረጃ ደህንነት አስፈላጊ በሚሆንበት ጊዜ

እንደ ውስጥ ጉዳይ ከ RabbitMQ ጋር, አንዳንድ ጊዜ ተደራሽነት ለመረጃ ደህንነት አስፈላጊ ነው. ሊታሰብበት የሚገባው ነገር ይኸውና፡-

  • አታሚው በቀላሉ ስህተትን መመለሾ እና የላይ አገልግሎቱ ወይም ተጠቃሚው በኋላ እንደገና እንዲሞክር ማድረግ ይችላል?
  • በኋላ እንደገና ለመሞከር አታሚው መልእክቱን በአገር ውስጥ ወይም በመረጃ ቋቱ ውስጥ ማስቀመጥ ይችላል?

መልሱ የለም ከሆነ፣ ተገኝነትን ማመቻቸት የውሂብ ደህንነትን ያሻሽላል። ካለመጻፍ ይልቅ መገኘትን ከመረጡ ያነሰ ውሂብ ታጣለህ። ስለዚህ, ሁሉም ነገር ሚዛኑን በማግኘት ላይ ነው, እና ውሳኔው በተለየ ሁኔታ ላይ የተመሰረተ ነው.

የ ISR ትርጉም

የአይኤስአር ስብስብ በመረጃ ደህንነት እና በቆይታ መካከል ያለውን ጥሩ ሚዛን እንዲመርጡ ያስችልዎታል። ለምሳሌ፣ አብዛኞቹ ቅጂዎች ካልተሳኩ መገኘቱን ለማረጋገጥ፣ የሞቱ ወይም የዘገየ ቅጂዎች ዘግይተው ከመዘግየታቸው አንጻር የሚያሳድሩትን ተፅእኖ በመቀነስ።

ትርጉሙን እንመርጣለን replica.lag.time.max.ms እንደ ፍላጎቶችዎ. በመሠረቱ፣ ይህ ግቤት ማለት መቼ ለመቀበል ምን አይነት መዘግየት ዝግጁ ነን ማለት ነው። acks=ሁሉም. ነባሪው ዋጋ አስር ሴኮንድ ነው። ይህ ለእርስዎ በጣም ረጅም ከሆነ, መቀነስ ይችላሉ. ከዚያ ተከታዮች ይወገዳሉ እና ብዙ ጊዜ ስለሚጨመሩ በ ISR ውስጥ ያሉ ለውጦች ድግግሞሽ ይጨምራሉ።

RabbitMQ መድገም የሚያስፈልገው የመስታወት ስብስብ ብቻ ነው። ቀርፋፋ መስተዋቶች ተጨማሪ መዘግየትን ያስተዋውቃሉ፣ እና የሞቱ መስተዋቶች የእያንዳንዱን መስቀለኛ መንገድ (የተጣራ ምልክት) መገኘትን የሚፈትሹ የፓኬቶች የህይወት ዘመን እስኪያበቃ ድረስ መጠበቅ ይችላሉ። ISR እነዚህን የመዘግየት ችግሮች ለማስወገድ አስደሳች መንገድ ነው። ነገር ግን ISR ወደ መሪው ብቻ ሊቀንስ ስለሚችል እንደገና የመቀነስ እድልን እናጣለን። ይህንን አደጋ ለማስቀረት ቅንብሩን ይጠቀሙ min.insync.replicas.

የደንበኛ ግንኙነት ዋስትና

በቅንጅቶች ውስጥ bootstrap.አገልጋዮች አምራች እና ሸማች ደንበኞችን ለማገናኘት ብዙ ደላላዎችን መግለጽ ይችላሉ። ሃሳቡ አንድ መስቀለኛ መንገድ ሲወርድ, ደንበኛው ግንኙነት የሚከፍትባቸው በርካታ መለዋወጫ ኖዶች አሉ. እነዚህ የግድ የመከፋፈያ መሪዎች አይደሉም፣ ነገር ግን በቀላሉ የቡት ማሰሪያ የሚሆን ስፕሪንግቦርድ ናቸው። ደንበኛው የትኛው መስቀለኛ መንገድ የማንበብ/የመፃፍ ክፍፍል መሪን እንደሚያስተናግድ ሊጠይቃቸው ይችላል።

በ RabbitMQ ውስጥ ደንበኞች ከማንኛውም መስቀለኛ መንገድ ጋር መገናኘት ይችላሉ፣ እና የውስጥ መስመር ጥያቄውን ወደ ትክክለኛው ቦታ ይልካል። ይህ ማለት በ RabbitMQ ፊት ለፊት የጭነት ሚዛን መጫን ይችላሉ. ካፍካ ደንበኞቹን ተዛማጅ የክፋይ መሪን ከሚያስተናግደው መስቀለኛ መንገድ ጋር እንዲገናኙ ይፈልጋል። በእንደዚህ ዓይነት ሁኔታ, የጭነት ማመሳከሪያው መጫን የለበትም. ዝርዝር bootstrap.አገልጋዮች ደንበኞች ትክክለኛዎቹን አንጓዎች ማግኘት እና ከተሳካ በኋላ ማግኘት መቻላቸው በጣም አስፈላጊ ነው።

የካፍካ የጋራ ስምምነት ሥነ ሕንፃ

እስካሁን ድረስ ክላስተር ስለ ደላላ ውድቀት እና አዲስ መሪ እንዴት እንደሚመረጥ እንዴት እንደሚያውቅ አላሰብንም. ካፍካ ከአውታረ መረብ ክፍልፋዮች ጋር እንዴት እንደሚሰራ ለመረዳት በመጀመሪያ የጋራ ስምምነትን ንድፍ መረዳት ያስፈልግዎታል።

እያንዳንዱ የካፍካ ክላስተር ከ Zookeeper ክላስተር ጋር ተዘርግቷል፣ ይህም ስርአቱ በተወሰኑ ግዛቶች ላይ መግባባት ላይ እንዲደርስ የሚያስችለው የተከፋፈለ የጋራ ስምምነት አገልግሎት ሲሆን ከተገኝነት ይልቅ ወጥነት እንዲኖረው ቅድሚያ ይሰጣል። የማንበብ እና የመጻፍ ስራዎችን ማጽደቅ የአብዛኞቹ Zookeeper ኖዶች ፈቃድ ያስፈልገዋል።

Zookeeper የክላስተርን ሁኔታ ያከማቻል፡-

  • የርእሶች ዝርዝር፣ ክፍሎች፣ ውቅር፣ የአሁን መሪ ቅጂዎች፣ ተመራጭ ቅጂዎች።
  • የክላስተር አባላት። እያንዳንዱ ደላላ ወደ Zookeeper ክላስተር ፒንግ ያደርጋል። በተወሰነ ጊዜ ውስጥ ፒንግ ካልተቀበለ፣ Zookeeper ደላሉን እንደማይገኝ ይመዘግባል።
  • ለተቆጣጣሪው ዋና እና መለዋወጫ ኖዶች ምርጫ።

የመቆጣጠሪያው መስቀለኛ መንገድ የብዜት መሪዎችን የመምረጥ ሃላፊነት ከሚወስዱት የካፍካ ደላሎች አንዱ ነው። Zookeeper የክላስተር አባልነት እና የርዕስ ለውጦች ማሳወቂያዎችን ወደ መቆጣጠሪያው ይልካል፣ እና ተቆጣጣሪው በእነዚህ ለውጦች ላይ መስራት አለበት።

ለምሳሌ አስር ክፍልፋዮች ያለው እና 3 የማባዛት ሁኔታ ያለው አዲስ ርዕስ እንውሰድ። ተቆጣጣሪው መሪዎቹን በደላሎች መካከል በጥሩ ሁኔታ ለማከፋፈል እየሞከረ የእያንዳንዱን ክፍል መሪ መምረጥ አለበት።

ለእያንዳንዱ ክፍል ተቆጣጣሪ;

  • በ Zookeeper ውስጥ ሾለ አይኤስአር እና መሪ መረጃን ያሻሽላል;
  • የዚህን ክፍል ቅጂ ለሚያስተናግደው ለእያንዳንዱ ደላላ LeaderAndISRCommand ይልካል፣ለአይኤስአር ደላሎች እና መሪውን ያሳውቃል።

መሪ ያለው ደላላ ሲወርድ፣ Zookeeper ለተቆጣጣሪው ማሳወቂያ ይልካል፣ እና ተቆጣጣሪው አዲስ መሪ ይመርጣል። እንደገና፣ ተቆጣጣሪው መጀመሪያ Zookeeperን ያዘምናል ከዚያም ለእያንዳንዱ ደላላ የአመራሩን ለውጥ የሚያሳውቅ ትዕዛዝ ይልካል።

እያንዳንዱ መሪ ለአይኤስአር ስብስብ ተጠያቂ ነው። በማቀናበር ላይ replica.lag.time.max.ms ማን እንደሚገባ ይወስናል። ISR ሲቀየር መሪው አዲሱን መረጃ ወደ Zookeeper ይልካል።

የአራዊት ጠባቂ ሁል ጊዜ ስለማንኛውም ለውጦች ይነገራቸዋል ስለዚህ ውድቀት በሚከሰትበት ጊዜ አመራር ያለምንም ችግር ወደ አዲስ መሪ ይሸጋገራል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 21. ካፍካ ስምምነት

የማባዛት ፕሮቶኮል

የማባዛት ዝርዝሮችን መረዳት የውሂብ መጥፋት ሊሆኑ የሚችሉ ሁኔታዎችን በተሻለ ለመረዳት ይረዳዎታል።

መጠይቆችን ይምረጡ፣ Log End Offset (LEO) እና Highwater Mark (HW)

ተከታዮች በየጊዜው ወደ መሪው የማምጣት ጥያቄዎችን እንደሚልኩ ተመልክተናል። ነባሪው የጊዜ ክፍተት 500ms ነው። ይህ ከ RabbitMQ የሚለየው በ RabbitMQ ማባዛት የሚጀመረው በወረፋ መስታወት ሳይሆን በጌታ ነው። ማስተር ለውጦችን ወደ መስተዋቶች ይገፋፋል።

መሪው እና ሁሉም ተከታዮች Log End Offset (LEO) እና የሃይውዋተር (HW) መለያን ይዘው ይቆያሉ። የLEO ምልክት የመጨረሻውን መልእክት ማካካሻ በአካባቢያዊ ቅጂ እና HW ደግሞ የመጨረሻውን ቃል ማካካሻ ያከማቻል። ለ"ቁርጠኝነት" ሁኔታ መልእክቱ በሁሉም የአይኤስአርኤስ ላይ መቆየት እንዳለበት ያስታውሱ። ይህ ማለት LEO ብዙውን ጊዜ ከHW ትንሽ ይቀድማል።

መሪው መልእክት ሲደርሰው በአካባቢው ያስቀምጣል። ተከታዩ የእነሱን LEO በመላክ የማምጣት ጥያቄ ያቀርባል። መሪው ከዚህ LEO የሚጀምር መልእክት ፓኬት ይልካል እና እንዲሁም የአሁኑን HW ያስተላልፋል። መሪው ሁሉም ቅጂዎች መልእክቱን በተሰጠው ማካካሻ ላይ ያስቀመጧቸውን መረጃዎች ሲቀበሉ, የ HW ምልክትን ያንቀሳቅሳል. መሪው ብቻ HW ን ማንቀሳቀስ ይችላል፣ እና ስለዚህ ሁሉም ተከታዮች ለጥያቄያቸው ምላሽ የአሁኑን ዋጋ ያውቃሉ። ይህ ማለት ተከታዮች በሪፖርቶችም ሆነ በHW እውቀት ከመሪው ጀርባ ሊሆኑ ይችላሉ። ሸማቾች እስከ አሁኑ HW ድረስ መልዕክቶችን ይቀበላሉ።

"የቀጠለ" ማለት በዲስክ ላይ ሳይሆን ወደ ማህደረ ትውስታ የተጻፈ መሆኑን ልብ ይበሉ. ለአፈፃፀም, ካፍካ በተወሰነ የጊዜ ክፍተት ከዲስክ ጋር ያመሳስላል. RabbitMQ እንዲሁ እንዲህ ያለ ክፍተት አለው, ነገር ግን ጌታው እና ሁሉም መስተዋቶች መልእክቱን ወደ ዲስክ ከጻፉ በኋላ ለአሳታሚው ማረጋገጫ ብቻ ይልካል. የካፍካ ገንቢዎች በአፈፃፀም ምክንያቶች መልእክቱ ወደ ማህደረ ትውስታ እንደተጻፈ ወዲያውኑ ack ለመላክ ወሰኑ። ካፍካ እንደገና መታደስ እውቅና የተሰጣቸውን መልዕክቶች በማህደረ ትውስታ ውስጥ ብቻ ለአጭር ጊዜ የማከማቸት አደጋን እንደሚያካክስ ውርርድ ነው።

መሪ ውድቀት

መሪ ሲወድቅ፣ Zookeeper ተቆጣጣሪውን ያሳውቃል፣ እና ተቆጣጣሪው አዲስ የመሪ ቅጂ ይመርጣል። አዲሱ መሪ በእሱ ሊዮ መሰረት አዲስ የHW ምልክት ያዘጋጃል። ከዚያ ተከታዮች ስለ አዲሱ መሪ መረጃ ይቀበላሉ. በካፍካ ስሪት ላይ በመመስረት ተከታዩ ከሁለት ሁኔታዎች ውስጥ አንዱን ይመርጣል፡-

  1. የአከባቢን ምዝግብ ማስታወሻ ወደ የታወቀ HW ይቁረጡ እና ከዚያ ምልክት በኋላ ለአዲሱ መሪ የመልእክት ጥያቄ ይላኩ።
  2. መሪው መሪ በተመረጡበት ጊዜ ኤች.አይ.ቪን ለማወቅ ጥያቄን ይልካል፣ እና ምዝግብ ማስታወሻውን ወደዚህ ማካካሻ ይቆርጠዋል። ከዚያ ማካካሻ ጀምሮ በየጊዜው የማምጣት ጥያቄዎችን ማድረግ ይጀምራል።

ተከታይ በሚከተሉት ምክንያቶች መዝገቡን መቁረጥ ሊያስፈልገው ይችላል።

  • አንድ መሪ ​​ሳይሳካ ሲቀር፣ በ Zookeeper የተመዘገበው በ ISR ስብስብ ውስጥ የመጀመሪያው ተከታይ ምርጫውን ያሸንፋል እና መሪ ይሆናል። በ ISR ውስጥ ያሉ ሁሉም ተከታዮች፣ ምንም እንኳን "የተመሳሰሉ" ተብለው ቢቆጠሩም፣ ከቀድሞው መሪ የሁሉም መልዕክቶች ቅጂ ላይደርሱ ይችላሉ። ምናልባት የተመረጠው ተከታይ በጣም ወቅታዊ ቅጂ የለውም. ካፍካ በቅጂዎች መካከል ምንም ልዩነት እንደሌለ ዋስትና ይሰጣል. ስለዚህ፣ ልዩነቶችን ለማስወገድ፣ እያንዳንዱ ተከታይ በሚመረጥበት ወቅት የአዲሱን መሪ የኤች.አይ.ቪ. እሴት ላይ መቆራረጥ አለበት። ይህ ሌላ ምክንያት ነው መቼት acks=ሁሉም ለ ወጥነት በጣም አስፈላጊ።
  • መልእክቶች በየጊዜው ወደ ዲስክ ይጻፋሉ. ሁሉም የክላስተር ኖዶች በተመሳሳይ ጊዜ ካልተሳኩ የተለያዩ ማካካሻዎች ያላቸው ቅጂዎች በዲስኮች ላይ ይቀራሉ። ደላሎቹ ወደ ኦንላይን ሲመለሹ አዲሱ መሪ የሚመረጠው ከተከታዮቻቸው ጀርባ ሊሆን ይችላል ምክንያቱም እሱ ከሌሎቹ በፊት በዲስክ የዳነ ነው ።

የክላስተር ዳግም መገናኘት

ክላስተርን እንደገና በሚቀላቀሉበት ጊዜ ቅጂዎቹ መሪው ሳይሳካ ሲቀር ተመሳሳይ ነገር ያደርጋሉ፡ የመሪውን ቅጂ ይፈትሹ እና ምዝግብ ማስታወሻቸውን ወደ HW (በምርጫ ጊዜ) ይቆርጣሉ። በንጽጽር፣ RabbitMQ እንደገና የተቀላቀሉትን አንጓዎች እንደ አዲስ ይመለከታቸዋል። በሁለቱም ሁኔታዎች ደላላው ማንኛውንም ነባር ሁኔታ ይጥላል። አውቶማቲክ ማመሳሰል ጥቅም ላይ ከዋለ፣ ጌታው ሁሉንም ወቅታዊ ይዘቶች በ"እና አለም ይጠብቅ" በሚለው መንገድ ወደ አዲሱ መስታወት ማባዛት አለበት። በዚህ ቀዶ ጥገና ወቅት ጌታው ምንም አይነት የማንበብ እና የመፃፍ ስራዎችን አይቀበልም. ይህ አካሄድ በትላልቅ ወረፋዎች ላይ ችግር ይፈጥራል።

ካፍካ የተከፋፈለ ምዝግብ ማስታወሻ ነው, እና በአጠቃላይ ከ RabbitMQ ወረፋ የበለጠ መልዕክቶችን ያከማቻል, መረጃው ከተነበበ በኋላ ከወረፋው ይወገዳል. ንቁ ወረፋዎች በአንጻራዊ ሁኔታ ትንሽ ሆነው መቆየት አለባቸው። ነገር ግን ካፍካ የራሱ የማቆያ ፖሊሲ ያለው ምዝግብ ማስታወሻ ነው፣ ይህም የማለቂያ ቀንን ወደ ቀናት ወይም ሳምንታት ሊያዘጋጅ ይችላል። ወረፋውን ከመዝጋት እና ሙሉ ማመሳሰል ጋር ያለው አካሄድ ለተከፋፈለ ምዝግብ ማስታወሻ በፍጹም ተቀባይነት የለውም። ይልቁንም የካፍካ ተከታዮች ግልባጫቸው ከመሪው የሚቀድም ከሆነ በቀላሉ ሎግያቸውን ለመሪው HW (በምርጫ ወቅት) ይቆርጣሉ። በጣም በሚገርም ሁኔታ፣ ተከታዩ ከኋላ ሲሆን፣ በቀላሉ አሁን ካለው LEO ጀምሮ የማምጣት ጥያቄዎችን ማድረግ ይጀምራል።

አዲስ ወይም የተገናኙት ተከታዮች ከአይኤስአር ውጭ ይጀምራሉ እና በቁርጠኝነት አይሳተፉም። ልክ ከቡድኑ ጋር አብረው ይሰራሉ ​​መሪውን እስኪያገኙ እና ወደ አይኤስአር እስኪገቡ ድረስ በተቻለ ፍጥነት መልዕክቶችን ይደርሳሉ። ምንም እገዳ የለም እና ሁሉንም ውሂብዎን መጣል አያስፈልግም.

የግንኙነት መቋረጥ

ካፍካ ከ RabbitMQ የበለጠ ክፍሎች አሉት፣ ስለዚህ ተያያዥነት በክላስተር ውስጥ ሲበላሽ የበለጠ የተወሳሰበ ባህሪ አለው። ነገር ግን ካፍካ በመጀመሪያ የተነደፈው ለክላስተሮች ነው, ስለዚህ መፍትሄዎች በጣም የታሰቡ ናቸው.

ለግንኙነት ውድቀት ጥቂት ሁኔታዎች የሚከተሉት ናቸው።

  • ሁኔታ 1. ተከታዩ መሪውን አያይም, ነገር ግን አሁንም የእንስሳት ጠባቂውን ያያል.
  • ሁኔታ 2. መሪው ምንም ተከታዮችን አያይም, ነገር ግን አሁንም የ Zookeeper ን ይመለከታል.
  • ሁኔታ 3. ተከታዩ መሪውን ያያል, ነገር ግን የእንስሳት ጠባቂውን አያይም.
  • ሁኔታ 4. መሪው ተከታዮቹን ይመለከታል, ነገር ግን የእንስሳት ጠባቂውን አያይም.
  • ሁኔታ 5፡ ተከታዩ ከሁለቱም የካፍካ ኖዶች እና ከዙር ጠባቂዎች ፈጽሞ የተለየ ነው።
  • ሁኔታ 6፡ መሪው ከሁለቱም የካፍካ ኖዶች እና ከ Zookeeper ሙሉ በሙሉ ተለያይቷል።
  • ሁኔታ 7፡ የካፍካ መቆጣጠሪያ መስቀለኛ መንገድ ሌላ የካፍ ኖድ ማየት አይችልም።
  • ሁኔታ 8፡ የካፍካ መቆጣጠሪያ Zookeeperን አያይም።

እያንዳንዱ ሁኔታ የራሱ ባህሪ አለው።

ሁኔታ 1. ተከታዩ መሪውን አያይም, ግን አሁንም የእንስሳት ጠባቂውን ያያል

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 22. ሁኔታ 1. የሶስት ቅጂዎች ISR

ግንኙነቱ መቋረጡ ደላላ 3ን ከደላላ 1 እና 2 የሚለየው ግን ከ Zookeeper አይደለም። ደላላ 3 ከአሁን በኋላ የማምጣት ጥያቄዎችን መላክ አይችልም። ጊዜው ካለፈ በኋላ replica.lag.time.max.ms ከአይኤስአር ይወገዳል እና በመልእክት ድርጊቶች ውስጥ አይሳተፍም። አንዴ ግንኙነቱ ከተመለሰ፣የጥያቄዎችን ማምጣት ይቀጥላል እና መሪውን ሲያገኝ አይኤስአርን ይቀላቀላል። Zookeeper ፒንግ ማግኘቱን ይቀጥላል እና ደላላው በህይወት እንዳለ እና ደህና እንደሆነ ይገምታል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 23. ሁኔታ 1፡ ደላላ ምንም የማምጣት ጥያቄ ካልደረሰበት ከአይኤስአር ይወገዳል replica.lag.time.max.ms interval

እንደ RabbitMQ ያለ ምንም ምክንያታዊ የተከፈለ-አንጎል ወይም የአንጓ መታገድ የለም። በምትኩ, ተደጋጋሚነት ይቀንሳል.

ሁኔታ 2. መሪው ምንም ተከታዮችን አያይም, ነገር ግን አሁንም የ Zookeeper ን ይመለከታል

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 24. ሁኔታ 2. መሪ እና ሁለት ተከታዮች

የአውታረ መረብ ግንኙነት አለመሳካቱ መሪውን ከተከታዮቹ ይለያል፣ ነገር ግን ደላላው አሁንም Zookeeperን ያያል። እንደ መጀመሪያው ሁኔታ፣ አይኤስአር ይቀንሳል፣ ነገር ግን ሁሉም ተከታዮች የማምጣት ጥያቄዎችን መላክ ሲያቆሙ በዚህ ጊዜ ለመሪው ብቻ። እንደገና, ምንም ምክንያታዊ መለያየት የለም. ይልቁንስ ግንኙነቱ ወደነበረበት እስኪመለስ ድረስ ለአዲስ መልእክት የመደጋገፍ መጥፋት አለ። Zookeeper ፒንግ ማግኘቱን ቀጥሏል እና ደላላው በህይወት እንዳለ እና ደህና እንደሆነ ያምናል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 25. ሁኔታ 2. ISR ወደ መሪው ብቻ ይቀንሳል

ሁኔታ 3. ተከታዩ መሪውን ያያል, ነገር ግን የእንስሳት ጠባቂውን አያይም

ተከታዩ ከ Zookeeper ተለያይቷል, ነገር ግን ከመሪው ጋር ካለው ደላላው አይደለም. በውጤቱም፣ ተከታዩ ጥያቄ ማቅረቡን እና የአይኤስአር አባል መሆን ይቀጥላል። Zookeeper ከአሁን በኋላ ፒንግን አይቀበልም እና ደላሉን አይመዘግብም ፣ ግን ይህ ተከታይ ብቻ ስለሆነ ፣ ከማገገም በኋላ ምንም ውጤቶች የሉም።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 26. ሁኔታ 3. ተከታዩ ለመሪው የማምጣት ጥያቄዎችን መላክ ይቀጥላል

ሁኔታ 4. መሪው ተከታዮቹን ይመለከታል, ነገር ግን የእንስሳት ጠባቂውን አያይም

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 27. ሁኔታ 4. መሪ እና ሁለት ተከታዮች

መሪው ከ Zookeeper ተለያይቷል, ነገር ግን ተከታዮች ካላቸው ደላሎች አይደለም.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 28. ሁኔታ 4. ከ Zookeeper የተነጠለ መሪ

ከተወሰነ ጊዜ በኋላ፣ Zookeeper የደላሉን ውድቀት ይመዘግባል እና ለተቆጣጣሪው ያሳውቃል። በተከታዮቹ መካከል አዲስ መሪ ይመርጣል። ሆኖም ግን, ዋናው መሪ እሱ መሪ እንደሆነ ማሰቡን ይቀጥላል እና ግቤቶችን መቀበል ይቀጥላል acks=1. ተከታዮች ከአሁን በኋላ የማምጣት ጥያቄዎችን ወደ እሱ አይልኩም፣ ስለዚህ እንደሞቱ ይቆጥረዋል እና ISR ን በራሱ ለመጭመቅ ይሞክራል። ነገር ግን ከ Zookeeper ጋር ግንኙነት ስለሌለው፣ ይህን ማድረግ አይችልም፣ እና በዛን ጊዜ ተጨማሪ ግቤቶችን ለመቀበል ፈቃደኛ አይሆንም።

መልዕክቶች acks=ሁሉም ማረጋገጫ አይቀበልም, ምክንያቱም በመጀመሪያ ISR ሁሉንም ቅጂዎች ያበራል, እና መልዕክቶች አይደርሱባቸውም. ዋናው መሪ እነሱን ከአይኤስአር ለማስወገድ ሲሞክር ይህን ማድረግ አይችልም እና ምንም አይነት መልእክት መቀበል ያቆማል።

ደንበኞች በቅርቡ የመሪውን ለውጥ ያስተውላሉ እና መዝገቦችን ወደ አዲሱ አገልጋይ መላክ ይጀምራሉ። አውታረ መረቡ አንዴ ከተመለሰ፣ ዋናው መሪ መሪው እንዳልሆነ አይቶ አዲሱ መሪ የሎግ ልዩነትን ለማስወገድ ባልተሳካለት ጊዜ የነበረውን ሎግ ወደ HW እሴት ይቆርጣል። ከዚያ ወደ አዲሱ መሪ የማምጣት ጥያቄዎችን መላክ ይጀምራል። ለአዲሱ መሪ ያልተደገሙ የዋናው መሪ መዛግብት ጠፍተዋል። ማለትም፣ ሁለት መሪዎች ሲሰሩ በነበሩት ጥቂት ሰከንዶች ውስጥ በዋናው መሪ እውቅና ያልተሰጣቸው መልእክቶች ይጠፋሉ።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 29. ሁኔታ 4. በደላላ 1 ላይ ያለው መሪ አውታረ መረቡ ከተመለሰ በኋላ ተከታይ ይሆናል.

ሁኔታ 5፡ ተከታዩ ከሁለቱም የካፍካ ኖዶች እና ከዙር ጠባቂዎች ፈጽሞ የተለየ ነው።

ተከታዩ ከሁለቱም ከካፍካ ኖዶች እና ከ Zookeeper ሙሉ በሙሉ ተለይቷል። አውታረ መረቡ እስኪመለስ ድረስ በቀላሉ ከአይኤስአር ይወገዳል እና ከዚያ የቀረውን ይይዛል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 30. ሁኔታ 5. ገለልተኛ ተከታይ ከአይኤስአር ተወግዷል

ሁኔታ 6፡ መሪው ከሁለቱም የካፍካ ኖዶች እና የእንስሳት ጠባቂዎች ሙሉ በሙሉ ተለያይቷል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 31. ሁኔታ 6. መሪ እና ሁለት ተከታዮች

መሪው ከተከታዮቹ፣ ተቆጣጣሪው እና ዙ ጠባቂው ሙሉ በሙሉ የተገለለ ነው። ለአጭር ጊዜ፣ ከ ግቤቶችን መቀበል ይቀጥላል acks=1.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 32. ሁኔታ 6. መሪ ከሌሎች የካፍካ እና የእንስሳት ጠባቂ ኖዶች መገለል

ጊዜው ካለፈ በኋላ ጥያቄዎችን አለመቀበል replica.lag.time.max.ms, ISR ን በራሱ ለመጭመቅ ይሞክራል, ነገር ግን ይህን ማድረግ አይችልም ምክንያቱም ከ Zookeeper ጋር ምንም ግንኙነት ስለሌለ, ከዚያም ጽሁፎችን መቀበል ያቆማል.

ይህ በእንዲህ እንዳለ፣ Zookeeper ገለልተኛውን ደላላ እንደሞተ ይጠቁማል እና ተቆጣጣሪው አዲስ መሪ ይመርጣል።

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 33. ሁኔታ 6. ሁለት መሪዎች

ዋናው መሪ ለጥቂት ሰከንዶች ያህል ጽሁፎችን ሊቀበል ይችላል, ነገር ግን ከዚያ ማንኛውንም መልእክት መቀበል ያቆማል. ደንበኞች በየ 60 ሰከንድ በአዲሱ ሜታዳታ ይዘመናሉ። ስለ መሪው ለውጥ ይነገራቸዋል እና ለአዲሱ መሪ መዝገቦችን መላክ ይጀምራሉ.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 34. ሁኔታ 6. አምራቾች ወደ አዲስ መሪ ይቀየራሉ

የግንኙነት መጥፋት ከጠፋ በኋላ በዋናው መሪ የተደረጉ ሁሉም እውቅና የተሰጣቸው መዛግብቶች ይጠፋሉ። አንዴ አውታረ መረቡ ከተመለሰ፣ ዋናው መሪ እሱ እንዳልሆነ በ Zookeeper በኩል ይገነዘባል። ከዚያም በምርጫው ወቅት ምዝግብ ማስታወሻውን ወደ አዲሱ መሪ HW ይቆርጣል እና እንደ ተከታይ ጥያቄዎችን መላክ ይጀምራል.

RabbitMQ vs. Kafka፡ የስህተት መቻቻል እና ከፍተኛ ተገኝነት
ሩዝ. 35. ሁኔታ 6. የአውታረ መረብ ግንኙነት ከተመለሰ በኋላ ዋናው መሪ ተከታይ ይሆናል

በዚህ ሁኔታ, ምክንያታዊ መለያየት ለአጭር ጊዜ ሊታይ ይችላል, ግን ከሆነ acks=1 и min.insync.replicas እንዲሁም 1. አመክንዮአዊ መለያየት በራስ-ሰር ይጠናቀቃል ወይ አውታረ መረቡ ከተመለሰ በኋላ ፣ ዋናው መሪ እሱ መሪ አለመሆኑን ሲያውቅ ፣ ወይም ሁሉም ደንበኞች መሪው እንደተቀየረ ሲረዱ እና ለአዲሱ መሪ መጻፍ ሲጀምሩ - የትኛውም መጀመሪያ ይከሰታል። . በማንኛውም ሁኔታ, አንዳንድ መልዕክቶች ይጠፋሉ, ግን በ ብቻ acks=1.

የዚህ ትዕይንት ሌላ ዓይነት አለ፣ አውታረ መረቡ ከመከፋፈሉ በፊት፣ ተከታዮቹ ወደ ኋላ ወድቀው መሪው ISR ን ለራሱ የጨመቀበት። ከዚያም በግንኙነት ማጣት ምክንያት ተለይቷል. አዲስ መሪ ተመርጧል፣ ነገር ግን ዋናው መሪ እንኳን ሳይቀር ግቤቶችን መቀበሉን ይቀጥላል acks=ሁሉም, ምክንያቱም በ ISR ውስጥ ከእሱ በስተቀር ሌላ ማንም የለም. እነዚህ መዝገቦች አውታረ መረቡ ከተመለሰ በኋላ ይጠፋሉ. ይህንን አማራጭ ለማስወገድ ብቸኛው መንገድ min.insync.replicas = 2.

ሁኔታ 7፡ የካፍካ መቆጣጠሪያ ኖድ ሌላ የካፍ ኖድ ማየት አይችልም።

በአጠቃላይ, ከካፍካ መስቀለኛ መንገድ ጋር ግንኙነት ከጠፋ በኋላ, ተቆጣጣሪው ስለ መሪው ለውጥ ምንም አይነት መረጃ መላክ አይችልም. በጣም በከፋ ሁኔታ ይህ ለአጭር ጊዜ አመክንዮአዊ መለያየት ያመራል፣ እንደ ሁኔታው ​​6. ብዙ ጊዜ፣ ደላላው በቀላሉ የኋለኛው ውድቀት ሲከሰት የአመራር እጩ አይሆንም።

ሁኔታ 8፡ የካፍካ መቆጣጠሪያ Zookeeperን አያይም።

ከወደቀው ተቆጣጣሪ፣ Zookeeper ፒንግ አይቀበልም እና እንደ ተቆጣጣሪው አዲስ የካፍ ኖድ ይመርጣል። ዋናው ተቆጣጣሪው ራሱን በዚህ መልኩ ማቅረቡ ሊቀጥል ይችላል ነገርግን ከ Zookeeper ማሳወቂያ አይደርሰውም ስለዚህ ምንም የሚያከናውናቸው ተግባራት አይኖረውም። አውታረ መረቡ እንደተመለሰ ወዲያውኑ ተቆጣጣሪ አለመሆኑን ይገነዘባል, ነገር ግን መደበኛ የካፍ ኖድ ሆኗል.

ከስክሪፕቶች የተወሰደ

የተከታዮች ግንኙነት መጥፋት የጠፉ መልዕክቶችን እንደማያስከትል፣ ነገር ግን አውታረ መረቡ እስኪያገግም ድረስ ለጊዜው ድጋሚነትን እንደሚቀንስ እናያለን። ይህ በእርግጥ አንድ ወይም ከዚያ በላይ አንጓዎች ከጠፉ የውሂብ መጥፋት ሊያስከትል ይችላል.

መሪው በግንኙነት ማጣት ምክንያት ከ Zookeeper ከተለየ, ይህ ወደ መልእክቶች መጥፋት ሊያመራ ይችላል acks=1. ከእንስሳት ጠባቂው ጋር አለመግባባት ከሁለት መሪዎች ጋር ለአፍታ የሎጂክ መለያየትን ያስከትላል። መለኪያው ይህንን ችግር ይፈታል acks=ሁሉም.

መለኪያ min.insync.replicas ወደ ሁለት ወይም ከዚያ በላይ ቅጂዎች እንደዚህ አይነት የአጭር ጊዜ ሁኔታዎች ወደ መልእክት መጥፋት እንደማይመሩ ተጨማሪ ዋስትና ይሰጣል፣ እንደ ሁኔታው ​​6።

የመልእክት ማጣት ማጠቃለያ

በካፍካ ውስጥ ውሂብን እንዴት እንደሚያጡ ሁሉንም መንገዶች እንዘረዝራለን-

  • መልእክቶች ተቀባይነት ካገኙ የትኛውም የመሪ ውድቀት acks=1
  • ማንኛውም ንፁህ ያልሆነ የአመራር ሽግግር፣ ማለትም ከአይኤስአር ውጭ ላለ ተከታይ፣ ከዚ ጋርም ቢሆን acks=ሁሉም
  • መልእክቶች ተቀባይነት ካገኙ መሪን ከ Zookeeper ያውጡ acks=1
  • ቀድሞውኑ የ ISR ቡድንን ለልሹ ያጨመቀው መሪ ሙሉ ለሙሉ ማግለል. ሁሉም መልእክቶች ይጠፋሉ። acks=ሁሉም. ይህ እውነት ከሆነ ብቻ ነው። min.insync.replicas=1.
  • በክፋዩ ውስጥ ያሉ የሁሉም አንጓዎች በተመሳሳይ ጊዜ አለመሳካቶች። መልእክቶች ከማህደረ ትውስታ ስለሚታወቁ፣ አንዳንዶቹ ገና ወደ ዲስክ ላይጻፉ ይችላሉ። አገልጋዮቹን እንደገና ካስጀመሩ በኋላ አንዳንድ መልዕክቶች ሊጎድሉ ይችላሉ።

ንፁህ ያልሆኑ የአመራር ሽግግሮች እነሱን በመከልከል ወይም ቢያንስ ሁለት ተጨማሪ ጊዜዎችን በማቅረብ ማስቀረት ይቻላል። በጣም ጠንካራው ውቅር ጥምረት ነው acks=ሁሉም и min.insync.replicas ከ 1 በላይ.

የ RabbitMQ እና የካፍካ አስተማማኝነት ቀጥተኛ ንጽጽር

አስተማማኝነትን እና ከፍተኛ ተገኝነትን ለማረጋገጥ, ሁለቱም የመሳሪያ ስርዓቶች የመጀመሪያ እና ሁለተኛ ደረጃ የማባዛት ስርዓትን ተግባራዊ ያደርጋሉ. ሆኖም፣ RabbitMQ የአኪሌስ ተረከዝ አለው። ከተሳካ በኋላ እንደገና ሲገናኙ አንጓዎች ውሂባቸውን ይጥላሉ እና ማመሳሰል ታግዷል። ይህ ድርብ ወረፋ በ RabbitMQ ውስጥ የትላልቅ ወረፋዎችን ረጅም ዕድሜ ጥያቄ ውስጥ ይጥላል። የተቀነሰ ድግግሞሽ ወይም የረጅም ጊዜ መቆለፊያዎችን መታገስ ይኖርብዎታል። ድግግሞሽን መቀነስ ከፍተኛ የውሂብ መጥፋት አደጋን ይጨምራል። ነገር ግን ወረፋዎቹ ትንሽ ከሆኑ, ከዚያም ተጨማሪ ክፍያ ለማቅረብ, አጭር ጊዜዎችን (ጥቂት ሴኮንዶችን) ያለመኖርን የግንኙነት ሙከራዎችን በመጠቀም ማስተናገድ ይቻላል.

በካፍካ ውስጥ እንደዚህ አይነት ችግር የለም. መረጃን የሚጥለው በመሪው እና በተከታዩ መካከል ካለው ልዩነት ነጥብ ብቻ ነው። ሁሉም አጠቃላይ መረጃዎች ተቀምጠዋል። በተጨማሪም ማባዛት ስርዓቱን አያግደውም. መሪው አዲሱ ተከታይ በሚይዝበት ጊዜ መዝገቦችን መቀበልን ይቀጥላል፣ስለዚህ ደጋፊዎች ክላስተርን መቀላቀል ወይም መቀላቀል ቀላል ስራ ይሆናል። እርግጥ ነው, በሚባዙበት ጊዜ እንደ የአውታረ መረብ ፍሰት የመሳሰሉ አሁንም ችግሮች አሉ. ብዙ ተከታዮች በተመሳሳይ ጊዜ ከተጨመሩ የመተላለፊያ ይዘት ገደብ ሊያጋጥሙዎት ይችላሉ።

በአንድ ክላስተር ውስጥ ያሉ ብዙ አገልጋዮች በተመሳሳይ ጊዜ ሲሳኩ RabbitMQ ካፍካ በአስተማማኝነቱ ይበልጣል። ቀደም ሲል እንደተናገርነው RabbitMQ ለአሳታሚው ማረጋገጫ ይልካል መልእክቱ በዲስክ ላይ በጌታ እና በሁሉም መስተዋቶች ላይ ከተጻፈ በኋላ ብቻ ነው. ግን ይህ በሁለት ምክንያቶች ተጨማሪ መዘግየትን ይጨምራል።

  • በየጥቂት መቶ ሚሊሰከንዶች fsync
  • የመስታወት አለመሳካት ሊታወቅ የሚችለው የእያንዳንዱን መስቀለኛ መንገድ (የተጣራ ምልክት) መኖርን የሚፈትሹ ፓኬቶች የህይወት ዘመን ካለፉ በኋላ ነው። መስተዋቱ ከቀዘቀዘ ወይም ከወደቀ, መዘግየትን ይጨምራል.

ካፍካ መልእክት በበርካታ ኖዶች ላይ ከተከማቸ፣ መልእክቶች በማህደረ ትውስታ ውስጥ እንዳሉ እውቅና ሊያገኙ እንደሚችሉ እያወራ ነው። በዚህ ምክንያት ማንኛውንም አይነት መልዕክቶችን የማጣት አደጋ አለ (እንዲያውም acks=ሁሉም, min.insync.replicas=2) በአንድ ጊዜ አለመሳካት.

በአጠቃላይ ካፍካ የላቀ የሶፍትዌር አፈጻጸም ያሳያል እና በመጀመሪያ ለክላስተሮች የተነደፈ ነው። ለታማኝነት አስፈላጊ ከሆነ የተከታዮቹን ቁጥር ወደ 11 ከፍ ማድረግ ይቻላል. የማባዛት ሁኔታ 5 እና የተመሳሰለው አነስተኛ የተባዛ ብዛት min.insync.replicas=3 የመልእክት መጥፋት በጣም ያልተለመደ ክስተት ያድርጉት። የእርስዎ መሠረተ ልማት ይህንን የማባዛት ሁኔታ እና የመድገም ደረጃ ለማቅረብ የሚችል ከሆነ ይህን አማራጭ መምረጥ ይችላሉ።

RabbitMQ ስብስብ ለአነስተኛ ወረፋዎች ጥሩ ነው። ነገር ግን ትናንሽ ወረፋዎች በከባድ ትራፊክ በፍጥነት ማደግ ይችላሉ. አንዴ ወረፋዎቹ ትልቅ ሲሆኑ፣ በተገኝነት እና በአስተማማኝ መካከል ጥብቅ ምርጫ ማድረግ ይኖርብዎታል። የ RabbitMQ ክላስተር ማሰባሰብ የ RabbitMQ የመተጣጠፍ ጥቅማጥቅሞች ከየትኛውም የክላስተር ጉዳቱ የሚያመዝን ለሆኑ ብዙም ያልተለመዱ ሁኔታዎች ተስማሚ ነው።

ለ RabbitMQ ትልቅ ወረፋ ተጋላጭነት አንዱ መድሀኒት ወደ ብዙ ትናንሽ ወረፋዎች መከፋፈል ነው። የጠቅላላውን ወረፋ ሙሉ ቅደም ተከተል ካልፈለጉ ፣ ግን ተጓዳኝ መልእክቶች ብቻ (ለምሳሌ ፣ ከአንድ የተወሰነ ደንበኛ መልእክት) ፣ ወይም ምንም ፣ ከዚያ ይህ አማራጭ ተቀባይነት ያለው ነው-ፕሮጀክቴን ይመልከቱ። መልሶ ማመጣጠን ወረፋውን ለመከፋፈል (ፕሮጀክቱ ገና በመጀመርያ ደረጃ ላይ ነው).

በመጨረሻም፣ በሁለቱም የ RabbitMQ እና Kafka ስብስብ እና ማባዛት ውስጥ ስላሉት በርካታ ስህተቶች አይርሱ። ከጊዜ በኋላ ስርአቶች የበለጠ የበሰሉ እና የተረጋጉ ሆነዋል፣ ነገር ግን የትኛውም መልእክት ከመጥፋቱ 100% ደህንነቱ የተጠበቀ ነው! በተጨማሪም በመረጃ ማዕከሎች ውስጥ መጠነ ሰፊ አደጋዎች ይከሰታሉ!

የሆነ ነገር ካመለጠኝ፣ ከተሳሳትኩ ወይም በአንዳቸውም ካልተስማማህ አስተያየት ለመጻፍ ነፃነት ይሰማህ ወይም አግኘኝ።

ብዙ ጊዜ እጠይቃለሁ: "ምን መምረጥ, Kafka ወይም RabbitMQ?", "የትኛው መድረክ የተሻለ ነው?". እንደ እውነቱ ከሆነ ይህ በእውነቱ በእርስዎ ሁኔታ ላይ የተመሰረተ ነው, አሁን ባለው ልምድ, ወዘተ. ለሁሉም የአጠቃቀም ጉዳዮች እና ሊሆኑ ስለሚችሉ ገደቦች አንድ መድረክን ለመምከር በጣም ቀላል ስለሆነ የእኔን አስተያየት ለመስጠት አመነታለሁ. ይህንን ተከታታይ መጣጥፎች የጻፍኩት እርስዎ የእራስዎን አስተያየት እንዲፈጥሩ ነው።

ሁለቱም ስርዓቶች በዚህ አካባቢ መሪዎች ናቸው ማለት እፈልጋለሁ. ምናልባት ትንሽ አድሏዊ ነኝ፣ ምክንያቱም በፕሮጀክቶቼ ባለኝ ልምድ፣ እንደ የተረጋገጠ የመልዕክት ማዘዣ እና አስተማማኝነት ያሉ ነገሮችን የበለጠ ዋጋ እሰጣለሁ።

ይህ አስተማማኝነት እና የተረጋገጠ ቅደም ተከተል የሌላቸው ሌሎች ቴክኖሎጂዎች አይቻለሁ፣ ከዚያ RabbitMQ እና Kafkaን እመለከታለሁ - እና የእነዚህን ሁለቱም ስርዓቶች አስደናቂ እሴት ተረድቻለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ