የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 3. ካፍካ

የአንድ ትንሽ መጽሐፍ ትርጉም መቀጠል፡-
የመልእክት ደላላዎችን መረዳት
ደራሲ፡ ጃኩብ ኮራብ፣ አሳታሚ፡ O'Reilly Media, Inc.፣ የታተመበት ቀን፡- ሰኔ 2017፣ ISBN፡ 9781492049296።

ያለፈው የተተረጎመ ክፍል፡- የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 1 መግቢያ

ምዕራፍ 3

ካፋካ

ካፍካ አንዳንድ ባህላዊ የመልእክት ደላላዎችን ውሱንነት ለመቅረፍ እና ለተለያዩ ነጥብ-ወደ-ነጥብ መስተጋብር ብዙ መልእክት ደላላዎችን ከማዘጋጀት ለመዳን በLinkedIn የተቋቋመ ሲሆን ይህም በዚህ መጽሐፍ በገጽ 28 ላይ “ማሳጠርና መውጣት” በሚለው ስር ይገለጻል። ጉዳዮችን ተጠቀም LinkedIn በአብዛኛው የተመካው እንደ የገጽ ጠቅታዎች እና የመዳረሻ ምዝግብ ማስታወሻዎች ባሉ በአንድ መንገድ ወደ ውስጥ በማስገባት ላይ ሲሆን አሁንም ያ ውሂቡ የአምራቾችን ወይም የሌሎች ሸማቾችን ምርታማነት ላይ ተጽእኖ ሳያሳድር በብዙ ስርዓቶች ጥቅም ላይ እንዲውል በመፍቀድ ላይ ነው። እንደ እውነቱ ከሆነ፣ ካፍካ ያለበት ምክንያት ሁለንተናዊ ዳታ ቧንቧው የሚገልጸውን ዓይነት የመልእክት መላላኪያ አርክቴክቸር ለማግኘት ነው።

ከዚህ የመጨረሻ ግብ አንጻር ሌሎች መስፈርቶች በተፈጥሮ ተነሱ። ካፍካ የሚከተሉትን ማድረግ አለበት:

  • በጣም ፈጣን ይሁኑ
  • ከመልእክቶች ጋር ሲሰሊ ተጨማሪ የመተላለፊያ ይዘት ያቅርቡ
  • አታሚ-ተመዝጋቢ እና ነጥብ-ወደ-ነጥብ ሞዴሎችን ይደግፉ
  • ሸማቾችን በመጨመር ፍጥነትዎን አይቀንሱ። ለምሳሌ፣ በመዳረሻው ላይ ያሉ የሸማቾች ቁጥር እያደገ ሲሄድ የሁለቱም የወረፋ እና የርዕስ አፈጻጸም በActiveMQ ውስጥ ይቀንሳል።
  • በአግድም ሊሰፋ የሚችል ይሁኑ; መልዕክቶችን የሚቀጥል አንድ ደላላ በከፍተኛው የዲስክ ፍጥነት ብቻ ከሆነ፣ አፈጻጸምን ለመጨመር ከአንድ ደላላ ምሳሌ ማለፍ ተገቢ ነው።
  • መልዕክቶችን ለማከማቸት እና መልሶ ለማግኘት መዳረሻን ይገድቡ

ይህንን ሁሉ ለማሳካት ካፍካ የደንበኞችን እና የመልእክት መላላኪያ ደላሎችን ሚና እና ኃላፊነት እንደገና የሚገልጽ አርክቴክቸር ወሰደ። የጄኤምኤስ ሞዴል በጣም ደላላ ላይ ያተኮረ ሲሆን ደላላው መልዕክቶችን የማሰራጨት ሃላፊነት ያለበት ሲሆን ደንበኞች ስለመልእክት መላክ እና መቀበል ብቻ መጨነቅ አለባቸው። በአንፃሩ ካፍካ ደንበኛን ያማከለ ሲሆን ደንበኛው የባህላዊ ደላላ ባህሪያትን ለምሳሌ ፍትሃዊ በሆነ መልኩ ለተጠቃሚዎች ማሰራጨት እና እጅግ በጣም ፈጣን እና ሊሰፋ የሚችል ደላላ ይለውጣል። ከባህላዊ የመልእክት መላላኪያ ስርዓቶች ጋር ለሰሩ ሰዎች ከካፍካ ጋር አብሮ መስራት መሰረታዊ የአስተሳሰብ ለውጥ ያስፈልገዋል።
ይህ የምህንድስና አቅጣጫ ከተለመደው ደላላ ጋር ሲወዳደር በብዙ ትእዛዞች መጠን መጨመር የሚችል የመልእክት መላላኪያ መሠረተ ልማት እንዲፈጠር አድርጓል። እንደምናየው, ይህ አቀራረብ ከግብይቶች ጋር አብሮ ይመጣል, ይህም ማለት ካፍካ ለተወሰኑ የስራ ጫናዎች እና የተጫኑ ሶፍትዌሮች ተስማሚ አይደለም.

የተዋሃደ መድረሻ ሞዴል

ከላይ የተገለጹትን መስፈርቶች ለማሟላት፣ ካፍካ የህትመት-ደንበኝነት ተመዝጋቢ እና ነጥብ-ወደ-ነጥብ መልእክትን በአንድ መድረሻ ስር አጣምሮ ይዟል - ርዕስ. ይህ ከመልእክት መላላኪያ ስርዓቶች ጋር ለሰሩ ሰዎች ግራ የሚያጋባ ሲሆን “ርዕስ” የሚለው ቃል የማንበብ (ከርዕሱ) የማይበረክት የብሮድካስት ዘዴን ያመለክታል። በዚህ መጽሐፍ መግቢያ ላይ እንደተገለጸው የካፍካ ርዕሰ ጉዳዮች እንደ ድብልቅ መድረሻ ዓይነት ሊወሰዱ ይገባል።

በዚህ ምዕራፍ ለቀሪው ክፍል፣ በግልጽ ካልገለፅን በቀር፣ “ርዕስ” የሚለው ቃል የካፍካ ርዕስን ያመለክታል።

ርዕሶች እንዴት እንደሚሠሩ እና ምን ዋስትናዎች እንደሚሰጡ ሙሉ በሙሉ ለመረዳት በመጀመሪያ በካፍካ ውስጥ እንዴት እንደሚተገበሩ ማየት አለብን።
በካፍካ ውስጥ ያለው እያንዳንዱ ርዕስ የራሱ የሆነ ማስታወሻ አለው.
ወደ ካፍካ መልእክት የሚልኩ አምራቾች ወደዚህ መዝገብ ይጽፋሉ፣ እና ተጠቃሚዎች ያለማቋረጥ ወደፊት የሚራመዱ ጠቋሚዎችን በመጠቀም ከምዝግብ ማስታወሻው ላይ ያነባሉ። አልፎ አልፎ፣ ካፍካ በእነዚያ ክፍሎች ውስጥ ያሉት መልዕክቶች የተነበቡም ይሁኑ ያልተነበቡ የምዝግብ ማስታወሻውን በጣም ጥንታዊ ክፍሎችን ይሰርዛል። የካፍካ ዲዛይን ማእከላዊ አካል ደላላው መልእክቶች ቢነበቡም ባይነበቡ ግድ የለውም - ይህ የደንበኛው ሃላፊነት ነው።

"ሎግ" እና "ጠቋሚ" የሚሉት ቃላት አይታዩም። የካፍካ ሰነድ. እነዚህ የታወቁ ቃላት መረዳትን ለመርዳት እዚህ ጥቅም ላይ ይውላሉ።

