መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ" ሰላም የካብሮ ነዋሪዎች! ይህ መጽሐፍ የክር ሂደትን ለመረዳት ለሚፈልግ ለማንኛውም ገንቢ ተስማሚ ነው። የተከፋፈሉ ፕሮግራሞችን መረዳቱ የካፍካ እና የካፍካ ዥረቶችን የበለጠ ለመረዳት ይረዳዎታል። የካፍካ መዋቅር እራሱን ማወቅ ጥሩ ይሆናል, ነገር ግን ይህ አስፈላጊ አይደለም: የሚፈልጉትን ሁሉ እነግርዎታለሁ. ልምድ ያካበቱ የካፍካ ገንቢዎች እና ጀማሪዎች በዚህ መጽሐፍ ውስጥ የካፍ ዥረቶችን ቤተ-መጽሐፍት በመጠቀም አስደሳች የዥረት ማቀነባበሪያ መተግበሪያዎችን እንዴት መፍጠር እንደሚችሉ ይማራሉ። መካከለኛ እና የላቀ የጃቫ ገንቢዎች እንደ ተከታታይነት ያሉ ጽንሰ-ሀሳቦችን አስቀድመው የሚያውቁ የካፍ ዥረት መተግበሪያዎችን ለመፍጠር ችሎታቸውን ተግባራዊ ለማድረግ ይማራሉ ። የመፅሃፉ ምንጭ ኮድ በጃቫ 8 የተፃፈ ሲሆን የጃቫ 8 ላምዳ አገላለፅ አገባብ ጉልህ በሆነ መልኩ ይጠቀማል ስለዚህ ከላምዳ ተግባራት (በሌላ የፕሮግራም አወጣጥ ቋንቋ እንኳን) እንዴት እንደሚሰራ ማወቅ ጠቃሚ ይሆናል.

ቅንጭብጭብ። 5.3. የመሰብሰብ እና የመስኮት ስራዎች

በዚህ ክፍል ውስጥ፣ በጣም ተስፋ ሰጪ የሆኑትን የካፍ ዥረቶችን ክፍሎች ለመዳሰስ እንቀጥላለን። እስካሁን ድረስ የሚከተሉትን የካፍ ዥረቶችን ገፅታዎች ሸፍነናል፡

  • የማቀነባበሪያ ቶፖሎጂ መፍጠር;
  • በዥረት ትግበራዎች ውስጥ ሁኔታን መጠቀም;
  • የውሂብ ዥረት ግንኙነቶችን ማከናወን;
  • በክስተት ዥረቶች (KStream) እና በዝማኔ ዥረቶች (KTable) መካከል ያሉ ልዩነቶች።

በሚቀጥሉት ምሳሌዎች እነዚህን ሁሉ ንጥረ ነገሮች አንድ ላይ እናመጣለን. እንዲሁም ስለ መስኮት ማውጣት ይማራሉ፣ ሌላው ታላቅ የዥረት መተግበሪያዎች ባህሪ። የእኛ የመጀመሪያ ምሳሌ ቀላል ድምር ይሆናል።

5.3.1. በኢንዱስትሪ ዘርፍ የአክሲዮን ሽያጭ ድምር

ከዥረት መልቀቅ ጋር ሲሰሩ ማሰባሰብ እና ማቧደን ወሳኝ መሳሪያዎች ናቸው። የግለሰብ መዝገቦች ሲቀበሉ መመርመር ብዙውን ጊዜ በቂ አይደለም. ተጨማሪ መረጃን ከውሂብ ለማውጣት, እነሱን መቧደን እና ማዋሃድ አስፈላጊ ነው.

በዚህ ምሳሌ፣ በበርካታ ኢንዱስትሪዎች ውስጥ ያሉ የኩባንያዎች አክሲዮኖች ሽያጭ መጠን መከታተል ያለበትን የቀን ነጋዴ ልብስ ይለብሳሉ። በተለይም በእያንዳንዱ ኢንዱስትሪ ውስጥ ትልቁን የሽያጭ ድርሻ ያላቸውን አምስቱ ኩባንያዎች ላይ ፍላጎት አለዎት።

እንዲህ ዓይነቱ ድምር ውሂቡን ወደ ተፈለገው ቅጽ ለመተርጎም (በአጠቃላይ ቃላትን ለመናገር) የሚከተሉትን በርካታ ደረጃዎች ያስፈልገዋል.

  1. ጥሬ የአክሲዮን መገበያያ መረጃን የሚያትም በርዕስ ላይ የተመሠረተ ምንጭ ይፍጠሩ። StockTransaction አይነት ወደሆነ ShareVolume አይነት ነገር ካርታ ማድረግ አለብን። ነጥቡ የStockTransaction ነገር የሽያጭ ሜታዳታ ይዟል፣ነገር ግን የምንፈልገው ስለሚሸጡት የአክሲዮን ብዛት መረጃ ብቻ ነው።
  2. የቡድን ShareVolume ውሂብ በአክሲዮን ምልክት። አንድ ጊዜ በምልክት ከተሰበሰበ፣ ይህን ውሂብ ወደ ንዑስ ድምር የአክሲዮን ሽያጭ መጠን ሰብስብ። የKStream.groupBy ዘዴ የKGroupedStream አይነትን እንደሚመልስ ልብ ሊባል የሚገባው ጉዳይ ነው። እና ተጨማሪ የKGroupedStream.reduce ዘዴን በመደወል የ KTable ምሳሌ ማግኘት ይችላሉ።

የKGroupedStream በይነገጽ ምንድነው?

የKStream.groupBy እና የKStream.groupByKey ዘዴዎች የKGroupedStream ምሳሌን ይመልሳሉ። KGroupedStream በቁልፍ ከተሰበሰበ በኋላ የክስተቶች ዥረት መካከለኛ ውክልና ነው። ከእሱ ጋር በቀጥታ ለመስራት በፍጹም የታሰበ አይደለም. በምትኩ፣KGroupedStream ለማጠቃለል ስራዎች ጥቅም ላይ ይውላል፣ይህም ሁልጊዜ KTableን ያስከትላል። እና የማዋሃድ ስራዎች ውጤት KTable ስለሆነ እና የስቴት መደብርን ስለሚጠቀሙ, በዚህ ምክንያት ሁሉም ዝመናዎች በቧንቧ መስመር ላይ ተጨማሪ አይላኩም.

የKTable.groupBy ዘዴ ተመሳሳይ KGroupedTable ይመልሳል - የዝማኔዎች ዥረት መካከለኛ ውክልና፣ በቁልፍ የተሰበሰበ።

ትንሽ ዕረፍት እናድርግ እና ምስልን እንይ። 5.9, ይህም ያገኘነውን ያሳያል. ይህ ቶፖሎጂ አስቀድሞ ለእርስዎ በጣም የታወቀ መሆን አለበት።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
አሁን የዚህን ቶፖሎጂ ኮድ እንይ (በፋይሉ src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (ዝርዝር 5.2) ላይ ይገኛል።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
የተሰጠው ኮድ በአጭር አነጋገር እና በበርካታ መስመሮች ውስጥ በተደረጉት ትልቅ መጠን ይለያል. በBuilder.stream ዘዴ የመጀመሪያ ግቤት ውስጥ አዲስ ነገር ሊያስተውሉ ይችላሉ፡ የቁጥር አይነት AutoOffsetReset.EARLIEST (የቅርብ ጊዜም አለ)፣ Consumed.withOffsetResetPolicy ዘዴን በመጠቀም የተዘጋጀ። ይህ የመቁጠሪያ አይነት ለእያንዳንዱ የKStream ወይም KTable የማካካሻ ዳግም ማስጀመሪያ ስትራቴጂን ለመጥቀስ እና ከማዋቀሩን የማካካሻ አማራጭን ይቀድማል።

ቡድንበኪይ እና በቡድንበ

የKStream በይነገጽ መዝገቦችን ለመቧደን ሁለት መንገዶች አሉት፡ GroupByKey እና GroupBy። ሁለቱም KGrouped Table ይመለሳሉ፣ ስለዚህ በመካከላቸው ያለው ልዩነት ምንድን ነው እና የትኛውን መቼ መጠቀም እንዳለብዎ እያሰቡ ሊሆን ይችላል?

የግሩፕ ባይኪ ዘዴ ጥቅም ላይ የሚውለው በKStream ውስጥ ያሉት ቁልፎች ባዶ ሲሆኑ ነው። እና ከሁሉም በላይ፣ “እንደገና መከፋፈልን ይጠይቃል” ባንዲራ በጭራሽ አልተዘጋጀም።

የቡድንባይ ዘዴ እርስዎ የቡድን ቁልፎችን እንደቀየሩ ​​ስለሚገምት የመከፋፈል ባንዲራ ወደ እውነት ተቀናብሯል። ከቡድን ዘዴ በኋላ መቀላቀልን፣ ውህደቶችን ወዘተ ማከናወን በራስ ሰር ዳግም መከፋፈልን ያስከትላል።
ማጠቃለያ፡ በሚቻልበት ጊዜ ከGroupBy ይልቅ ግሩፕባይኪን መጠቀም አለቦት።

ካርታውቫልዩስ እና ቡድን በስልቶች ምን እንደሚሰሩ ግልፅ ነው፣ስለዚህ ድምር() ዘዴን እንይ (በsrc/main/java/bbejeck/model/ShareVolume.java) (ዝርዝር 5.3)።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
የ ShareVolume.sum ዘዴ የአክሲዮን ሽያጩን አጠቃላይ ሂደት ይመልሳል ፣ እና የጠቅላላው የሂሳብ ሰንሰለት ውጤት የ KTable ነገር ነው። . አሁን KTable የሚጫወተውን ሚና ተረድተዋል። ShareVolume ነገሮች ሲደርሱ፣ ተጓዳኙ የKTable ነገር የቅርብ ጊዜውን ወቅታዊ ዝመና ያከማቻል። ሁሉም ዝመናዎች በቀድሞው shareVolumeKTable ውስጥ እንደሚንጸባረቁ ማስታወስ አስፈላጊ ነው ነገር ግን ሁሉም ተጨማሪ አይላኩም.

ከዚያም በየኢንዱስትሪው ከፍተኛ መጠን ያለው የአክሲዮን መጠን ያላቸውን አምስቱ ኩባንያዎች ላይ ለመድረስ ይህንን KTable እንጠቀማለን። በዚህ ጉዳይ ላይ የምናደርጋቸው ድርጊቶች ከመጀመሪያው ድምር ጋር ተመሳሳይ ይሆናሉ.

  1. የ ShareVolume እቃዎችን በኢንዱስትሪ ለመቧደን ሌላ ቡድንን በኦፕሬሽን ያከናውኑ።
  2. ShareVolume ነገሮችን ማጠቃለል ይጀምሩ። በዚህ ጊዜ የማጠቃለያው ነገር ቋሚ መጠን ያለው ቅድሚያ ወረፋ ነው። በዚህ ቋሚ መጠን ወረፋ፣ ከፍተኛ መጠን ያለው አክሲዮን የያዙ አምስት ኩባንያዎች ብቻ እንዲቆዩ ተደርጓል።
  3. ወረፋዎቹን ካለፈው አንቀጽ ወደ የሕብረቁምፊ እሴት ያቅርቡ እና አምስቱን በጣም የተገበያዩትን አክሲዮኖች በቁጥር በኢንዱስትሪ ይመልሱ።
  4. ውጤቶቹን በሕብረቁምፊ መልክ ወደ ርዕስ ይፃፉ።

በስእል. ምስል 5.10 የውሂብ ፍሰት ቶፖሎጂ ግራፍ ያሳያል. እንደሚመለከቱት, የሁለተኛው ዙር ሂደት በጣም ቀላል ነው.

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
አሁን የዚህን የሁለተኛ ዙር ሂደት አወቃቀሩን ግልጽ በሆነ መንገድ ከተረዳን በኋላ ወደ ምንጭ ኮድ መዞር እንችላለን (በፋይል src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java) (ዝርዝር 5.4) ላይ ያገኙታል። .

ይህ ማስጀመሪያ ቋሚ የQueue ተለዋዋጭ አለው። ይህ ለ java.util.TreeSet አስማሚ የሆነ ብጁ ነገር ሲሆን ይህም ከፍተኛውን የ N ውጤቶችን በአክሲዮን ዋጋ ቅደም ተከተል ለመከታተል ያገለግላል።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
የቡድንባይ እና የካርፕቫሉስ ጥሪዎችን አይተሃል፣ ስለዚህ ወደ እነዚያ አንገባም (የKTable.toStream ዘዴ እየጠራን ነው ምክንያቱም የKTable.print ዘዴ ተቋርጧል)። ግን የ KTable የድምር() ሥሪትን እስካሁን ስላላዩት ስለዚያ ለመወያየት ትንሽ ጊዜ እናሳልፋለን።

እንደምታስታውሱት KTable ልዩ የሚያደርገው ተመሳሳይ ቁልፎች ያላቸው መዛግብት እንደ ዝማኔዎች መቆጠራቸው ነው። KTable የድሮውን ግቤት በአዲስ ይተካል። ውህደቱ በተመሳሳይ መንገድ ይከሰታል-ተመሳሳይ ቁልፍ ያላቸው የቅርብ ጊዜ መዝገቦች ተሰብስበዋል. አንድ መዝገብ ሲመጣ፣ ወደ FixedSizePriorityQueue ክፍል ምሳሌ ተጨምሯል። ድምር ዘዴ ጥሪ).

ይህ ሁሉ ማለት የእኛ ሰብሳቢ ፣ FixedSizePriorityQueue ፣ ሁሉንም እሴቶች በአንድ ቁልፍ አያጠቃልልም ፣ ግን ተንቀሳቃሽ የ N በጣም የተሸጡ የአክሲዮን ዓይነቶች መጠን ያከማቻል። እያንዳንዱ ገቢ እስካሁን የተሸጡትን አጠቃላይ የአክሲዮን ብዛት ይይዛል። የእያንዳንዱን ማሻሻያ ማጠቃለያ ሳያስፈልገው KTable በአሁኑ ጊዜ የየትኞቹ ኩባንያዎች አክሲዮኖች በብዛት እንደሚገበያዩ መረጃ ይሰጥዎታል።

ሁለት አስፈላጊ ነገሮችን ማድረግን ተምረናል-

  • የቡድን እሴቶች በ KTable በጋራ ቁልፍ;
  • በእነዚህ የተመደቡ እሴቶች ላይ እንደ ማጠቃለል እና ማጠቃለል ያሉ ጠቃሚ ስራዎችን ያከናውኑ።