ይህ ሞዴል ከActiveMQ ፈጽሞ የተለየ ነው፣ ከሁሉም ወረፋዎች የሚመጡ መልዕክቶች በአንድ መዝገብ ውስጥ ይከማቻሉ፣ እና ደላላው መልእክቶቹ ከተነበቡ በኋላ የተሰረዙ መሆናቸውን ምልክት ያደርጋል።
አሁን ትንሽ በጥልቀት እንቆፍር እና የርዕሱን መዝገብ በበለጠ ዝርዝር እንመልከት።
የካፍካ ሎግ ብዙ ክፍልፋዮችን ያቀፈ ነው (ምስል 3-1). ካፍካ በእያንዳንዱ ክፍልፋዮች ውስጥ ጥብቅ ትዕዛዝ ይሰጣል. ይህ ማለት በተወሰነ ቅደም ተከተል ወደ ክፍልፋዩ የተፃፉ መልእክቶች በተመሳሳይ ቅደም ተከተል ይነበባሉ ማለት ነው. እያንዳንዱ ክፍልፋይ እንደ ተዘዋዋሪ የምዝግብ ማስታወሻ ፋይል የያዘ ነው። ንዑስ ስብስብ በአምራቾቹ ወደ ርዕሰ ጉዳዩ የተላኩ የሁሉም መልዕክቶች (ንዑስ ስብስብ)። የተፈጠረው ርዕስ በነባሪ አንድ ክፍልፍል ይዟል። የክፍሎች ሀሳብ የካፍካ ማዕከላዊ ሀሳብ አግድም ልኬት ነው።

የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 3. ካፍካ
ምስል 3-1. የካፍካ ክፍልፋዮች

ፕሮዲዩሰር ወደ ካፍካ ርዕስ መልእክት ሲልክ መልእክቱን ወደ የትኛው ክፍልፋይ እንደሚልክ ይወስናል። ይህንን በኋላ ላይ በዝርዝር እንመለከታለን።

መልዕክቶችን በማንበብ

መልእክቶቹን ማንበብ የሚፈልግ ደንበኛ የሚጠራውን ጠቋሚ ያስተዳድራል። የሸማቾች ቡድንየሚያመለክተው ማካካሻ በክፋይ ውስጥ ያሉ መልዕክቶች. ማካካሻ በክፍፍል መጀመሪያ ላይ 0 ላይ የሚጀምር ጭማሪ አቀማመጥ ነው። በተጠቃሚ በተገለጸው group_id በኩል በኤፒአይ ውስጥ የተጠቀሰው ይህ የሸማች ቡድን ከዚህ ጋር ይዛመዳል አንድ ምክንያታዊ ሸማች ወይም ሥርዓት.

አብዛኛዎቹ የመልዕክት መላላኪያ ስርዓቶች በትይዩ መልዕክቶችን ለማስኬድ ብዙ አጋጣሚዎችን እና ክሮች በመጠቀም ከመድረሻው ላይ ያለውን መረጃ ያነባሉ። ስለዚህ፣ ብዙውን ጊዜ ተመሳሳይ የሸማች ቡድን የሚጋሩ ብዙ የሸማቾች አጋጣሚዎች ይኖራሉ።

የማንበብ ችግር በሚከተለው መልኩ ሊወከል ይችላል።

  • ርዕስ ብዙ ክፍልፋዮች አሉት
  • በርካታ የሸማቾች ቡድኖች በአንድ ጊዜ ርዕስን መጠቀም ይችላሉ።
  • የሸማቾች ቡድን ብዙ የተለያዩ አጋጣሚዎች ሊኖሩት ይችላል።

ይህ ቀላል ያልሆነ ከብዙ እስከ ብዙ ችግር ነው። ካፍካ በሸማች ቡድኖች፣ በሸማች ሁኔታዎች እና በክፍሎች መካከል ያለውን ግንኙነት እንዴት እንደሚይዝ ለመረዳት፣ በደረጃ ይበልጥ ውስብስብ የሆኑ የንባብ ሁኔታዎችን እንመልከት።

ሸማቾች እና የሸማቾች ቡድኖች

እንደ መነሻ አንድ ርዕስ ከአንድ ክፍልፍል ጋር እንውሰድ (ምስል 3-2).

የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 3. ካፍካ
ምስል 3-2. ሸማች ከክፍል ያነባል።

አንድ የሸማች ምሳሌ ከራሱ ቡድን_id ጋር ከዚህ ርዕስ ጋር ሲገናኝ የተነበበ ክፍልፍል እና በዚያ ክፍልፍል ውስጥ ማካካሻ ይመደብለታል። የዚህ ማካካሻ አቀማመጥ በደንበኛው ውስጥ በጣም የቅርብ ጊዜ አቀማመጥ (አዲሱ መልእክት) ወይም የመጀመሪያ ቦታ (የቀድሞው መልእክት) አመላካች ሆኖ ተዋቅሯል። ሸማቹ ከርዕሱ መልእክቶችን (የድምጽ መስጫዎችን) ይጠይቃል፣ ይህም ከምዝግብ ማስታወሻው ላይ በቅደም ተከተል እንዲነበብ ያደርጋቸዋል።
የማካካሻ ቦታው በመደበኛነት ወደ ካፍካ ይመለሳል እና እንደ መልእክቶች በውስጣዊ ርዕስ ውስጥ ይከማቻል _የሸማቾች_ማካካሻዎች. ከመደበኛ ደላላ በተለየ መልኩ የተነበቡ መልዕክቶች አሁንም አልተሰረዙም እና ደንበኛው ቀደም ሲል የታዩ መልዕክቶችን እንደገና ለማስኬድ ማካካሻውን ማደስ ይችላል።

ሁለተኛ አመክንዮአዊ ተጠቃሚ የተለየ group_id በመጠቀም ሲገናኝ ከመጀመሪያው ገለልተኛ የሆነ ሁለተኛ ጠቋሚን ያስተዳድራል (ምስል 3-3). ስለዚህ የካፍካ ርዕስ አንድ ሸማች ባለበት እንደ ወረፋ ነው የሚሰራው እና እንደ መደበኛ የህትመት-ደንበኝነት ተመዝጋቢ ( pub-sub ) ብዙ ሸማቾች የሚመዘገቡበት አርእስት ሲሆን ይህም ተጨማሪ ጥቅም ሁሉም መልዕክቶች ተከማችተው ብዙ ጊዜ ሊሰሩ ይችላሉ።

የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 3. ካፍካ
ምስል 3-3. በተለያዩ የሸማች ቡድኖች ውስጥ ያሉ ሁለት ሸማቾች ከተመሳሳይ ክፍልፍል ያነባሉ።

ሸማቾች በሸማች ቡድን ውስጥ

አንድ የሸማች ምሳሌ መረጃን ከክፍልፍል ሲያነብ ጠቋሚውን ሙሉ በሙሉ ይቆጣጠራል እና ባለፈው ክፍል እንደተገለጸው መልእክቶችን ያስተናግዳል።
ብዙ የሸማቾች አጋጣሚዎች ከተመሳሳዩ ቡድን_id ጋር ከአንድ ክፍልፍል ጋር ከተገናኙ ፣ በመጨረሻ የተገናኘው ምሳሌ በጠቋሚው ላይ ቁጥጥር ይደረግበታል እና ከዚያ ጊዜ ጀምሮ ሁሉንም መልዕክቶች ይቀበላል (ምስል 3-4).

የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 3. ካፍካ
ምስል 3-4. በአንድ የሸማች ቡድን ውስጥ ያሉ ሁለት ሸማቾች ከተመሳሳይ ክፍልፍል ያነባሉ።