እነዚህን ክዋኔዎች እንዴት ማከናወን እንደሚቻል ማወቅ በካፍካ ዥረቶች መተግበሪያ ውስጥ የሚዘዋወረውን ውሂብ ትርጉም ለመረዳት እና ምን መረጃ እንደሚይዝ ለመረዳት አስፈላጊ ነው።

እንዲሁም በዚህ መጽሐፍ ውስጥ ቀደም ሲል የተብራሩትን አንዳንድ ቁልፍ ፅንሰ-ሀሳቦችን ሰብስበናል። በምዕራፍ 4፣ ስህተትን የሚታገስ፣ የአካባቢ ግዛት ለዥረት ትግበራ ምን ያህል አስፈላጊ እንደሆነ ተወያይተናል። በዚህ ምእራፍ ውስጥ ያለው የመጀመሪያው ምሳሌ የአካባቢ ግዛት ለምን በጣም አስፈላጊ እንደሆነ አሳይቷል—ያዩትን መረጃ የመከታተል ችሎታ ይሰጥዎታል። የአካባቢ መዳረሻ የአውታረ መረብ መዘግየቶችን ያስወግዳል፣ ይህም አፕሊኬሽኑን የበለጠ አፈጻጸም እና ስህተትን የሚቋቋም ያደርገዋል።

ማናቸውንም የመጠቅለል ወይም የማሰባሰብ ስራ በሚሰሩበት ጊዜ የግዛቱን ማከማቻ ስም መጥቀስ አለብዎት። የጥቅልል እና የማጠቃለያ ስራዎች የ KTable ምሳሌን ይመልሳሉ፣ እና KTable የድሮ ውጤቶችን በአዲስ ለመተካት የስቴት ማከማቻ ይጠቀማል። እንደተመለከቱት ፣ ሁሉም ዝመናዎች ወደ ቧንቧው አይላኩም ፣ እና ይህ አስፈላጊ ነው ምክንያቱም የማጠቃለያ ስራዎች ማጠቃለያ መረጃ ለማምረት የተነደፉ ናቸው። የአካባቢ ግዛትን ካላመለከቱ፣ KTable ሁሉንም የማጠቃለያ እና ጥቅል ውጤቶች ያስተላልፋል።

በመቀጠል, በተወሰነ ጊዜ ውስጥ እንደ ማጠቃለያ የመሳሰሉ ስራዎችን ማከናወንን እንመለከታለን - የዊንዶው ኦፕሬሽኖች የሚባሉት.

5.3.2. የመስኮት ስራዎች

በቀደመው ክፍል ውስጥ ተንሸራታች ኮንቮሉሽን እና ድምርን አስተዋውቀናል. አፕሊኬሽኑ ቀጣይነት ያለው የአክሲዮን ሽያጭ መጠንን አከናውኗል፣ በመቀጠልም አምስቱን በጣም የተገበያዩ አክሲዮኖችን በማሰባሰብ።

አንዳንድ ጊዜ እንዲህ ዓይነቱ ቀጣይነት ያለው ውህደት እና የውጤት መጠቅለል አስፈላጊ ነው. እና አንዳንድ ጊዜ ስራዎችን በተወሰነ ጊዜ ውስጥ ብቻ ማከናወን ያስፈልግዎታል. ለምሳሌ፣ ባለፉት 10 ደቂቃዎች ውስጥ ከአንድ የተወሰነ ኩባንያ አክሲዮኖች ጋር ምን ያህል የገንዘብ ልውውጥ እንደተደረገ አስላ። ወይም ስንት ተጠቃሚዎች አዲስ የማስታወቂያ ባነር ላይ ጠቅ እንዳደረጉ ባለፉት 15 ደቂቃዎች። አፕሊኬሽኑ እንደዚህ አይነት ስራዎችን ብዙ ጊዜ ሊያከናውን ይችላል፣ነገር ግን ለተወሰኑ ጊዜያት (የጊዜ መስኮቶች) ብቻ ከሚተገበሩ ውጤቶች ጋር።

የልውውጥ ግብይቶችን በገዢ መቁጠር

በሚቀጥለው ምሳሌ፣ የአክሲዮን ግብይቶችን በበርካታ ነጋዴዎች ላይ እንከታተላለን—ወይ ትላልቅ ድርጅቶች ወይም ብልህ ግለሰብ የገንዘብ ነጋዴዎች።

ለዚህ ክትትል ሁለት ሊሆኑ የሚችሉ ምክንያቶች አሉ። ከመካከላቸው አንዱ የገበያ መሪዎች ምን እንደሚገዙ / እንደሚሸጡ ማወቅ ያስፈልጋል. እነዚህ ትልልቅ ተጫዋቾች እና የተራቀቁ ባለሀብቶች ዕድል ካዩ፣ ስልታቸውን መከተል ተገቢ ነው። ሁለተኛው ምክንያት የሕገ-ወጥ የውስጥ ንግድ ምልክቶችን የመለየት ፍላጎት ነው። ይህንን ለማድረግ, ትላልቅ የሽያጭ ፍንጮችን ከአስፈላጊ የጋዜጣዊ መግለጫዎች ጋር ያለውን ግንኙነት መተንተን ያስፈልግዎታል.

እንዲህ ዓይነቱ ክትትል የሚከተሉትን ደረጃዎች ያካትታል:

  • ከአክሲዮን ግብይቶች ርዕስ ለማንበብ ዥረት መፍጠር;
  • ገቢ መዝገቦችን በገዢ መታወቂያ እና በአክሲዮን ምልክት ማቧደን። ቡድንን በዘዴ መጥራት የKGroupedStream ክፍልን ምሳሌ ይመልሳል።
  • የKGroupedStream.windowedBy ዘዴ በጊዜ መስኮት የተወሰነ የውሂብ ዥረት ይመልሳል፣ይህም በመስኮት የተደረገ ድምርን ይፈቅዳል። በመስኮቱ አይነት ላይ በመመስረት TimeWindowedKStream ወይ SessionWindowedKStream ይመለሳል።
  • ለድምር ሼል የግብይት ቆጠራ። የዊንዶው የውሂብ ፍሰት በዚህ ቆጠራ ውስጥ አንድ የተወሰነ መዝገብ ግምት ውስጥ መግባት እንዳለበት ይወስናል;
  • በግንባታው ወቅት ውጤቶችን ወደ አንድ ርዕስ በመፃፍ ወይም ወደ ኮንሶል ማውጣቱ።

የዚህ መተግበሪያ ቶፖሎጂ ቀላል ነው, ነገር ግን ግልጽ የሆነ ምስል ጠቃሚ ይሆናል. ስእልን እየን። 5.11.

በመቀጠል የዊንዶው ኦፕሬሽኖችን ተግባራዊነት እና ተዛማጅ ኮድን እንመለከታለን.

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"

የመስኮት ዓይነቶች

በካፍካ ዥረቶች ውስጥ ሶስት ዓይነት መስኮቶች አሉ፡

  • ክፍለ ጊዜ;
  • "ማወዛወዝ" (መዋጥ);
  • መንሸራተት/መጎተት።

የትኛውን መምረጥ እንደ ንግድ መስፈርቶችዎ ይወሰናል. መዝለል እና መዝለል መስኮቶች በጊዜ የተገደቡ ናቸው፣ የክፍለ-ጊዜ መስኮቶች ግን በተጠቃሚ እንቅስቃሴ የተገደቡ ናቸው—የክፍለ ጊዜው(ዎቹ) ቆይታ የሚወሰነው ተጠቃሚው ምን ያህል ንቁ እንደሆነ ብቻ ነው። ዋናው ነገር ማስታወስ ያለብዎት ሁሉም የዊንዶው ዓይነቶች በስርዓተ-ጊዜው ሳይሆን በመግቢያዎቹ የቀን / የሰዓት ማህተሞች ላይ የተመሰረቱ ናቸው.

በመቀጠል የእኛን ቶፖሎጂ በእያንዳንዱ የዊንዶው ዓይነቶች እንተገብራለን. የተጠናቀቀው ኮድ የሚሰጠው በመጀመሪያው ምሳሌ ላይ ብቻ ነው, ለሌሎች የዊንዶው ዓይነቶች ከዊንዶው አሠራር በስተቀር ምንም ነገር አይለወጥም.

የክፍለ ጊዜ መስኮቶች

የክፍለ ጊዜ መስኮቶች ከሁሉም የዊንዶው ዓይነቶች በጣም የተለዩ ናቸው. በተጠቃሚው እንቅስቃሴ (ወይም ሊከታተሉት በሚፈልጉት የህጋዊ አካል እንቅስቃሴ) ብቻ የተገደቡ አይደሉም። የክፍለ ጊዜ መስኮቶች በእንቅስቃሴ-አልባ ጊዜያት የተገደቡ ናቸው።

ምስል 5.12 የክፍለ ጊዜ መስኮቶችን ጽንሰ-ሐሳብ ያሳያል. ትንሹ ክፍለ ጊዜ ከክፍለ ጊዜው ጋር በግራ በኩል ይዋሃዳል. እና በቀኝ በኩል ያለው ክፍለ-ጊዜ የተለየ ይሆናል ምክንያቱም ረጅም የእንቅስቃሴ-አልባነት ጊዜን ይከተላል. የክፍለ ጊዜ መስኮቶች በተጠቃሚ እንቅስቃሴ ላይ የተመሰረቱ ናቸው፣ ነገር ግን መግቢያው የየትኛው ክፍለ ጊዜ እንደሆነ ለመወሰን የቀን/ሰዓት ማህተሞችን ከግቤቶች ይጠቀሙ።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"

የክምችት ግብይቶችን ለመከታተል የክፍለ ጊዜ መስኮቶችን መጠቀም

ስለ ልውውጥ ግብይቶች መረጃን ለመያዝ የክፍለ ጊዜ መስኮቶችን እንጠቀም። የክፍለ ጊዜ መስኮቶች አተገባበር በሊስት 5.5 ይታያል (ይህም በ src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java ውስጥ ይገኛል)።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
በዚህ ቶፖሎጂ ውስጥ አብዛኛዎቹን ክዋኔዎች አይተሃል፣ ስለዚህ እዚህ እንደገና መገምገም አያስፈልግም። ግን እዚህ ብዙ አዳዲስ አካላትም አሉ, አሁን የምንወያይባቸው.

ማንኛዉም የቡድን ክዋኔ በተለምዶ አንዳንድ አይነት የመደመር ስራዎችን ያከናውናል (ማጠቃለያ፣ ጥቅል ወይም ቆጠራ)። በአንድ የተወሰነ ጊዜ መስኮት ውስጥ መዝገቦችን ከግምት ውስጥ የሚያስገባ ድምር ድምርን ከጠቅላላ ሩጫ ወይም የመስኮት ውህደት ማከናወን ይችላሉ።

በዝርዝሩ 5.5 ውስጥ ያለው ኮድ በክፍለ ጊዜ መስኮቶች ውስጥ ያሉትን የግብይቶች ብዛት ይቆጥራል። በስእል. 5.13 እነዚህ ድርጊቶች ደረጃ በደረጃ ይተነተናሉ.

ዊንዶውስ በ(SessionWindows.with(twentySeconds)) በመደወል እስከ(አስራ አምስት ደቂቃ) ድረስ ያለ እንቅስቃሴ-አልባ የ20 ሰከንድ እና የ15 ደቂቃ ቆይታ ያለው የክፍለ ጊዜ መስኮት እንፈጥራለን። የስራ ፈት የ20 ሰከንድ ጊዜ ማለት አፕሊኬሽኑ ካለቀ በኋላ በ20 ሰከንድ ውስጥ የሚመጣውን ወይም የአሁኑን ክፍለ ጊዜ ወደ የአሁኑ (ገባሪ) ክፍለ ጊዜ የሚመጣን ማንኛውንም ግቤት ያካትታል ማለት ነው።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
በመቀጠል በክፍለ-ጊዜው መስኮት ውስጥ የትኛውን የመደመር አሠራር መከናወን እንዳለበት እንገልጻለን - በዚህ ሁኔታ, መቁጠር. ገቢ መግቢያው ከእንቅስቃሴ-አልባነት መስኮቱ ውጭ (ከቀን/ሰዓት ማህተም በሁለቱም በኩል) ከወደቀ አፕሊኬሽኑ አዲስ ክፍለ ጊዜ ይፈጥራል። የማቆያ ክፍተት ማለት ክፍለ ጊዜን ለተወሰነ ጊዜ ማቆየት እና ከክፍለ ጊዜው እንቅስቃሴ-አልባነት ጊዜ በላይ የሚዘልቅ ነገር ግን ሊያያዝ የሚችል ዘግይቶ መረጃን ይፈቅዳል። በተጨማሪም፣ የውህደቱ ውጤት የአዲሱ ክፍለ ጊዜ መጀመሪያ እና መጨረሻ ከቀደምት እና ከአዲሱ የቀን/ሰዓት ማህተም ጋር ይዛመዳል።

ክፍለ ጊዜዎች እንዴት እንደሚሠሩ ለማየት ከቁጥር ዘዴ ጥቂት ግቤቶችን እንይ (ሠንጠረዥ 5.1)።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
መዝገቦች ሲመጡ፣ ነባር ክፍለ ጊዜዎችን በተመሳሳይ ቁልፍ፣ ከአሁኑ የቀን/ሰዓት ማህተም ያነሰ የመጨረሻ ጊዜ - የእንቅስቃሴ-አልባ ክፍተት እና የመነሻ ጊዜ ከአሁኑ የቀን/ሰዓት ማህተም + የእንቅስቃሴ-አልባ ክፍተት እንፈልጋለን። ይህንን ግምት ውስጥ በማስገባት ከጠረጴዛው ውስጥ አራት ግቤቶች. 5.1 እንደሚከተለው ወደ አንድ ክፍለ ጊዜ ይዋሃዳሉ.

1. መዝገብ 1 መጀመሪያ ይደርሳል, ስለዚህ የመነሻ ሰዓቱ ከመጨረሻው ሰዓት ጋር እኩል ነው እና 00:00:00 ነው.