የሸማቾች አጋጣሚዎች ብዛት ከክፍልፋዮች ብዛት በላይ የሆነበት ይህ የማቀነባበሪያ ዘዴ እንደ ልዩ ተጠቃሚ አይነት ሊታሰብ ይችላል። ምንም እንኳን ብዙ ሸማቾችን በትይዩ ("ንቁ-ንቁ" ወይም "ትኩስ-ትኩስ") ማሄድ ከመደበኛው የበለጠ ቢሆንም የሸማችዎን አጋጣሚዎች "ንቁ-ተቀባይ" (ወይም "ትኩስ-ሞቅ") ካስፈለገዎት ይህ ጠቃሚ ሊሆን ይችላል። ሸማቾች በተጠባባቂ ውስጥ.

ይህ ከላይ የተገለፀው የመልዕክት ስርጭት ባህሪ ከመደበኛው የJMS ወረፋ ባህሪ ጋር ሲወዳደር አስገራሚ ሊሆን ይችላል። በዚህ ሞዴል ወደ ወረፋው የሚላኩ መልእክቶች በሁለቱ ሸማቾች መካከል እኩል ይሰራጫሉ።

ብዙ ጊዜ፣ የሸማቾችን በርካታ አጋጣሚዎች ስንፈጥር፣ ይህንን የምናደርገው በትይዩ መልዕክቶችን ለማስኬድ ወይም የንባብ ፍጥነት ለመጨመር ወይም የንባብ ሂደቱን መረጋጋት ለመጨመር ነው። አንድ የሸማች ምሳሌ ብቻ በአንድ ጊዜ ከክፍል ውስጥ ያለውን መረጃ ማንበብ ስለሚችል፣ ይህ በካፍካ እንዴት ማግኘት ይቻላል?

ይህንን ለማድረግ አንዱ መንገድ ሁሉንም መልእክቶች ለማንበብ እና ወደ ክር ገንዳ ለማስተላለፍ ነጠላ የሸማች ምሳሌን መጠቀም ነው። ይህ አካሄድ የማቀነባበር ሂደትን ሲጨምር የሸማቾችን አመክንዮ ውስብስብነት ይጨምራል እና የንባብ ስርዓቱን ጥንካሬ ለመጨመር ምንም አያደርግም። በኃይል ብልሽት ወይም ተመሳሳይ ክስተት ምክንያት አንድ የሸማቾች ቅጂ ከቀነሰ፣ መቀነሱ ይቆማል።

በካፍካ ይህንን ችግር ለመፍታት ቀኖናዊው መንገድ ለОተጨማሪ ክፍልፋዮች.

መከፋፈል

ክፍልፋዮች ንባብን ለማዛመድ እና ርዕስን ከአንድ ደላላ የመተላለፊያ ይዘት በላይ ለማዛመድ ዋና ዘዴዎች ናቸው። ይህንን የበለጠ ለመረዳት፣ ሁለት ክፍልፋዮች ያሉት ርዕስ ያለበትን እና አንድ ሸማች በዚህ ርዕስ የተመዘገበበትን ሁኔታ እንመልከት (ምስል 3-5).

የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 3. ካፍካ
ምስል 3-5. አንድ ሸማች ከብዙ ክፍልፋዮች ያነባል።

በዚህ ሁኔታ ሸማቹ ከቡድን_አይዲው ጋር በተዛመደ ጠቋሚዎች ላይ በሁለቱም ክፍልፋዮች ቁጥጥር ይሰጠዋል እና የሁለቱም ክፍልፋዮች መልዕክቶችን ማንበብ ይጀምራል።
ለተመሳሳይ ቡድን_id ተጨማሪ ሸማች በዚህ ርዕስ ላይ ሲታከል ካፍካ አንዱን ክፍልፋዮች ከመጀመሪያው ወደ ሁለተኛው ሸማች ያስተካክላል። ከዚያ በኋላ፣ እያንዳንዱ የሸማች ምሳሌ ከርዕሱ አንድ ክፍል ይነበባል (ምስል 3-6).

መልእክቶች በ20 ክሮች ውስጥ በትይዩ መሰራታቸውን ለማረጋገጥ ቢያንስ 20 ክፍልፋዮች ያስፈልጉዎታል። ያነሱ ክፍልፋዮች ካሉ፣ በብቸኛ ሸማቾች ውይይት ላይ ቀደም ሲል እንደተገለፀው ምንም የሚሰሩበት ነገር ከሌላቸው ሸማቾች ጋር ይተዋሉ።

የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 3. ካፍካ
ምስል 3-6. በተመሳሳይ የሸማች ቡድን ውስጥ ያሉ ሁለት ሸማቾች ከተለያዩ ክፍሎች ያነባሉ።

ይህ እቅድ የ JMS ወረፋ ለመጠበቅ ከሚያስፈልገው የመልዕክት ስርጭት ጋር ሲነፃፀር የካፍካ ደላላን ውስብስብነት በእጅጉ ይቀንሳል። እዚህ ስለሚከተሉት ነጥቦች መጨነቅ አያስፈልግዎትም.

  • የትኛው ሸማች የሚቀጥለውን መልእክት መቀበል አለበት ፣በክብ-ሮቢን ምደባ ፣የአሁኑ የፕሪፌች ማቋረጫ አቅም ፣ወይም የቀድሞ መልዕክቶች (እንደ JMS መልእክት ቡድኖች)።
  • የትኞቹ መልእክቶች ለየትኛው ሸማቾች ይላካሉ እና ካልተሳካ እንደገና መላክ አለባቸው.

የካፍካ ደላላ ማድረግ ያለበት መልእክቱን በቅደም ተከተል ለተጠቃሚው ሲያስተላልፍ ነው።

ሆኖም ያልተሳኩ መልዕክቶችን ለማረም እና ለመላክ ትይዩ ለማድረግ የሚያስፈልጉት መስፈርቶች አይጠፉም - ለእነሱ ያለው ኃላፊነት በቀላሉ ከደላላው ወደ ደንበኛው ያልፋል። ይህ ማለት በእርስዎ ኮድ ውስጥ ግምት ውስጥ መግባት አለባቸው.

መልዕክቶችን በመላክ ላይ

የትኛውን ክፍልፋይ መልእክት እንደሚልክ የመወሰን የዚያ መልእክት አዘጋጅ ኃላፊነት ነው። ይህ የተደረገበትን ዘዴ ለመረዳት በመጀመሪያ በትክክል የምንልክበትን ነገር ግምት ውስጥ ማስገባት አለብን.

በጄኤምኤስ ውስጥ ሜታዳታ (ራስጌዎች እና ንብረቶች) እና ክፍያን (ጭነት) የያዘ አካል ያለው የመልእክት መዋቅር እንጠቀማለን ፣ በካፍ መልእክቱ ጥንድ "ቁልፍ-እሴት". የመልእክት ጭነት እንደ ዋጋ ይላካል። በሌላ በኩል ቁልፉ በዋናነት ለመከፋፈል ጥቅም ላይ ይውላል እና በውስጡ መያዝ አለበት የንግድ ሎጂክ ልዩ ቁልፍተዛማጅ መልዕክቶችን በተመሳሳይ ክፍልፍል ውስጥ ለማስቀመጥ.

በምዕራፍ 2፣ ተዛማጅ ክስተቶች በአንድ ሸማች በቅደም ተከተል መከናወን ያለባቸውን የመስመር ላይ ውርርድ ሁኔታን ተወያይተናል፡-

  1. የተጠቃሚ መለያው ተዋቅሯል።
  2. ገንዘብ ወደ መለያው ገቢ ይደረጋል።
  3. ከመለያው ገንዘብ የሚያወጣ ውርርድ ተሠርቷል።

እያንዳንዱ ክስተት በአንድ ርዕስ ላይ የተለጠፈ መልእክት ከሆነ፣ የተፈጥሮ ቁልፉ የመለያ መታወቂያ ይሆናል።
በካፍካ ፕሮዲዩሰር ኤፒአይ በመጠቀም መልእክት ሲላክ ከመልእክቱ እና አሁን ካለው የካፍካ ክላስተር ሁኔታ አንፃር መልእክቱ የሚላክበትን ክፍልፋይ መታወቂያ የሚመልስ ወደ ክፍልፋይ ተግባር ይተላለፋል። ይህ ባህሪ በጃቫ ውስጥ በክፍልፋይ በይነገጽ በኩል ይተገበራል።

ይህ በይነገጽ ይህን ይመስላል።

interface Partitioner {
    int partition(String topic,
        Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster);
}

የክፍልፋይ አተገባበር ክፋዩን ለመወሰን ነባሪው አጠቃላይ-ዓላማ ሃሺንግ ስልተ-ቀመር በቁልፍ ላይ ይጠቀማል፣ ወይም ምንም ቁልፍ ካልተገለጸ ክብ-ሮቢን ይጠቀማል። ይህ ነባሪ እሴት በአብዛኛዎቹ ሁኔታዎች በደንብ ይሰራል። ሆኖም ግን, ለወደፊቱ የእራስዎን መጻፍ ይፈልጋሉ.

የራስዎን የመከፋፈል ስልት በመጻፍ ላይ

ሜታዳታ ከመልእክት ጭነት ጋር ለመላክ የምትፈልጉበትን ምሳሌ እንመልከት። በእኛ ምሳሌ ውስጥ ያለው ክፍያ በጨዋታ መለያ ላይ ተቀማጭ ለማድረግ መመሪያ ነው። መመሪያ በስርጭት ላይ እንዳይሻሻል ዋስትና እንዲሰጠን የምንፈልገው እና ​​ያንን መመሪያ የሚጀምረው የታመነ የላይኛው ስርዓት ብቻ መሆኑን ማረጋገጥ የምንፈልገው ነው። በዚህ ሁኔታ የመላክ እና የመቀበያ ስርዓቶች መልእክቱን ለማረጋገጥ ፊርማ አጠቃቀም ላይ ይስማማሉ.
በተለመደው ጄኤምኤስ፣ በቀላሉ "የመልእክት ፊርማ" ንብረትን እንገልፃለን እና ወደ መልእክቱ እንጨምረዋለን። ሆኖም ካፍካ ቁልፍ እና እሴት ብቻ እንጂ ሜታዳታን የምናሳልፍበት ዘዴ አይሰጠንም።

እሴቱ ታማኝነቱን ለመጠበቅ የምንፈልገው የባንክ ማስተላለፍ ክፍያ ስለሆነ፣ በቁልፍ ውስጥ የምንጠቀመውን የውሂብ መዋቅር ከመግለጽ ውጭ ሌላ አማራጭ የለንም ። ለመከፋፈል የመለያ መታወቂያ እንደሚያስፈልገን በማሰብ ከመለያ ጋር የተያያዙ ሁሉም መልዕክቶች በቅደም ተከተል መከናወን ስላለባቸው፣ የሚከተለውን የJSON መዋቅር ይዘን እንቀርባለን።

{
  "signature": "541661622185851c248b41bf0cea7ad0",
  "accountId": "10007865234"
}

የፊርማው ዋጋ እንደየክፍያው መጠን ስለሚለያይ፣የክፍልፋይ በይነገጽ ነባሪ የሃሽንግ ስትራቴጂ በአስተማማኝ መልኩ ተዛማጅ መልዕክቶችን በቡድን አያደርገውም። ስለዚህ ይህንን ቁልፍ የሚተነተን እና የሂሳብ መታወቂያ ዋጋን የምንከፋፍል የራሳችንን ስልት መፃፍ አለብን።

ካፍካ በመደብሩ ውስጥ ያሉ የመልእክቶችን ብልሹነት ለመለየት ቼኮችን ያካትታል እና ሙሉ የደህንነት ባህሪያት አሉት። እንደዚያም ሆኖ፣ እንደ በላይኛው ያሉት ኢንዱስትሪ-ተኮር መስፈርቶች አንዳንድ ጊዜ ይታያሉ።

የተጠቃሚው የመከፋፈያ ስልት ሁሉም ተዛማጅ መልዕክቶች በአንድ ክፍልፍል ውስጥ መጨረሳቸውን ማረጋገጥ አለበት። ምንም እንኳን ይህ ቀላል ቢመስልም፣ ተዛማጅ መልዕክቶችን በማዘዝ አስፈላጊነት እና በአንድ ርዕስ ውስጥ ያሉ የክፍሎች ብዛት ምን ያህል ቋሚ እንደሆነ መስፈርቱ ውስብስብ ሊሆን ይችላል።

ትራፊክ ከመጀመሪያው ከሚጠበቀው በላይ ከሄደ ሊጨመሩ ስለሚችሉ በአንድ ርዕስ ውስጥ ያሉ የክፍሎች ብዛት በጊዜ ሂደት ሊለወጥ ይችላል. ስለዚህ የመልእክት ቁልፎች መጀመሪያ ከተላኩበት ክፍልፍል ጋር ሊጣመሩ ይችላሉ፣ ይህም በአምራች አጋጣሚዎች መካከል የሚጋራውን ግዛት ያመለክታል።

ሌላው ሊታሰብበት የሚገባ ጉዳይ የመልእክት ስርጭት በክፍልፋዮች ላይ ነው። በተለምዶ ቁልፎች በመልእክቶች ላይ በእኩል አይከፋፈሉም እና የሃሽ ተግባራት ለትንሽ የቁልፍ ስብስቦች ፍትሃዊ የመልእክት ስርጭት ዋስትና አይሆኑም።
መልእክቶችን ለመከፋፈል ምንም ይሁን ምን መለያው ራሱ እንደገና ጥቅም ላይ መዋል እንዳለበት ልብ ሊባል የሚገባው ጉዳይ ነው።

በተለያዩ የጂኦግራፊያዊ አካባቢዎች በካፍካ ስብስቦች መካከል ያለውን ውሂብ ለመድገም የሚያስፈልገውን መስፈርት ግምት ውስጥ ያስገቡ። ለዚሁ አላማ ካፍካ ሚረር ማከር ከተባለ የትእዛዝ መስመር መሳሪያ ጋር አብሮ ይመጣል ይህም ከአንድ ክላስተር የሚመጡ መልዕክቶችን ለማንበብ እና ወደ ሌላ ለማስተላለፍ የሚያገለግል ነው።

በክላስተር መካከል በሚደጋገሙበት ጊዜ በመልእክቶች መካከል አንጻራዊ ቅደም ተከተል እንዲኖር MirrorMaker የተባዛውን ርዕስ ቁልፎች መረዳት አለበት፣ ምክንያቱም የዚያ ርዕስ ክፍልፋዮች በሁለት ዘለላዎች ውስጥ ተመሳሳይ ላይሆኑ ይችላሉ።

በአብዛኛዎቹ ሁኔታዎች ውስጥ ነባሪው ሃሽንግ ወይም ክብ ሮቢን በጥሩ ሁኔታ ስለሚሠራ ብጁ የመከፋፈል ስልቶች በአንጻራዊ ሁኔታ ጥቂት ናቸው። ነገር ግን፣ ጠንካራ የማዘዣ ዋስትናዎች ከፈለጉ ወይም ከክፍያ ጭነቶች ውስጥ ሜታዳታን ማውጣት ከፈለጉ፣ መከፋፈል ጠለቅ ብለው ሊመለከቱት የሚገባ ጉዳይ ነው።