2. በመቀጠል, መግቢያ 2 ይመጣል, እና ከ 23:59:55 ያልበለጠ እና ከ 00:00:35 ባልበለጠ ጊዜ ውስጥ የሚጀምሩ ክፍለ ጊዜዎችን እንፈልጋለን. መዝገብ 1 አግኝተናል እና ክፍለ-ጊዜዎችን 1 እና 2ን አጣምረናል ። የክፍለ-ጊዜ 1 መጀመሪያ (ቀደም ሲል) እና የ 2 ክፍለ ጊዜ ማብቂያ ጊዜን (በኋላ) እንወስዳለን ፣ ስለዚህ አዲሱ ክፍለ ጊዜያችን 00:00:00 ይጀምራል እና በ00 ላይ ያበቃል። 00:15

3. መዝገብ 3 ይደርሳል, በ 00:00:30 እና 00:01:10 መካከል ክፍለ ጊዜዎችን እንፈልጋለን እና ምንም አላገኘንም. ለቁልፍ 123-345-654፣FFBE፣ በ00፡00፡50 ጀምሮ እና የሚያበቃ ሁለተኛ ክፍለ ጊዜ ያክሉ።

4. መዝገብ 4 ደርሷል እና በ23፡59፡45 እና 00፡00፡25 መካከል ክፍለ ጊዜዎችን እንፈልጋለን። በዚህ ጊዜ ሁለቱም ክፍለ ጊዜዎች 1 እና 2 ይገኛሉ ሁሉም ሶስት ክፍለ ጊዜዎች በአንድ ላይ ይጣመራሉ, with a start time of 00:00:00 እና የመጨረሻው ሰዓት 00:00:15.

በዚህ ክፍል ውስጥ ከተገለፀው ውስጥ የሚከተሉትን አስፈላጊ ጥቃቅን ነገሮች ማስታወስ ጠቃሚ ነው-

  • ክፍለ-ጊዜዎች ቋሚ መጠን ያላቸው መስኮቶች አይደሉም. የአንድ ክፍለ ጊዜ ቆይታ የሚወሰነው በተወሰነ ጊዜ ውስጥ ባለው እንቅስቃሴ ነው;
  • በመረጃው ውስጥ ያለው የቀን/ሰዓት ማህተሞች ክስተቱ በነበረ ክፍለ ጊዜ ውስጥ ወይም በስራ ፈት ጊዜ ውስጥ ይወድቃል እንደሆነ ይወስናሉ።

በመቀጠል የሚቀጥለውን የዊንዶው አይነት - "ታምሊንግ" መስኮቶችን እንነጋገራለን.

"የሚንቀጠቀጡ" መስኮቶች

የሚንቀጠቀጡ መስኮቶች በተወሰነ ጊዜ ውስጥ የሚወድቁ ክስተቶችን ይይዛሉ። በአንድ የተወሰነ ኩባንያ ውስጥ ያሉትን ሁሉንም የአክሲዮን ግብይቶች በየ20 ሰከንድ መያዝ እንዳለብህ አስብ፣ ስለዚህ በዚያ ጊዜ ውስጥ ሁሉንም ክስተቶች ትሰበስባለህ። በ20 ሰከንድ ክፍተት መጨረሻ ላይ መስኮቱ ተንከባለለ እና ወደ አዲስ የ20 ሰከንድ የመመልከቻ ክፍተት ይሸጋገራል። ምስል 5.14 ይህንን ሁኔታ ያሳያል.

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
እንደሚመለከቱት, ባለፉት 20 ሰከንዶች ውስጥ የተቀበሉት ሁሉም ክስተቶች በመስኮቱ ውስጥ ተካትተዋል. በዚህ ጊዜ መጨረሻ ላይ አዲስ መስኮት ይፈጠራል.

መዘርዘር 5.6 በየ20 ሰከንድ የክምችት ግብይቶችን ለመቅረጽ የቱቲንግ መስኮቶችን አጠቃቀም የሚያሳይ ኮድ ያሳያል (በsrc/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java ውስጥ ይገኛል)።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
በዚህ ትንሽ ለውጥ ወደ TimeWindows.of ስልት ጥሪ፣ የመጎተት መስኮት መጠቀም ይችላሉ። ይህ ምሳሌ እስከ() ዘዴን አይጠራውም፣ ስለዚህ ነባሪው የ24 ሰአታት የማቆያ ጊዜ ስራ ላይ ይውላል።

በመጨረሻም ወደ መጨረሻው የመስኮት አማራጮች - "መጎተት" መስኮቶች መሄድ ጊዜው ነው.

ተንሸራታች ("መዝለል") መስኮቶች

የሚንሸራተቱ/የሚጎርፉ መስኮቶች ከሚወዛወዙ መስኮቶች ጋር ተመሳሳይ ናቸው፣ ግን ትንሽ ልዩነት አላቸው። የቅርብ ጊዜ ክስተቶችን ለማስኬድ አዲስ መስኮት ከመፍጠሩ በፊት ተንሸራታች መስኮቶች የጊዜ ክፍተት እስኪያበቃ ድረስ አይጠብቁም። አዲስ ስሌቶችን የሚጀምሩት ከተጠባባቂው የጊዜ ክፍተት በኋላ ከመስኮቱ ቆይታ ያነሰ ነው.

በመንኮራኩር እና በመዝለል መስኮቶች መካከል ያለውን ልዩነት ለማሳየት፣ ወደ የአክሲዮን ልውውጥ ግብይቶች መቁጠር ምሳሌ እንመለስ። ግባችን አሁንም የግብይቱን ብዛት መቁጠር ነው፣ ነገር ግን ቆጣሪውን ከማዘመንዎ በፊት ሙሉውን ጊዜ መጠበቅ አንፈልግም። በምትኩ፣ ቆጣሪውን ባጭር ጊዜ እናዘምነዋለን። ለምሳሌ፣ አሁንም በየ20 ሰከንድ የግብይቱን ብዛት እንቆጥራለን፣ ነገር ግን ቆጣሪውን በየ 5 ሰከንድ አዘምን፣ በስእል ላይ እንደሚታየው። 5.15. በዚህ አጋጣሚ, በተደራራቢ ውሂብ በሶስት የውጤት መስኮቶች እንጨርሳለን.

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
መዘርዘር 5.7 ተንሸራታች መስኮቶችን (src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) ላይ የሚገኘውን ኮድ ያሳያል።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
ለቅድመ-By() ዘዴ ጥሪን በማከል የሚወዛወዝ መስኮት ወደ መዝጊያ መስኮት ሊቀየር ይችላል። በምሳሌው ላይ የቁጠባ ክፍተት 15 ደቂቃ ነው.

በዚህ ክፍል ውስጥ የማጠቃለያ ውጤቶችን በጊዜ መስኮቶች እንዴት እንደሚገድቡ አይተዋል. በተለይ ከዚህ ክፍል የሚከተሉትን ሶስት ነገሮች እንድታስታውስ እፈልጋለሁ።

  • የክፍለ ጊዜ መስኮቶች መጠን በጊዜ ገደብ ሳይሆን በተጠቃሚ እንቅስቃሴ የተገደበ ነው;
  • "የሚንቀጠቀጡ" መስኮቶች በተወሰነ ጊዜ ውስጥ ሾለ ክስተቶች አጠቃላይ እይታ ይሰጣሉ;
  • የመስኮቶች መዝለል የቆይታ ጊዜ የተወሰነ ነው፣ ነገር ግን በተደጋጋሚ የሚዘምኑ ናቸው እና በሁሉም መስኮቶች ላይ ተደራራቢ ግቤቶችን ሊይዙ ይችላሉ።