የካፍካ ልኬታማነት እና የአፈፃፀም ጥቅማጥቅሞች አንዳንድ ባህላዊ ደላላ ኃላፊነቶችን ወደ ደንበኛው በማሸጋገር የሚመጡ ናቸው። በዚህ አጋጣሚ በትይዩ የሚሰሩ በርካታ ሸማቾች መካከል ሊሆኑ የሚችሉ ተዛማጅ መልዕክቶችን ለማሰራጨት ውሳኔ ተላልፏል።

የጄኤምኤስ ደላሎችም እንደነዚህ ያሉትን መስፈርቶች ማሟላት አለባቸው. የሚገርመው፣ በJMS Message Groups በኩል የሚተገበረው ተዛማጅ መልዕክቶችን ለተመሳሳይ ሸማች የሚላክበት ዘዴ (በተለጣፊ ሎድ ማመጣጠን (ኤስኤልቢ) ስትራቴጂ ላይ ያለው ልዩነት) እንዲሁም ላኪው መልእክቶችን ተዛማጅነት ባለው መልኩ ምልክት እንዲያደርግ ይጠይቃል። በጄኤምኤስ ጉዳይ ደላላው ይህንን ተዛማጅ መልእክት ከብዙዎች ውስጥ ለአንድ ሸማች የመላክ እና ሸማቹ ከወደቀ የቡድኑን ባለቤትነት የማስተላለፍ ሃላፊነት አለበት።

የአምራች ስምምነቶች

መልእክቶችን በሚልኩበት ጊዜ መከፋፈል ግምት ውስጥ የሚገባው ብቸኛው ነገር አይደለም. በጃቫ ኤፒአይ ውስጥ የአምራች ክፍልን መላኪያ() ዘዴዎችን እንይ፡-

Future < RecordMetadata > send(ProducerRecord < K, V > record);
Future < RecordMetadata > send(ProducerRecord < K, V > record, Callback callback);

ሁለቱም ዘዴዎች ወደፊት እንደሚመለሱ ወዲያውኑ ልብ ሊባል የሚገባው ሲሆን ይህም የመላክ ክዋኔው ወዲያውኑ እንዳልተከናወነ ያመለክታል. ውጤቱ ለእያንዳንዱ ንቁ ክፍልፋይ መልእክት (አዘጋጅ ሪከርድ) ወደ ላኪ ቋት ተጽፎ በካፍ ደንበኛ ቤተ-መጽሐፍት ውስጥ እንደ የጀርባ ክር ወደ ደላላ ይላካል። ይህ ነገሮችን በሚያስደንቅ ሁኔታ ፈጣን ቢያደርግም፣ ልምድ የሌለው አፕሊኬሽኑ ሂደቱ ከቆመ መልእክቶችን ሊያጣ ይችላል።

እንደ ሁልጊዜው, በአፈፃፀም ዋጋ የመላክ ክዋኔውን የበለጠ አስተማማኝ ለማድረግ የሚያስችል መንገድ አለ. የዚህ ቋት መጠን ወደ 0 ሊዋቀር ይችላል፣ እና የመላክ አፕሊኬሽኑ ክር ወደ ደላላ የሚላከው መልእክት እስኪጠናቀቅ ድረስ ለመጠበቅ ይገደዳል፣

RecordMetadata metadata = producer.send(record).get();

መልዕክቶችን ስለማንበብ ተጨማሪ

መልእክቶችን ማንበብ ተጨማሪ መላምት የሚያስፈልጋቸው ውስብስብ ነገሮች አሉት። ከጄኤምኤስ ኤፒአይ በተለየ መልኩ ለመልዕክት ምላሽ የመልዕክት አድማጭን ማሄድ ይችላል፣ የ የሸማች የካፍካ ምርጫዎች ብቻ። ዘዴውን ጠለቅ ብለን እንመርምር የሕዝብ አስተያየት ()ለዚህ ዓላማ ጥቅም ላይ ይውላል:

ConsumerRecords < K, V > poll(long timeout);

ዘዴው የመመለሻ ዋጋ ብዙ ነገሮችን የያዘ የእቃ መያዣ መዋቅር ነው የሸማቾች መዝገብ ሊሆኑ ከሚችሉ በርካታ ክፍልፋዮች. የሸማቾች መዝገብ እራሱ ለቁልፍ-ዋጋ ጥንድ ከተዛመደ ሜታዳታ ጋር፣ ለምሳሌ ከሱ የተገኘበት ክፍልፋይ መያዣ ነው።

በምዕራፍ 2 ላይ እንደተብራራው፣ መልእክቶች በተሳካ ሁኔታ ከተከናወኑ ወይም ካልተሳኩ በኋላ ምን እንደሚሆኑ ማስታወስ አለብን፣ ለምሳሌ፣ ደንበኛው መልእክቱን ማካሄድ ካልቻለ ወይም ፅንስ ካስወገደ። በJMS ውስጥ፣ ይህ በእውቅና ሁነታ ተይዟል። ደላላው በተሳካ ሁኔታ የተስተናገደውን መልእክት ይሰርዛል፣ ወይም ጥሬውን ወይም የውሸት መልዕክቱን እንደገና ያስተላልፋል (ግብይቶች ጥቅም ላይ እንደዋሉ በማሰብ)።
ካፍካ በተለየ መንገድ ይሠራል. መልእክቶች ከተጣራ በኋላ በደላላ ውስጥ አይሰረዙም, እና በመጥፋቱ ወቅት የሚከሰተው የማረም ኮድ እራሱ ሃላፊነት ነው.

እንደተናገርነው የሸማቾች ቡድን በምዝግብ ማስታወሻው ውስጥ ካለው ማካካሻ ጋር የተያያዘ ነው. ከዚህ ማካካሻ ጋር የተያያዘው የምዝግብ ማስታወሻ አቀማመጥ ምላሽ ከሚሰጠው ቀጣዩ መልእክት ጋር ይዛመዳል የሕዝብ አስተያየት (). ይህ ማካካሻ የሚጨምርበት ጊዜ ነጥቡ ለማንበብ ወሳኝ ነው።

ቀደም ሲል ወደ ተነጋገርነው የንባብ ሞዴል ስንመለስ የመልእክት ማቀናበሪያ ሶስት ደረጃዎችን ያቀፈ ነው።

  1. ለማንበብ መልእክት ያውጡ።
  2. መልእክቱን አሂድ።
  3. መልእክት አረጋግጥ።

የካፍካ ሸማች ከማዋቀር አማራጭ ጋር አብሮ ይመጣል ማንቃት.auto.commit. ይሄ በተደጋጋሚ ጥቅም ላይ የሚውል ነባሪ መቼት ነው፣ እንደተለመደው "ራስ-ሰር" የሚለውን ቃል በያዙ ቅንብሮች።

ከካፍካ 0.10 በፊት፣ ይህንን አማራጭ የሚጠቀም ደንበኛ በሚቀጥለው ጥሪ ላይ የተነበበው የመጨረሻውን መልእክት ማካካሻ ይልካል የሕዝብ አስተያየት () ከተሰራ በኋላ. ይህ ማለት ደንበኛው ቀድሞውንም አስተናግዶ ከሆነ ነገር ግን ከመደወልዎ በፊት በድንገት ከጠፋ ማንኛውም ቀደም ሲል የተገኙ መልዕክቶች እንደገና ሊዘጋጁ ይችላሉ ማለት ነው ። የሕዝብ አስተያየት (). ምክንያቱም ደላላው መልእክት ስንት ጊዜ እንደተነበበ ምንም አይነት ሁኔታ ስለማያስቀምጥ ቀጣዩ ሸማች ያንን መልእክት የሚያመጣው ምንም መጥፎ ነገር እንዳለ አያውቅም። ይህ ባህሪ አስመሳይ-ግብይት ነበር። ማካካሻው የተደረገው መልእክቱ በተሳካ ሁኔታ ከተሰራ ብቻ ነው፣ ነገር ግን ደንበኛው ካስወገደ፣ ደላላው ያንኑ መልእክት ለሌላ ደንበኛ በድጋሚ ይልካል። ይህ ባህሪ ከመልዕክት መላኪያ ዋስትና ጋር የሚስማማ ነበር"ቢያንስ አንድ ጊዜ".

በካፍካ 0.10 የደንበኛ ኮድ ተቀይሯል ስለዚህ ቁርጠኝነት በደንበኛው ቤተ-መጽሐፍት እንደተዋቀረ በየጊዜው እንዲነሳሳ auto.commit.interval.ms. ይህ ባህሪ በJMS AUTO_ACKNOWLEDGE እና DUPS_OK_ACKNOWLEDGE ሁነታዎች መካከል ያለ ነው። አውቶኮሚት በሚጠቀሙበት ጊዜ መልእክቶች በትክክል ተስተናግደዋልም አልሆኑ ሊደረጉ ይችላሉ - ይህ በዘገየ ሸማች ሁኔታ ሊከሰት ይችላል። አንድ ሸማች ካስወገደ፣ ከተቀመጠው ቦታ ጀምሮ በሚቀጥለው ሸማች መልእክቶች ይመጣሉ፣ ይህም ያመለጠ መልእክት ሊያስከትል ይችላል። በዚህ አጋጣሚ ካፍካ መልእክቶቹን አላጣም, የንባብ ኮድ ብቻ አላስኬዳቸውም.

ይህ ሁነታ በስሪት 0.9 ካለው ጋር አንድ አይነት ቃል አለው፡ መልእክቶች ሊሰሩ ይችላሉ፣ ነገር ግን ካልተሳካ፣ ማካካሻው ላይሰራ ይችላል፣ ይህም መላኪያ በእጥፍ ሊጨምር ይችላል። በሚሰሩበት ጊዜ የሚያመጡት ብዙ መልዕክቶች የሕዝብ አስተያየት (), ይህ ችግር የበለጠ ነው.

በገጽ 21 ላይ “መልእክቶችን ከማንበብ” ላይ እንደተብራራው በመልእክት መላላኪያ ሥርዓት ውስጥ የውድቀት ሁነታዎች ከግምት ውስጥ ሲገቡ አንድ ጊዜ መልእክት ማድረስ የመሰለ ነገር የለም።

በካፍካ ውስጥ ማካካሻ (ማካካሻ) ለማድረግ (ለመፈፀም) ሁለት መንገዶች አሉ፡ በራስ-ሰር እና በእጅ። በሁለቱም ሁኔታዎች መልእክቱ ከተሰራ ነገር ግን ከመግባቱ በፊት ካልተሳካ መልእክቶች ብዙ ጊዜ ሊሰሩ ይችላሉ። እንዲሁም ድርጊቱ ከበስተጀርባ ከተከሰተ እና ኮድዎ ከመሰራቱ በፊት ከተጠናቀቀ (ምናልባትም በካፍ 0.9 እና ከዚያ በፊት) መልእክቱን ጨርሶ ላለማድረግ መምረጥ ይችላሉ።

መለኪያውን በማዘጋጀት በካፍካ ተጠቃሚ ኤፒአይ ውስጥ በእጅ የሚሰራ ማካካሻ ሂደትን መቆጣጠር ይችላሉ። ማንቃት.auto.commit ከሚከተሉት መንገዶች አንዱን በውሸት እና በግልፅ መጥራት፡-

void commitSync();
void commitAsync();

መልእክቱን "ቢያንስ አንድ ጊዜ" ለማስኬድ ከፈለጉ ማካካሻውን በእጅ መፈጸም አለብዎት ቁርጠኝነት ()መልእክቶቹን ከተሰራ በኋላ ወዲያውኑ ይህንን ትዕዛዝ በመፈጸም.

እነዚህ ዘዴዎች መልእክቶች ከመሰራታቸው በፊት እውቅና እንዲሰጡ አይፈቅዱም ነገር ግን የግብይት መልክ ሲያሳዩ ሊከሰቱ የሚችሉ የማስኬጃ መዘግየቶችን ለማስወገድ ምንም አያደርጉም። በካፍካ ውስጥ ምንም ግብይቶች የሉም. ደንበኛው የሚከተሉትን የማድረግ ችሎታ የለውም:

  • የውሸት መልእክትን በራስ-ሰር መልሰው ያዙሩ። መልእክቶችን ለማድረስ በደላላው ላይ መተማመን ስለማይችሉ ሸማቾች እራሳቸው ችግር ካለባቸው የደመወዝ ጭነቶች እና ከኋላ መቋረጥ የሚነሱ ልዩ ሁኔታዎችን ማስተናገድ አለባቸው።
  • በአንድ የአቶሚክ አሠራር ውስጥ ወደ ብዙ ርዕሰ ጉዳዮች መልዕክቶችን ይላኩ። በቅርቡ እንደምናየው፣ የተለያዩ ርዕሶችን እና ክፍልፋዮችን መቆጣጠር በሚላክበት ጊዜ ግብይቶችን የማያስተባብሩ በካፍካ ክላስተር ውስጥ በተለያዩ ማሽኖች ላይ ሊኖሩ ይችላሉ። ይህ ዘገባ እስከተጠናቀረበት ድረስ፣ በኪፕ-98 ይህን ተግባራዊ ለማድረግ አንዳንድ ስራዎች ተሰርተዋል።
  • አንድን መልእክት ከአንድ ርዕስ ማንበብን ወደ ሌላ ርዕስ ከመላክ ጋር ያገናኙ። አሁንም የካፍካ አርክቴክቸር እንደ አንድ አውቶቡስ በሚንቀሳቀሱ ብዙ ገለልተኛ ማሽኖች ላይ የተመሰረተ ነው እና ይህን ለመደበቅ ምንም ሙከራ አልተደረገም። ለምሳሌ፣ ለማገናኘት የሚያስችልዎ ምንም የኤፒአይ አካላት የሉም ሸማች и አዘጋጅ በግብይት ውስጥ. በጄኤምኤስ, ይህ በእቃው ይቀርባል ክፍለ ጊዜከተፈጠሩት መልእክት አምራቾች и መልእክት ሸማቾች.

በግብይቶች ላይ መተማመን ካልቻልን በባህላዊ የመልእክት መላላኪያ ሥርዓቶች ከሚቀርቡት ጋር የትርጓሜ ትምህርቶችን እንዴት ማቅረብ እንችላለን?

መልእክቱ ከመሰራቱ በፊት የተገልጋዩ ማካካሻ ሊጨምር የሚችልበት እድል ካለ ለምሳሌ በሸማች ግጭት ወቅት ሸማቹ የሸማቹ ቡድን ክፍልፋይ ሲመደብ መልእክቱ እንዳመለጠው የሚያውቅበት መንገድ የለውም። ስለዚህ አንዱ ስልት ማካካሻውን ወደ ቀድሞው ቦታ መመለስ ነው። የካፍካ ሸማች ኤፒአይ የሚከተሉትን ዘዴዎች ያቀርባል።