በመቀጠል፣ እንዴት ለግንኙነት KTableን ወደ KStream መመለስ እንደምንችል እንማራለን።

5.3.3. KStream እና KTable ነገሮችን በማገናኘት ላይ

በምዕራፍ 4፣ ሁለት የKStream ነገሮችን ማገናኘት ተወያይተናል። አሁን KTable እና KStream እንዴት እንደሚገናኙ መማር አለብን። ይህ በሚከተለው ቀላል ምክንያት ሊያስፈልግ ይችላል. KStream የመዝገቦች ዥረት ነው፣ እና KTable የመዝገብ ማሻሻያ ዥረት ነው፣ ነገር ግን አንዳንድ ጊዜ ከKTable ዝመናዎችን በመጠቀም ተጨማሪ አውድ ወደ መዝገብ ዥረቱ ማከል ይፈልጉ ይሆናል።

በአክሲዮን ልውውጥ ግብይቶች ብዛት ላይ ያለውን መረጃ እንውሰድ እና ከአክሲዮን ልውውጥ ዜና ጋር ለሚመለከታቸው ኢንዱስትሪዎች እናጣምር። ከዚህ ቀደም ካለህ ኮድ አንጻር ይህንን ለማሳካት ምን ማድረግ እንዳለብህ እነሆ።

  1. የ KTable ነገር በአክሲዮን ግብይቶች ብዛት ላይ መረጃ ያለው ወደ KStream ይለውጡ፣ በመቀጠልም ቁልፉን በመተካት የኢንደስትሪውን ዘርፍ ከዚህ የአክሲዮን ምልክት ጋር የሚስማማውን ቁልፍ በመቀየር።
  2. ከአንድ ርዕስ ላይ መረጃን ከአክሲዮን ልውውጥ ዜና ጋር የሚያነብ የKTable ነገር ይፍጠሩ። ይህ አዲስ KTable በኢንዱስትሪ ዘርፍ ይከፋፈላል.
  3. በኢንዱስትሪ ዘርፍ የአክሲዮን ልውውጥ ግብይቶች ብዛት ላይ ካለው መረጃ ጋር የዜና ዝመናዎችን ያገናኙ።

አሁን ይህንን የድርጊት መርሃ ግብር እንዴት ተግባራዊ ማድረግ እንደሚቻል እንይ.

KTableን ወደ KStream ቀይር

KTableን ወደ KStream ለመቀየር የሚከተሉትን ማድረግ ያስፈልግዎታል።

  1. ወደ KTable.toStream() ዘዴ ይደውሉ።
  2. የKStream.map ዘዴን በመደወል ቁልፉን በኢንዱስትሪው ስም ይተኩ እና ከዚያ የ TransactionSummary ነገርን ከመስኮት ምሳሌ ያውጡ።

እነዚህን ክዋኔዎች በሚከተለው መንገድ ሰንሰለት እናደርጋለን (ኮዱ በፋይል src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (ዝርዝር 5.8) ላይ ይገኛል።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
የKStream.map ክዋኔ እየሰራን ስለሆነ፣ የተመለሰው የKStream ምሳሌ በግንኙነት ውስጥ ጥቅም ላይ ሲውል በራስ ሰር እንደገና ይከፋፈላል።

የመቀየር ሂደቱን አጠናቅቀናል፣ በመቀጠል የአክሲዮን ዜና ለማንበብ KTable ነገር መፍጠር አለብን።

ለአክሲዮን ዜና የ KTable መፍጠር

እንደ እድል ሆኖ፣ የ KTable ነገር መፍጠር አንድ የኮድ መስመር ብቻ ነው የሚወስደው (ኮዱ በ ​​src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (ዝርዝር 5.9) ላይ ይገኛል።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
ሕብረቁምፊ Serdes በቅንብሮች ውስጥ ጥቅም ላይ ስለዋለ ምንም የሰርዴ ዕቃዎች መገለጽ እንደሌለባቸው ልብ ሊባል ይገባል። እንዲሁም፣ የቀደሙትን ቆጠራ በመጠቀም፣ ሰንጠረዡ ገና መጀመሪያ ላይ በመዝገቦች የተሞላ ነው።

አሁን ወደ መጨረሻው ደረጃ መሄድ እንችላለን - ግንኙነት.

የዜና ማሻሻያዎችን ከግብይት ቆጠራ ውሂብ ጋር በማገናኘት ላይ

ግንኙነት መፍጠር አስቸጋሪ አይደለም. ለሚመለከተው ኢንዱስትሪ ምንም ዓይነት የአክሲዮን ዜና ከሌለ የግራ መቀላቀልን እንጠቀማለን (አስፈላጊው ኮድ በፋይል src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java) (ዝርዝር 5.10)።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
ይህ የግራ መቀላቀል ኦፕሬተር በጣም ቀላል ነው። በምዕራፍ 4 ውስጥ ካሉት መጋጠሚያዎች በተለየ የ JoinWindow ዘዴ ጥቅም ላይ አይውልም ምክንያቱም የKStream-KTable መቀላቀልን ሲያካሂዱ በ KTable ውስጥ ለእያንዳንዱ ቁልፍ አንድ ግቤት ብቻ አለ። እንዲህ ዓይነቱ ግንኙነት በጊዜ ውስጥ የተገደበ አይደለም: መዝገቡ በ KTable ውስጥ ወይም የለም. ዋናው መደምደሚያ፡ KTable ነገሮችን በመጠቀም KStream ባነሰ በተደጋጋሚ የዘመነ የማጣቀሻ ውሂብ ማበልጸግ ይችላሉ።

አሁን ከKStream የሚመጡ ክስተቶችን ለማበልጸግ ይበልጥ ቀልጣፋ መንገድን እንመለከታለን።

5.3.4. GlobalKTable ነገሮች

እንደምታየው፣ የክስተት ዥረቶችን ማበልፀግ ወይም አውድ ማከል ያስፈልጋል። በምዕራፍ 4 ላይ በሁለት የKStream ነገሮች መካከል ያለውን ግንኙነት አይተሃል፣ እና ባለፈው ክፍል በKStream እና በKTable መካከል ያለውን ግንኙነት አይተሃል። በነዚህ ሁሉ አጋጣሚዎች ቁልፎቹን ወደ አዲስ ዓይነት ወይም እሴት ሲያዘጋጁ የውሂብ ዥረቱን እንደገና መከፋፈል አስፈላጊ ነው. አንዳንድ ጊዜ እንደገና መከፋፈል በግልፅ ይከናወናል ፣ እና አንዳንድ ጊዜ የካፍካ ዥረቶች በራስ-ሰር ያደርገዋል። እንደገና መከፋፈል አስፈላጊ ነው ምክንያቱም ቁልፎቹ ተለውጠዋል እና መዝገቦቹ በአዲስ ክፍሎች ውስጥ መጨረስ አለባቸው, አለበለዚያ ግንኙነቱ የማይቻል ይሆናል (ይህ በምዕራፍ 4, በክፍል 4.2.4 ውስጥ "መረጃን እንደገና መከፋፈል" በሚለው ክፍል ውስጥ ተብራርቷል).

እንደገና መከፋፈል ዋጋ አለው።

እንደገና መከፋፈል ወጪዎችን ይጠይቃል - መካከለኛ ርዕሶችን ለመፍጠር ተጨማሪ የንብረት ወጪዎች, የተባዛ ውሂብ በሌላ ርዕስ ውስጥ ማከማቸት; በተጨማሪም ከዚህ ርዕስ በመጻፍ እና በማንበብ ምክንያት መዘግየት መጨመር ማለት ነው. በተጨማሪም፣ ከአንድ በላይ ገጽታ ወይም ልኬት ላይ መቀላቀል ከፈለጉ፣ መጋጠሚያዎቹን በሰንሰለት ማድረግ፣ መዝገቦቹን በአዲስ ቁልፎች ካርታ ማድረግ እና እንደገና የመከፋፈል ሂደቱን ማከናወን አለብዎት።

ወደ ትናንሽ የውሂብ ስብስቦች በመገናኘት ላይ

በአንዳንድ ሁኔታዎች, የሚገናኘው የማጣቀሻ መረጃ መጠን በአንጻራዊነት ትንሽ ነው, ስለዚህ የተሟሉ ቅጂዎች በእያንዳንዱ መስቀለኛ መንገድ ላይ በቀላሉ ሊገጣጠሙ ይችላሉ. ለእንደዚህ አይነት ሁኔታዎች የካፍካ ዥረቶች የ GlobalKTable ክፍልን ያቀርባል።

የ GlobalKTable አጋጣሚዎች ልዩ ናቸው ምክንያቱም አፕሊኬሽኑ ሁሉንም መረጃዎች ወደ እያንዳንዱ አንጓዎች ይደግማል። እና ሁሉም መረጃዎች በእያንዳንዱ መስቀለኛ መንገድ ላይ ስለሚገኙ, ለሁሉም ክፍልፋዮች እንዲገኝ የዝግጅቱን ዥረት በማጣቀሻ መረጃ ቁልፍ መከፋፈል አያስፈልግም. እንዲሁም GlobalKTable ነገሮችን በመጠቀም የቁልፍ አልባ መጋጠሚያዎችን ማድረግ ይችላሉ። ይህንን ባህሪ ለማሳየት ከቀደሙት ምሳሌዎች ወደ አንዱ እንመለስ።

የKStream ነገሮችን ከ GlobalKTable ነገሮች ጋር በማገናኘት ላይ

በንዑስ አንቀጽ 5.3.2 ውስጥ በገዢዎች የልውውጥ ግብይቶችን የመስኮት ማሰባሰብን አከናውነናል. የዚህ ድምር ውጤት ይህን ይመስላል።

{customerId='074-09-3705', stockTicker='GUTM'}, 17
{customerId='037-34-5184', stockTicker='CORK'}, 16

እነዚህ ውጤቶች ለዓላማው ቢያበቁም፣ የደንበኛው ስም እና ሙሉ የኩባንያው ስም ቢታይ ኖሮ የበለጠ ጠቃሚ ነበር። የደንበኞችን ስም እና የኩባንያውን ስም ለመጨመር መደበኛ መቀላቀልን ማድረግ ይችላሉ, ነገር ግን ሁለት ቁልፍ ካርታዎችን ማድረግ እና እንደገና መከፋፈል ያስፈልግዎታል. በ GlobalKTable የእንደዚህ አይነት ስራዎች ወጪን ማስወገድ ይችላሉ.

ይህንን ለማድረግ ከዝርዝር 5.11 ያለውን የcountStream ነገር እንጠቀማለን (ተዛማጁ ኮድ በ src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) እና ከሁለት GlobalKTable ነገሮች ጋር እናገናኘዋለን።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
ከዚህ በፊት ተወያይተናል፣ ስለዚህ አልደግመውም። ነገር ግን በtoStream() ውስጥ ያለው ኮድ ለንባብ ሲባል ከውስጥ መስመር ላምዳ አገላለጽ ይልቅ ወደ ተግባር ነገር መወሰዱን አስተውያለሁ።

ቀጣዩ ደረጃ የ GlobalKTable ሁለት አጋጣሚዎችን ማወጅ ነው (የሚታየው ኮድ በፋይል src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (ዝርዝር 5.12) ላይ ይገኛል።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"

እባክዎን የርዕስ ስሞች የተዘረዘሩ ዓይነቶችን በመጠቀም እንደሚገለጹ ልብ ይበሉ።

አሁን ሁሉም ክፍሎች ዝግጁ ስላሉን፣ የሚቀረው የግንኙነቱን ኮድ መፃፍ ብቻ ነው (ይህም በፋይሉ src/main/java/bbejeck/chapter_5/GlobalKTableExample.java) (ዝርዝር 5.13) ላይ ይገኛል።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
በዚህ ኮድ ውስጥ ሁለት መጋጠሚያዎች ቢኖሩም, ሁለቱም ውጤታቸው ለየብቻ ጥቅም ላይ ስለማይውል በሰንሰለት ታስረዋል. ውጤቶቹ በጠቅላላው ቀዶ ጥገና መጨረሻ ላይ ይታያሉ.

ከላይ ያለውን የመቀላቀል ስራ ሲሰሩ እንደዚህ አይነት ውጤት ያገኛሉ፡-

{customer='Barney, Smith' company="Exxon", transactions= 17}

ዋናው ነገር አልተለወጠም, ነገር ግን እነዚህ ውጤቶች የበለጠ ግልጽ ናቸው.

እስከ ምእራፍ 4 ድረስ ብትቆጥሩ ብዙ አይነት ግንኙነቶችን በተግባር አይተሃል። እነሱ በሰንጠረዥ ውስጥ ተዘርዝረዋል. 5.2. ይህ ሰንጠረዥ እንደ የካፍካ ዥረቶች ስሪት 1.0.0 የግንኙነት አቅሞችን ያንፀባርቃል። ወደፊት በሚለቀቁት እትሞች ላይ የሆነ ነገር ሊለወጥ ይችላል።

መጽሐፉ "የካፍካ ዥረቶች በተግባር ላይ ናቸው. አፕሊኬሽኖች እና ጥቃቅን አገልግሎቶች ለእውነተኛ ጊዜ ሥራ"
ነገሮችን ለማጠቃለል፣ መሰረታዊ ነገሮችን እንደገና እንይ፡ የክስተት ዥረቶችን (KStream) ማገናኘት እና ዥረቶችን ማዘመን (KTable) local stateን መጠቀም ይችላሉ። በአማራጭ፣ የማጣቀሻው መጠን በጣም ትልቅ ካልሆነ፣ GlobalKTable ን መጠቀም ይችላሉ። GlobalKTables ቁልፉ ከየትኛውም ክፍልፍል ምንም ይሁን ምን ሁሉም መረጃዎች መኖራቸውን በማረጋገጥ ሁሉንም ክፋዮች ወደ እያንዳንዱ የካፍ ዥረቶች መተግበሪያ መስቀለኛ መንገድ ይደግማሉ።

በመቀጠል የካፍ ዥረቶች ባህሪን እናያለን፣ ለዚህም ምስጋና ይግባውና የካፍካ ርዕስ ውሂብ ሳንጠቀም የስቴት ለውጦችን መመልከት እንችላለን።

5.3.5. ሊጠየቅ የሚችል ሁኔታ

ሁኔታን የሚያካትቱ በርካታ ስራዎችን አስቀድመን ሠርተናል እና ሁልጊዜ ውጤቱን ወደ ኮንሶል (ለልማት ዓላማዎች) እናወጣለን ወይም ወደ ርዕስ (ለምርት ዓላማዎች) እንጽፋለን። በአንድ ርዕስ ላይ ውጤቶችን በሚጽፉበት ጊዜ, እነሱን ለማየት የካፍካ ሸማች መጠቀም አለብዎት.

ከእነዚህ አርእስቶች ውስጥ መረጃን ማንበብ እንደ ተጨባጭ እይታዎች አይነት ሊቆጠር ይችላል. ለዓላማችን፣ ከዊኪፔዲያ የቁስ እይታን ፍቺ ልንጠቀም እንችላለን፡ “...የጥያቄ ውጤቶችን የያዘ አካላዊ ዳታቤዝ ነገር። ለምሳሌ፣ የአካባቢ የርቀት ውሂብ ቅጂ፣ ወይም የረድፎች እና/ወይም የሠንጠረዡ አምዶች ንዑስ ስብስብ ወይም ውጤትን መቀላቀል፣ ወይም በማጠቃለያ የተገኘ ማጠቃለያ ሊሆን ይችላል።” (https://en.wikipedia.org/wiki) /ቁሳዊ_ዕይታ)።

የካፍ ዥረቶች እንዲሁ በመንግስት መደብሮች ላይ በይነተገናኝ መጠይቆችን እንዲያሄዱ ይፈቅድልዎታል፣ ይህም እነዚህን ቁሳዊ እይታዎች በቀጥታ እንዲያነቡ ያስችልዎታል። ወደ የስቴት ማከማቻ መጠይቁ ተነባቢ-ብቻ ስራ መሆኑን ልብ ሊባል የሚገባው ጉዳይ ነው። ይህ መተግበሪያዎ ውሂብን በማሰናዳት ላይ እያለ በድንገት ሁኔታን የማይጣጣም ለማድረግ መጨነቅ እንደሌለብዎት ያረጋግጣል።

የግዛት መደብሮችን በቀጥታ የመጠየቅ ችሎታ አስፈላጊ ነው። ይህ ማለት መጀመሪያ ከካፍ ሸማች መረጃ ማምጣት ሳያስፈልግ ዳሽቦርድ አፕሊኬሽኖችን መፍጠር ይችላሉ። እንዲሁም የመተግበሪያውን ውጤታማነት ይጨምራል, ምክንያቱም እንደገና ውሂብ መጻፍ አያስፈልግም.

  • ለውሂቡ አከባቢ ምስጋና ይግባውና በፍጥነት ሊደረስባቸው ይችላል;
  • ወደ ውጫዊ ማከማቻ ስላልተጻፈ የውሂብ ማባዛት ይወገዳል.

እንዲያስታውሱት የምፈልገው ዋናው ነገር ከማመልከቻዎ ውስጥ ሆነው በቀጥታ መጠይቅ መግለጽ ይችላሉ። ይህ የሚሰጣችሁ እድሎች ሊጋነኑ አይችሉም። ከካፍካ የተገኘውን መረጃ ከመጠቀም እና ለመተግበሪያው የውሂብ ጎታ ውስጥ መዝገቦችን ከማጠራቀም ይልቅ የስቴት መደብሮችን በተመሳሳይ ውጤት መጠየቅ ይችላሉ. ለስቴት መደብሮች ቀጥተኛ መጠይቆች ማለት አነስተኛ ኮድ (ተጠቃሚ የለም) እና ያነሰ ሶፍትዌር (ውጤቶቹን ለማከማቸት የውሂብ ጎታ ሰንጠረዥ አያስፈልግም) ማለት ነው.

በዚህ ምእራፍ ውስጥ ትንሽ ነገር ሸፍነናል፣ ስለዚህ በመንግስት መደብሮች ላይ በይነተገናኝ ጥያቄዎች ላይ ውይይታችንን ለጊዜው እንተወዋለን። ግን አይጨነቁ፡ በምዕራፍ 9 ላይ፣ በይነተገናኝ መጠይቆችን የያዘ ቀላል ዳሽቦርድ መተግበሪያን እንፈጥራለን። በይነተገናኝ መጠይቆችን እና እንዴት ወደ የካፍ ዥረቶች አፕሊኬሽኖች ማከል እንደምትችል ለማሳየት ከዚህ እና ካለፉት ምዕራፎች የተወሰኑ ምሳሌዎችን ይጠቀማል።

ማጠቃለያ

  • የKStream ነገሮች ወደ ዳታቤዝ ከማስገባት ጋር ሲወዳደር የክስተቶችን ጅረቶች ይወክላሉ። የKTable ነገሮች እንደ የውሂብ ጎታ ማሻሻያ ያሉ የዝማኔ ዥረቶችን ይወክላሉ። የ KTable ነገር መጠን አያድግም, አሮጌ መዝገቦች በአዲሶቹ ይተካሉ.
  • KTable ነገሮች ለማዋሃድ ስራዎች ያስፈልጋሉ።
  • የመስኮት ክዋኔዎችን በመጠቀም ፣የተጠቃለለ መረጃን በጊዜ ባልዲዎች መከፋፈል ይችላሉ።
  • ለGlobalKTable ነገሮች ምስጋና ይግባውና መከፋፈል ምንም ይሁን ምን በመተግበሪያው ውስጥ በማንኛውም ቦታ የማጣቀሻ ውሂብ ማግኘት ይችላሉ።
  • በKStream፣ KTable እና GlobalKTable ነገሮች መካከል ግንኙነቶች ሊኖሩ ይችላሉ።

እስካሁን፣ ከፍተኛ ደረጃ KStream DSL በመጠቀም የካፍ ዥረቶችን አፕሊኬሽኖች በመገንባት ላይ አተኩረናል። ምንም እንኳን የከፍተኛ ደረጃ አቀራረብ ንፁህ እና አጠር ያሉ ፕሮግራሞችን እንዲፈጥሩ ቢፈቅድም, እሱን መጠቀም የንግድ ልውውጥን ይወክላል. ከ DSL KStream ጋር መስራት ማለት የቁጥጥር ደረጃን በመቀነስ የኮድዎን አጭርነት መጨመር ማለት ነው። በሚቀጥለው ምእራፍ ዝቅተኛ ደረጃ ተቆጣጣሪ መስቀለኛ መንገድ ኤፒአይን እንመለከታለን እና ሌሎች ግብይቶችን እንሞክራለን። ፕሮግራሞቹ ከበፊቱ የበለጠ ይረዝማሉ፣ ነገር ግን የሚያስፈልገንን ማንኛውንም ተቆጣጣሪ መስቀለኛ መንገድ መፍጠር እንችላለን።

→ ስለ መጽሐፉ ተጨማሪ ዝርዝሮች በ ላይ ይገኛሉ የአሳታሚው ድር ጣቢያ

→ ለ Habrozhiteli 25% ኩፖን በመጠቀም ቅናሽ - የካፍካ ዥረቶች

→ ለመጽሐፉ የወረቀት እትም ክፍያ ከተፈጸመ በኋላ ኤሌክትሮኒክ መጽሐፍ በኢሜል ይላካል።

ምንጭ: hab.com

አስተያየት ያክሉ