void seek(TopicPartition partition, long offset);
void seekToBeginning(Collection < TopicPartition > partitions);

ዘዴ መፈለግ() በዘዴ መጠቀም ይቻላል
OffsetsForTimes (ካርታ የጊዜ ማህተም ለፍለጋ) ባለፈው በተወሰነ ቦታ ላይ ወደ አንድ ሁኔታ መመለስ።

በተዘዋዋሪ፣ ይህንን አካሄድ መጠቀም ማለት ቀደም ሲል ተስተናግደው የነበሩ አንዳንድ መልዕክቶች እንደገና ሊነበቡ እና ሊሰሩ የሚችሉበት እድል ሰፊ ነው። ይህንን ለማስቀረት፣ ቀደም ሲል የታዩ መልዕክቶችን ለመከታተል እና የተባዙትን ለማስወገድ በምዕራፍ 4 ላይ እንደተገለጸው ንባብ ልንጠቀም እንችላለን።

በአማራጭ፣ የመልዕክት መጥፋት ወይም ማባዛት ተቀባይነት እስካል ድረስ የፍጆታ ኮድዎ ቀላል ሆኖ ሊቆይ ይችላል። እንደ ሎግ ዝግጅቶችን፣ ሜትሪክስ፣ ክሊክ ክትትል እና የመሳሰሉትን የአጠቃቀም ጉዳዮችን ስናጤን የነጠላ መልእክቶች መጥፋት በዙሪያው ባሉ አፕሊኬሽኖች ላይ ከፍተኛ ተጽዕኖ ሊያሳድር እንደማይችል እንረዳለን። በእንደዚህ ዓይነት ሁኔታዎች, ነባሪ ዋጋዎች ፍጹም ተቀባይነት አላቸው. በሌላ በኩል፣ ማመልከቻዎ ክፍያዎችን መላክ ካለበት፣ እያንዳንዱን መልእክት በጥንቃቄ መንከባከብ አለብዎት። ሁሉም ወደ አውድ ይመጣል።

የግል ምልከታዎች እንደሚያሳዩት የመልእክቶች ጥንካሬ ሲጨምር የእያንዳንዱ መልእክት ዋጋ ይቀንሳል። ትላልቅ መልእክቶች በጥቅል መልክ ሲታዩ ዋጋ ያላቸው ይሆናሉ።

ከፍተኛ ተገኝነት

የካፍካ ከፍተኛ ተደራሽነት አቀራረብ ከActiveMQ አካሄድ በጣም የተለየ ነው። ካፍካ የተነደፈው ሁሉም የደላሎች ሁኔታዎች በአንድ ጊዜ መልዕክቶችን በሚቀበሉበት እና በሚያሰራጩበት ሚዛን-ውጭ ስብስቦች ዙሪያ ነው።

የካፍካ ክላስተር በተለያዩ ሰርቨሮች ላይ የሚሰሩ በርካታ የደላላ ሁኔታዎችን ያካትታል። ካፍካ የተነደፈው በተራ ራሱን የቻለ ሃርድዌር ሲሆን እያንዳንዱ መስቀለኛ መንገድ የራሱ የሆነ ማከማቻ አለው። በርካታ የስሌት ኖዶች በጊዜ ሊወዳደሩ ስለሚችሉ የአውታረ መረብ ተያያዥ ማከማቻ (SAN) መጠቀም አይመከርም።Ыሠ የማከማቻ ክፍተቶች እና ግጭቶችን ይፈጥራሉ.

ካፍካ ነው። ሁልጊዜ በርቷል ስርዓት. ብዙ ትላልቅ የካፍ ተጠቃሚዎች ዘለላዎቻቸውን በጭራሽ አይዘጉም እና ሶፍትዌሩ ሁልጊዜም በቅደም ተከተል ዳግም ይጀምራል። ይህ የተገኘው ከቀድሞው ስሪት ጋር ለመልእክቶች እና በደላሎች መካከል ያለውን መስተጋብር ተኳሃኝነት በማረጋገጥ ነው።

ከአገልጋይ ዘለላ ጋር የተገናኙ ደላላዎች የአራዊት ጠባቂእንደ የውቅር መረጃ መዝገብ የሚሰራ እና የእያንዳንዱን ደላላ ሚናዎች ለማስተባበር የሚያገለግል ነው። ZooKeeper ራሱ መረጃን በማባዛት ከፍተኛ ተደራሽነት የሚሰጥ የተከፋፈለ ሥርዓት ነው። ምልአተ ጉባኤ.

በመሠረታዊ ጉዳይ ላይ አንድ ርዕስ በካፍካ ክላስተር ውስጥ ከሚከተሉት ባህሪዎች ጋር ተፈጠረ።

  • የክፍሎች ብዛት. ቀደም ሲል እንደተብራራው, እዚህ ጥቅም ላይ የሚውለው ትክክለኛ ዋጋ በሚፈለገው የንባብ ደረጃ ላይ ይወሰናል.
  • የማባዛት ሁኔታ (ምክንያት) በክላስተር ውስጥ ምን ያህል ደላላ ምሳሌዎች ለዚህ ክፍልፍል ምዝግብ ማስታወሻዎችን መያዝ እንዳለባቸው ይወስናል።

ZooKeepersን ለማስተባበር በመጠቀም ካፍካ በክላስተር ውስጥ ባሉ ደላሎች መካከል አዲስ ክፍሎችን በትክክል ለማሰራጨት ይሞክራል። ይህ የሚከናወነው እንደ ተቆጣጣሪ ሆኖ በሚያገለግል ነጠላ ምሳሌ ነው።

በሂደት ላይ ለእያንዳንዱ ርዕስ ክፍልፍል ተቆጣጣሪ ሚናዎችን ለደላላ መስጠት መሪ (መሪ, ዋና, አቅራቢ) እና ተከታዮች (ተከታዮች, ባሮች, የበታች). የዚህ ክፍልፋይ መሪ ሆኖ የሚሰራው ደላላው በአዘጋጆቹ የሚላኩለትን መልዕክቶች በሙሉ ተቀብሎ ለተጠቃሚዎች የማሰራጨት ሃላፊነት አለበት። መልእክቶች ወደ የርዕስ ክፍልፍል ሲላኩ ለዚያ ክፍልፍል ተከታዮች ሆነው ለሚሰሩ ሁሉም ደላላ አንጓዎች ይባዛሉ። ለክፍል ምዝግብ ማስታወሻዎች ያለው እያንዳንዱ መስቀለኛ መንገድ ይባላል ግልባጭ. ደላላ ለአንዳንድ ክፍልፋዮች እንደ መሪ እና ለሌሎች እንደ ተከታይ ሆኖ ሊያገለግል ይችላል።

በመሪው የተያዙ ሁሉንም መልዕክቶች የያዘ ተከታይ ይባላል የተመሳሰለ ቅጂ (በተመሳሰለ ሁኔታ ውስጥ ያለ ግልባጭ፣ ውስጠ-ማመሳሰል ቅጂ)። ለክፍፍል መሪ ሆኖ የሚሰራ ደላላ ከወረደ፣ ማንኛውም ደላላ ወቅታዊ የሆነ ወይም ለዚያ ክፍልፍል የተመሳሰለ የመሪነት ሚናውን ሊረከብ ይችላል። በማይታመን ሁኔታ ዘላቂነት ያለው ንድፍ ነው.

የአምራች ውቅር አካል መለኪያው ነው። አክስየመተግበሪያው ክር መላኩን ከመቀጠሉ በፊት ምን ያህል ቅጂዎች ለመልእክት መቀበሉን መቀበል (እውቅና መስጠት) እንዳለባቸው የሚወስነው፡ 0፣ 1 ወይም ሁሉም። ከተዋቀረ ሁሉ, ከዚያም መልእክት ሲደርስ መሪው በርዕስ ቅንብር ከተገለጹት በርካታ ምልክቶች (እራሱን ጨምሮ) የመዝገቡ ማረጋገጫ (ምስጋና) እንደደረሰው ወደ አምራቹ ማረጋገጫ ይልካል. min.insync.replicas (ነባሪ 1) መልእክቱ በተሳካ ሁኔታ መድገም ካልተቻለ አምራቹ ለየት ያለ ማመልከቻ ይጥላል (በቂ ቅጂዎች ወይም በቂ ገለጻ ከተደረገ በኋላ).

አንድ የተለመደ ውቅር 3 (1 መሪ፣ 2 ተከታዮች በክፋይ) እና ልኬቱ የሚባዛው ነገር ያለው ርዕስ ይፈጥራል። min.insync.replicas is set to 2. በዚህ አጋጣሚ ክላስተር የርእስ ክፋይን ከሚያስተዳድሩት ደላሎች አንዱ የደንበኛ አፕሊኬሽኖችን ሳይነካ እንዲወርድ ይፈቅዳል።

ይህ በአፈጻጸም እና በአስተማማኝነት መካከል ወደ ተለመደው የንግድ ልውውጥ ይመልሰናል። ማባዛት የሚከሰተው ለተከታዮች ማረጋገጫ (ምስጋና) ተጨማሪ የጥበቃ ጊዜ ወጪ ነው። ምንም እንኳን በትይዩ የሚሰራ ስለሆነ ቢያንስ ወደ ሶስት አንጓዎች ማባዛት ከሁለቱ ጋር ተመሳሳይ አፈጻጸም አለው (የአውታረ መረብ ባንድዊድዝ አጠቃቀም መጨመርን ችላ በማለት)።

ይህንን የማባዛት እቅድ በመጠቀም ካፍካ በቀዶ ጥገናው እያንዳንዱን መልእክት በአካል ወደ ዲስክ የመፃፍ አስፈላጊነትን በብልህነት ያስወግዳል። አመሳስል(). በአምራቹ የተላከው እያንዳንዱ መልእክት ወደ ክፍልፍል መዝገብ ይጻፋል፣ ነገር ግን በምዕራፍ 2 ላይ እንደተብራራው፣ ወደ ፋይል መፃፍ በመጀመሪያ በስርዓተ ክወናው ቋት ውስጥ ይከናወናል። ይህ መልእክት ወደ ሌላ የካፍካ ምሳሌ ከተደገመ እና በማስታወስ ውስጥ ከሆነ መሪው መጥፋት መልእክቱ ራሱ ጠፍቷል ማለት አይደለም - በተመሳሰለ ቅጂ ሊወሰድ ይችላል።
ቀዶ ጥገናውን ለመፈጸም ፈቃደኛ አለመሆን አመሳስል() ማለት ካፍካ ወደ ማህደረ ትውስታ ሊጽፋቸው በሚችል ፍጥነት መልዕክቶችን መቀበል ይችላል. በተቃራኒው ማህደረ ትውስታን ወደ ዲስክ ከማፍሰስ መቆጠብ በቻሉ ቁጥር የተሻለ ይሆናል። በዚህ ምክንያት ለካፍካ ደላሎች 64 ጂቢ ወይም ከዚያ በላይ ማህደረ ትውስታ መመደብ የተለመደ አይደለም. ይህ የማስታወሻ አጠቃቀም ማለት አንድ ነጠላ የካፍካ ምሳሌ ከባህላዊ መልእክት ደላላ በብዙ ሺህ ጊዜ በፍጥነት በፍጥነት መሮጥ ይችላል።

ካፍካ ክዋኔውን ለመተግበር ሊዋቀር ይችላል አመሳስል() ወደ መልእክት ፓኬጆች. በካፍካ ውስጥ ያለው ነገር ሁሉ በጥቅል ላይ ያተኮረ ስለሆነ፣ በእርግጥ ለብዙ የአጠቃቀም ጉዳዮች በጥሩ ሁኔታ ይሰራል እና በጣም ጠንካራ ዋስትና ለሚፈልጉ ተጠቃሚዎች ጠቃሚ መሣሪያ ነው። አብዛኛው የካፍካ ንፁህ አፈጻጸም የሚመጣው ለደላላው እንደ ፓኬት ከሚላኩ መልዕክቶች እና እነዚህ መልዕክቶች ከደላላው የሚነበቡት በቅደም ተከተል ብሎኮች በመጠቀም ነው። ዜሮ ቅጂ ክዋኔዎች (ከአንድ የማህደረ ትውስታ ቦታ ወደ ሌላ የመገልበጥ ስራ የማይሰራባቸው ክዋኔዎች). የኋለኛው ትልቅ አፈጻጸም እና የግብአት ትርፍ ሲሆን የሚቻለው የክፍፍል እቅዱን የሚገልጽ ከስር የምዝግብ ማስታወሻ መዋቅር በመጠቀም ብቻ ነው።

ከአንድ የካፍካ ደላላ ይልቅ በካፍካ ክላስተር ውስጥ በጣም የተሻለ አፈጻጸም ይቻላል፣ ምክንያቱም የርዕስ ክፍልፋዮች በተለያዩ ማሽኖች ላይ ሊጨምሩ ይችላሉ።

ውጤቶች

በዚህ ምእራፍ ውስጥ፣ የካፍካ አርክቴክቸር በደንበኞች እና ደላሎች መካከል ያለውን ግንኙነት በሚያስደንቅ ሁኔታ ጠንካራ የመልእክት መላላኪያ መስመር ለማቅረብ እንዴት እንደሚገምተው ተመልክተናል። ይህንን ለማሳካት የሚጠቀመውን ተግባር ተወያይተናል እና ይህንን ተግባር የሚያቀርቡትን የመተግበሪያዎች አርክቴክቸር በአጭሩ ተመልክተናል። በሚቀጥለው ምእራፍ፣ በመልዕክት መላላኪያ ላይ የተመሰረቱ አፕሊኬሽኖች መፍታት ያለባቸውን የተለመዱ ችግሮችን እንመለከታለን እና እነሱን ለመፍታት ስልቶችን እንወያይበታለን። ስለ የመልእክት መላላኪያ ቴክኖሎጂዎች በአጠቃላይ እንዴት መነጋገር እንዳለብን በመግለጽ ምዕራፉን እንጨርሳለን ስለዚህ ለአጠቃቀም ጉዳዮችዎ ተስማሚነታቸውን መገምገም ይችላሉ።

ያለፈው የተተረጎመ ክፍል፡- የመልእክት ደላላዎችን መረዳት። በActiveMQ እና በካፍካ የመልእክት መካኒኮችን መማር። ምዕራፍ 1

ትርጉም ተከናውኗል፡- tele.gg/middle_java

ይቀጥላል…

በዳሰሳ ጥናቱ ውስጥ የተመዘገቡ ተጠቃሚዎች ብቻ መሳተፍ ይችላሉ። ስግን እንእባክህን።

ካፍካ በድርጅትዎ ውስጥ ጥቅም ላይ ይውላል?

  • ያ

  • የለም

  • ከዚህ በፊት ጥቅም ላይ የዋለ, አሁን አይደለም

  • ለመጠቀም አቅደናል።

38 ተጠቃሚዎች ድምጽ ሰጥተዋል። 8 ተጠቃሚዎች ድምፀ ተአቅቦ አድርገዋል።

ምንጭ: hab.com

አስተያየት ያክሉ