புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்" வணக்கம், கப்ரோ குடியிருப்பாளர்களே! நூல் செயலாக்கத்தைப் புரிந்துகொள்ள விரும்பும் எந்தவொரு டெவலப்பருக்கும் இந்தப் புத்தகம் பொருத்தமானது. விநியோகிக்கப்பட்ட நிரலாக்கத்தைப் புரிந்துகொள்வது காஃப்கா மற்றும் காஃப்கா ஸ்ட்ரீம்களை நன்கு புரிந்துகொள்ள உதவும். காஃப்கா கட்டமைப்பை அறிந்து கொள்வது நன்றாக இருக்கும், ஆனால் இது தேவையில்லை: உங்களுக்கு தேவையான அனைத்தையும் நான் உங்களுக்கு சொல்கிறேன். அனுபவம் வாய்ந்த காஃப்கா டெவலப்பர்கள் மற்றும் புதியவர்கள் இருவரும் இந்த புத்தகத்தில் உள்ள காஃப்கா ஸ்ட்ரீம்ஸ் லைப்ரரியைப் பயன்படுத்தி சுவாரஸ்யமான ஸ்ட்ரீம் செயலாக்க பயன்பாடுகளை எவ்வாறு உருவாக்குவது என்பதைக் கற்றுக்கொள்வார்கள். வரிசையாக்கம் போன்ற கருத்துகளை ஏற்கனவே அறிந்த இடைநிலை மற்றும் மேம்பட்ட ஜாவா டெவலப்பர்கள் காஃப்கா ஸ்ட்ரீம்ஸ் பயன்பாடுகளை உருவாக்க தங்கள் திறன்களைப் பயன்படுத்த கற்றுக்கொள்வார்கள். புத்தகத்தின் மூலக் குறியீடு ஜாவா 8 இல் எழுதப்பட்டுள்ளது மற்றும் ஜாவா 8 லாம்ப்டா வெளிப்பாடு தொடரியல் குறிப்பிடத்தக்க வகையில் பயன்படுத்தப்படுகிறது, எனவே லாம்ப்டா செயல்பாடுகளுடன் (வேறொரு நிரலாக்க மொழியில் கூட) எவ்வாறு வேலை செய்வது என்பதை அறிவது பயனுள்ளதாக இருக்கும்.

பகுதி. 5.3 ஒருங்கிணைப்பு மற்றும் சாளர செயல்பாடுகள்

இந்த பிரிவில், காஃப்கா ஸ்ட்ரீம்களின் மிகவும் நம்பிக்கைக்குரிய பகுதிகளை ஆராய்வோம். காஃப்கா ஸ்ட்ரீம்களின் பின்வரும் அம்சங்களை இதுவரை நாங்கள் உள்ளடக்கியுள்ளோம்:

  • செயலாக்க இடவியல் உருவாக்கம்;
  • ஸ்ட்ரீமிங் பயன்பாடுகளில் மாநிலத்தைப் பயன்படுத்துதல்;
  • தரவு ஸ்ட்ரீம் இணைப்புகளை செயல்படுத்துதல்;
  • நிகழ்வு ஸ்ட்ரீம்கள் (KStream) மற்றும் புதுப்பிப்பு ஸ்ட்ரீம்கள் (KTable) இடையே உள்ள வேறுபாடுகள்.

பின்வரும் எடுத்துக்காட்டுகளில் இந்த அனைத்து கூறுகளையும் ஒன்றாகக் கொண்டு வருவோம். ஸ்ட்ரீமிங் பயன்பாடுகளின் மற்றொரு சிறந்த அம்சமான விண்டோயிங் பற்றியும் நீங்கள் அறிந்து கொள்வீர்கள். எங்கள் முதல் உதாரணம் ஒரு எளிய திரட்டலாக இருக்கும்.

5.3.1. தொழில் துறையின் மூலம் பங்கு விற்பனையின் தொகுப்பு

ஸ்ட்ரீமிங் தரவுகளுடன் பணிபுரியும் போது ஒருங்கிணைத்தல் மற்றும் குழுவாக்கம் ஆகியவை முக்கியமான கருவிகளாகும். பெறப்படும் தனிப்பட்ட பதிவுகளை ஆய்வு செய்வது பெரும்பாலும் போதுமானதாக இல்லை. தரவுகளிலிருந்து கூடுதல் தகவல்களைப் பிரித்தெடுக்க, அவற்றைக் குழுவாக்கி ஒருங்கிணைக்க வேண்டியது அவசியம்.

இந்த எடுத்துக்காட்டில், பல தொழில்களில் உள்ள நிறுவனங்களின் பங்குகளின் விற்பனை அளவைக் கண்காணிக்க வேண்டிய ஒரு நாள் வர்த்தகரின் உடையை நீங்கள் அணிவீர்கள். குறிப்பாக, ஒவ்வொரு துறையிலும் மிகப்பெரிய பங்கு விற்பனையைக் கொண்ட ஐந்து நிறுவனங்களில் நீங்கள் ஆர்வமாக உள்ளீர்கள்.

அத்தகைய திரட்டலுக்குத் தரவை விரும்பிய படிவத்தில் மொழிபெயர்க்க பின்வரும் பல படிகள் தேவைப்படும் (பொதுவாகப் பேசினால்).

  1. மூலப் பங்கு வர்த்தகத் தகவலை வெளியிடும் தலைப்பு அடிப்படையிலான மூலத்தை உருவாக்கவும். பங்கு பரிவர்த்தனை வகையின் பொருளை ஷேர் வால்யூம் வகையின் பொருளுக்கு நாம் வரைபடமாக்க வேண்டும். முக்கிய விஷயம் என்னவென்றால், StockTransaction ஆப்ஜெக்டில் விற்பனை மெட்டாடேட்டா உள்ளது, ஆனால் விற்கப்படும் பங்குகளின் எண்ணிக்கை பற்றிய தரவு மட்டுமே எங்களுக்குத் தேவை.
  2. பங்குச் சின்னத்தின்படி ஷேர் வால்யூம் தரவைக் குழுவாக்கவும். குறியீட்டின் அடிப்படையில் தொகுக்கப்பட்டதும், இந்தத் தரவை பங்கு விற்பனை அளவுகளின் துணைத்தொகைகளாகச் சுருக்கலாம். 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).

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"
கொடுக்கப்பட்ட குறியீடு அதன் சுருக்கம் மற்றும் பல வரிகளில் செய்யப்படும் பெரிய அளவிலான செயல்களால் வேறுபடுகிறது. பில்டர்.ஸ்ட்ரீம் முறையின் முதல் அளவுருவில் நீங்கள் புதிதாக ஒன்றைக் கவனிக்கலாம்: enum வகையின் மதிப்பு AutoOffsetReset.EARLIEST (சமீபத்தியம் உள்ளது), Consumed.withOffsetResetPolicy முறையைப் பயன்படுத்தி அமைக்கவும். ஒவ்வொரு KStream அல்லது KTable க்கும் ஒரு ஆஃப்செட் மீட்டமைப்பு உத்தியைக் குறிப்பிட இந்த எண்முறை வகை பயன்படுத்தப்படலாம் மற்றும் உள்ளமைவிலிருந்து ஆஃப்செட் மீட்டமைப்பு விருப்பத்தை விட முன்னுரிமை பெறுகிறது.

GroupByKey மற்றும் GroupBy

KStream இடைமுகம் பதிவுகளை குழுவாக்க இரண்டு முறைகளைக் கொண்டுள்ளது: GroupByKey மற்றும் GroupBy. இரண்டுமே ஒரு KGroupedTableஐத் தருகிறது, எனவே அவற்றுக்கிடையே என்ன வித்தியாசம் மற்றும் எதை எப்போது பயன்படுத்துவது என்று நீங்கள் யோசித்துக்கொண்டிருக்கலாம்?

KStream இல் உள்ள விசைகள் ஏற்கனவே காலியாக இல்லாதபோது GroupByKey முறை பயன்படுத்தப்படுகிறது. மற்றும் மிக முக்கியமாக, "மறு-பகிர்வு தேவை" கொடி அமைக்கப்படவில்லை.

GroupBy முறையானது, நீங்கள் குழுவாக்கும் விசைகளை மாற்றியுள்ளீர்கள் என்று கருதுகிறது, எனவே மறுபகிர்வுக் கொடி சரி என அமைக்கப்பட்டுள்ளது. GroupBy முறைக்குப் பிறகு சேருதல், திரட்டுதல் போன்றவற்றைச் செய்வது தானாகவே மறுபகிர்வு செய்யும்.
சுருக்கம்: முடிந்தவரை, GroupBy ஐ விட GroupByKey ஐப் பயன்படுத்தவும்.

mapValues ​​மற்றும் groupBy முறைகள் என்ன செய்கின்றன என்பது தெளிவாக உள்ளது, எனவே தொகை() முறையைப் பார்ப்போம் (src/main/java/bbejeck/model/ShareVolume.java இல் காணப்படுகிறது) (பட்டியல் 5.3).

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"
ShareVolume.sum முறையானது பங்கு விற்பனை அளவின் இயங்கும் மொத்தத்தை வழங்குகிறது, மேலும் கணக்கீடுகளின் முழுச் சங்கிலியின் முடிவும் KTable பொருளாகும். . இப்போது KTable வகிக்கும் பங்கு உங்களுக்குப் புரிகிறது. ShareVolume பொருள்கள் வரும்போது, ​​தொடர்புடைய KTable ஆப்ஜெக்ட் சமீபத்திய தற்போதைய புதுப்பிப்பைச் சேமிக்கும். அனைத்து புதுப்பிப்புகளும் முந்தைய shareVolumeKTable இல் பிரதிபலிக்கின்றன என்பதை நினைவில் கொள்வது அவசியம், ஆனால் அனைத்தும் மேலும் அனுப்பப்படவில்லை.

ஒவ்வொரு தொழிற்துறையிலும் அதிக அளவு பங்குகள் வர்த்தகம் செய்யப்படும் ஐந்து நிறுவனங்களுக்கு வருவதற்கு (வர்த்தகம் செய்யப்பட்ட பங்குகளின் எண்ணிக்கையின் அடிப்படையில்) இந்த KTable ஐப் பயன்படுத்துகிறோம். இந்த விஷயத்தில் எங்கள் செயல்கள் முதல் திரட்டலுக்கான செயல்களைப் போலவே இருக்கும்.

  1. தனிப்பட்ட ஷேர் வால்யூம் பொருள்களை தொழில்துறையின் அடிப்படையில் குழுவாக்க மற்றொரு குழு மூலம் செயல்பாட்டைச் செய்யவும்.
  2. ஷேர்வால்யூம் பொருட்களை சுருக்கமாகத் தொடங்கவும். இந்த முறை திரட்டல் பொருள் ஒரு நிலையான அளவு முன்னுரிமை வரிசையில் உள்ளது. இந்த நிலையான அளவு வரிசையில், அதிக அளவு பங்குகள் விற்கப்பட்ட ஐந்து நிறுவனங்கள் மட்டுமே தக்கவைக்கப்படுகின்றன.
  3. முந்தைய பத்தியில் இருந்து வரிசைகளை ஒரு சரம் மதிப்பிற்கு வரைபடமாக்கி, தொழில்துறையின் அடிப்படையில் அதிக வர்த்தகம் செய்யப்பட்ட முதல் ஐந்து பங்குகளை வழங்கவும்.
  4. தலைப்புக்கு சரம் வடிவத்தில் முடிவுகளை எழுதவும்.

படத்தில். படம் 5.10 தரவு ஓட்டம் இடவியல் வரைபடத்தைக் காட்டுகிறது. நீங்கள் பார்க்க முடியும் என, இரண்டாவது சுற்று செயலாக்கம் மிகவும் எளிது.

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"
இந்த இரண்டாவது சுற்றுச் செயலாக்கத்தின் கட்டமைப்பைப் பற்றி இப்போது எங்களுக்குத் தெளிவான புரிதல் இருப்பதால், அதன் மூலக் குறியீட்டிற்கு மாறலாம் (நீங்கள் அதை src/main/java/bbejeck/chapter_5/AggregationsAndReducingExample.java என்ற கோப்பில் காணலாம்) (பட்டியல் 5.4) .

இந்த துவக்கி நிலையான வரிசை மாறியைக் கொண்டுள்ளது. இது java.util.TreeSet க்கான அடாப்டரான தனிப்பயன் பொருளாகும், இது வர்த்தகம் செய்யப்படும் பங்குகளின் இறங்கு வரிசையில் முதல் N முடிவுகளைக் கண்காணிக்கப் பயன்படுகிறது.

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"
நீங்கள் ஏற்கனவே groupBy மற்றும் mapValues ​​அழைப்புகளைப் பார்த்திருக்கிறீர்கள், எனவே நாங்கள் அதற்குள் செல்லமாட்டோம் (KTable.toStream முறையை அழைக்கிறோம், ஏனெனில் KTable.print முறை நிறுத்தப்பட்டுள்ளது). ஆனால் நீங்கள் இன்னும் KTable பதிப்பு aggregate() ஐப் பார்க்கவில்லை, எனவே அதைப் பற்றி விவாதிக்க சிறிது நேரம் செலவிடுவோம்.

நீங்கள் நினைவில் வைத்துள்ளபடி, KTableஐ வேறுபடுத்துவது என்னவென்றால், அதே விசைகளைக் கொண்ட பதிவுகள் புதுப்பிப்புகளாகக் கருதப்படுகின்றன. KTable ஆனது பழைய உள்ளீட்டை புதியதாக மாற்றுகிறது. திரட்டுதல் இதே வழியில் நிகழ்கிறது: அதே விசையுடன் சமீபத்திய பதிவுகள் ஒருங்கிணைக்கப்படுகின்றன. ஒரு பதிவு வந்தவுடன், அது ஒரு சேர் (மொத்த முறை அழைப்பில் இரண்டாவது அளவுரு) பயன்படுத்தி FixedSizePriorityQueue வகுப்பு நிகழ்வில் சேர்க்கப்படும், ஆனால் அதே விசையுடன் மற்றொரு பதிவு ஏற்கனவே இருந்தால், பழைய பதிவு ஒரு கழிப்பியைப் பயன்படுத்தி அகற்றப்படும் (இதில் மூன்றாவது அளவுரு மொத்த முறை அழைப்பு).

இதன் பொருள் என்னவென்றால், எங்கள் திரட்டி, FixedSizePriorityQueue, அனைத்து மதிப்புகளையும் ஒரு விசையுடன் ஒருங்கிணைக்காது, ஆனால் N மிகவும் வர்த்தகம் செய்யப்படும் பங்குகளின் அளவுகளின் நகரும் தொகையைச் சேமிக்கிறது. ஒவ்வொரு உள்வரும் பதிவிலும் இதுவரை விற்கப்பட்ட மொத்த பங்குகளின் எண்ணிக்கை இருக்கும். எந்தெந்த நிறுவனங்களின் பங்குகள் தற்போது அதிகமாக வர்த்தகம் செய்யப்படுகின்றன என்பதைப் பற்றிய தகவலை KTable உங்களுக்கு வழங்கும்.

இரண்டு முக்கியமான விஷயங்களைச் செய்ய நாங்கள் கற்றுக்கொண்டோம்:

  • பொதுவான விசை மூலம் KTable இல் குழு மதிப்புகள்;
  • இந்த குழுவாக்கப்பட்ட மதிப்புகளில் ரோல்அப் மற்றும் திரட்டுதல் போன்ற பயனுள்ள செயல்பாடுகளைச் செய்யவும்.

காஃப்கா ஸ்ட்ரீம்ஸ் பயன்பாட்டின் மூலம் நகரும் தரவின் அர்த்தத்தைப் புரிந்துகொள்வதற்கும், அது என்ன தகவலைக் கொண்டுள்ளது என்பதைப் புரிந்துகொள்வதற்கும் இந்த செயல்பாடுகளை எவ்வாறு செய்வது என்பதை அறிவது முக்கியம்.

இந்த புத்தகத்தில் முன்னர் விவாதிக்கப்பட்ட சில முக்கிய கருத்துக்களையும் ஒன்றாகக் கொண்டு வந்துள்ளோம். அத்தியாயம் 4 இல், ஸ்ட்ரீமிங் பயன்பாட்டிற்கு தவறு-சகிப்புத்தன்மை, உள்ளூர் நிலை எவ்வளவு முக்கியம் என்பதை நாங்கள் விவாதித்தோம். இந்த அத்தியாயத்தில் உள்ள முதல் எடுத்துக்காட்டு, உள்ளூர் மாநிலம் ஏன் மிகவும் முக்கியமானது என்பதை விளக்குகிறது - நீங்கள் ஏற்கனவே பார்த்த தகவலைக் கண்காணிக்க இது உங்களை அனுமதிக்கிறது. உள்ளூர் அணுகல் நெட்வொர்க் தாமதங்களைத் தவிர்க்கிறது, இது பயன்பாட்டை மிகவும் செயல்திறன் மிக்கதாகவும் பிழை-எதிர்ப்புத் தன்மையுடனும் ஆக்குகிறது.

எந்தவொரு ரோல்அப் அல்லது திரட்டல் செயல்பாட்டைச் செய்யும்போது, ​​நீங்கள் மாநில அங்காடியின் பெயரைக் குறிப்பிட வேண்டும். ரோல்அப் மற்றும் ஒருங்கிணைப்பு செயல்பாடுகள் ஒரு KTable நிகழ்வை வழங்கும், மேலும் KTable ஆனது பழைய முடிவுகளை புதியவற்றுடன் மாற்றுவதற்கு மாநில சேமிப்பகத்தைப் பயன்படுத்துகிறது. நீங்கள் பார்த்தது போல், எல்லா புதுப்பிப்புகளும் பைப்லைனில் அனுப்பப்படுவதில்லை, மேலும் இது முக்கியமானது, ஏனெனில் ஒருங்கிணைப்பு செயல்பாடுகள் சுருக்கமான தகவலை உருவாக்க வடிவமைக்கப்பட்டுள்ளன. நீங்கள் உள்ளூர் நிலையைப் பயன்படுத்தவில்லை எனில், KTable அனைத்து ஒருங்கிணைப்பு மற்றும் ரோல்அப் முடிவுகளையும் அனுப்பும்.

அடுத்து, ஒரு குறிப்பிட்ட காலத்திற்குள் ஒருங்கிணைப்பு போன்ற செயல்பாடுகளைச் செய்வதைப் பார்ப்போம் - விண்டோயிங் செயல்பாடுகள் என்று அழைக்கப்படும்.

5.3.2. சாளர செயல்பாடுகள்

முந்தைய பகுதியில், ஸ்லைடிங் கன்வல்யூஷன் மற்றும் திரட்டலை அறிமுகப்படுத்தினோம். பயன்பாடு பங்கு விற்பனை அளவை ஒரு தொடர்ச்சியான ரோல்-அப் செய்தது, அதைத் தொடர்ந்து பரிமாற்றத்தில் அதிகம் வர்த்தகம் செய்யப்பட்ட ஐந்து பங்குகளின் தொகுப்பு.

சில சமயங்களில் இதுபோன்ற தொடர்ச்சியான ஒருங்கிணைப்பு மற்றும் முடிவுகளின் ரோல்-அப் அவசியம். மற்றும் சில நேரங்களில் நீங்கள் குறிப்பிட்ட காலத்திற்கு மட்டுமே செயல்பாடுகளைச் செய்ய வேண்டும். எடுத்துக்காட்டாக, கடந்த 10 நிமிடங்களில் ஒரு குறிப்பிட்ட நிறுவனத்தின் பங்குகள் மூலம் எத்தனை பரிவர்த்தனைகள் செய்யப்பட்டன என்பதைக் கணக்கிடுங்கள். அல்லது கடந்த 15 நிமிடங்களில் எத்தனை பயனர்கள் புதிய விளம்பர பேனரைக் கிளிக் செய்துள்ளனர். ஒரு பயன்பாடு இதுபோன்ற செயல்பாடுகளை பல முறை செய்யலாம், ஆனால் குறிப்பிட்ட காலத்திற்கு (நேர சாளரங்கள்) மட்டுமே பொருந்தும் முடிவுகளுடன்.

வாங்குபவர் மூலம் பரிமாற்ற பரிவர்த்தனைகளை எண்ணுதல்

அடுத்த எடுத்துக்காட்டில், பல வர்த்தகர்கள்-பெரிய நிறுவனங்கள் அல்லது புத்திசாலித்தனமான தனிநபர் நிதியாளர்களில் பங்கு பரிவர்த்தனைகளைக் கண்காணிப்போம்.

இந்த கண்காணிப்புக்கு இரண்டு சாத்தியமான காரணங்கள் உள்ளன. அவற்றில் ஒன்று, சந்தைத் தலைவர்கள் எதை வாங்குகிறார்கள் / விற்கிறார்கள் என்பதைத் தெரிந்து கொள்ள வேண்டும். இந்த பெரிய வீரர்கள் மற்றும் அதிநவீன முதலீட்டாளர்கள் வாய்ப்பைக் கண்டால், அவர்களின் உத்தியைப் பின்பற்றுவது அர்த்தமுள்ளதாக இருக்கும். இரண்டாவது காரணம், சட்டவிரோத உள் வர்த்தகத்தின் சாத்தியமான அறிகுறிகளைக் கண்டறியும் விருப்பம். இதைச் செய்ய, முக்கியமான செய்தி வெளியீடுகளுடன் பெரிய விற்பனை கூர்முனைகளின் தொடர்பை நீங்கள் பகுப்பாய்வு செய்ய வேண்டும்.

இத்தகைய கண்காணிப்பு பின்வரும் படிகளைக் கொண்டுள்ளது:

  • பங்கு பரிவர்த்தனைகள் தலைப்பில் இருந்து படிக்க ஒரு ஸ்ட்ரீம் உருவாக்குதல்;
  • வாங்குபவர் ஐடி மற்றும் பங்கு சின்னம் மூலம் உள்வரும் பதிவுகளை தொகுத்தல். GroupBy முறையை அழைப்பது KGroupedStream வகுப்பின் நிகழ்வை வழங்குகிறது;
  • KGroupedStream.windowedBy முறையானது, நேர சாளரத்திற்கு வரம்பிடப்பட்ட தரவு ஸ்ட்ரீமை வழங்குகிறது, இது சாளரத் திரட்டலை அனுமதிக்கிறது. சாளரத்தின் வகையைப் பொறுத்து, TimeWindowedKStream அல்லது SessionWindowedKStream திரும்பப் பெறப்படும்;
  • திரட்டல் செயல்பாட்டிற்கான பரிவர்த்தனை எண்ணிக்கை. இந்த எண்ணிக்கையில் ஒரு குறிப்பிட்ட பதிவு கணக்கில் எடுத்துக்கொள்ளப்படுகிறதா என்பதை சாளர தரவு ஓட்டம் தீர்மானிக்கிறது;
  • ஒரு தலைப்பில் முடிவுகளை எழுதுதல் அல்லது மேம்பாட்டின் போது அவற்றை கன்சோலில் வெளியிடுதல்.

இந்த பயன்பாட்டின் இடவியல் எளிமையானது, ஆனால் அதன் தெளிவான படம் உதவியாக இருக்கும். படத்தைப் பார்ப்போம். 5.11.

அடுத்து, சாளர செயல்பாடுகளின் செயல்பாடு மற்றும் தொடர்புடைய குறியீட்டைப் பார்ப்போம்.

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"

சாளர வகைகள்

காஃப்கா ஸ்ட்ரீம்களில் மூன்று வகையான ஜன்னல்கள் உள்ளன:

  • அமர்வு;
  • "டம்பல்";
  • நெகிழ்/தள்ளுதல்.

எதைத் தேர்ந்தெடுப்பது என்பது உங்கள் வணிகத் தேவைகளைப் பொறுத்தது. டம்பிங் மற்றும் ஜம்பிங் சாளரங்கள் நேர வரம்பிற்குட்பட்டவை, அதே சமயம் அமர்வு சாளரங்கள் பயனர் செயல்பாட்டின் மூலம் வரையறுக்கப்படுகின்றன-அமர்வின் காலம் (கள்) பயனர் எவ்வளவு சுறுசுறுப்பாக உள்ளது என்பதன் மூலம் மட்டுமே தீர்மானிக்கப்படுகிறது. நினைவில் கொள்ள வேண்டிய முக்கிய விஷயம் என்னவென்றால், அனைத்து சாளர வகைகளும் உள்ளீடுகளின் தேதி/நேர முத்திரைகளை அடிப்படையாகக் கொண்டவை, கணினி நேரம் அல்ல.

அடுத்து, ஒவ்வொரு சாளர வகைகளிலும் எங்கள் இடவியலை செயல்படுத்துகிறோம். முழுமையான குறியீடு முதல் எடுத்துக்காட்டில் மட்டுமே கொடுக்கப்படும்; மற்ற வகை சாளரங்களுக்கு, சாளர செயல்பாட்டின் வகையைத் தவிர வேறு எதுவும் மாறாது.

அமர்வு ஜன்னல்கள்

அமர்வு சாளரங்கள் மற்ற அனைத்து வகையான சாளரங்களிலிருந்தும் மிகவும் வேறுபட்டவை. பயனரின் செயல்பாட்டின் (அல்லது நீங்கள் கண்காணிக்க விரும்பும் நிறுவனத்தின் செயல்பாடு) காலத்தின் அடிப்படையில் அவை வரையறுக்கப்படவில்லை. அமர்வு சாளரங்கள் செயலற்ற காலங்களால் பிரிக்கப்படுகின்றன.

படம் 5.12 அமர்வு சாளரங்களின் கருத்தை விளக்குகிறது. சிறிய அமர்வு அதன் இடதுபுறத்தில் உள்ள அமர்வுடன் ஒன்றிணைக்கும். வலதுபுறத்தில் உள்ள அமர்வு தனித்தனியாக இருக்கும், ஏனெனில் அது நீண்ட கால செயலற்ற தன்மையைப் பின்பற்றுகிறது. அமர்வு சாளரங்கள் பயனர் செயல்பாட்டை அடிப்படையாகக் கொண்டவை, ஆனால் நுழைவு எந்த அமர்வுக்குச் சொந்தமானது என்பதைத் தீர்மானிக்க, உள்ளீடுகளிலிருந்து தேதி/நேர முத்திரைகளைப் பயன்படுத்தவும்.

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"

பங்கு பரிவர்த்தனைகளைக் கண்காணிக்க அமர்வு சாளரங்களைப் பயன்படுத்துதல்

பரிமாற்ற பரிவர்த்தனைகள் பற்றிய தகவல்களைப் பிடிக்க அமர்வு சாளரங்களைப் பயன்படுத்துவோம். அமர்வு சாளரங்களின் செயலாக்கம் பட்டியல் 5.5 இல் காட்டப்பட்டுள்ளது (இதை src/main/java/bbejeck/chapter_5/CountingWindowingAndKTableJoinExample.java இல் காணலாம்).

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"
இந்த இடவியலில் உள்ள பெரும்பாலான செயல்பாடுகளை நீங்கள் ஏற்கனவே பார்த்துவிட்டீர்கள், எனவே அவற்றை மீண்டும் இங்கு பார்க்க வேண்டிய அவசியமில்லை. ஆனால் இங்கே பல புதிய கூறுகளும் உள்ளன, அதை நாம் இப்போது விவாதிப்போம்.

எந்தவொரு குழுவின் செயல்பாடும் பொதுவாக ஒருவித திரட்டல் செயல்பாட்டைச் செய்கிறது (ஒருங்கிணைத்தல், உருட்டல் அல்லது எண்ணுதல்). நீங்கள் மொத்தமாக இயங்கும் மொத்தத் தொகுப்பையோ அல்லது குறிப்பிட்ட நேரச் சாளரத்தில் பதிவுகளை கணக்கில் எடுத்துக்கொள்ளும் சாளரத் திரட்டலையோ செய்யலாம்.

பட்டியல் 5.5 இல் உள்ள குறியீடு அமர்வு சாளரங்களில் உள்ள பரிவர்த்தனைகளின் எண்ணிக்கையைக் கணக்கிடுகிறது. படத்தில். 5.13 இந்த நடவடிக்கைகள் படிப்படியாக பகுப்பாய்வு செய்யப்படுகின்றன.

windowedBy(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 ஆகிய இரண்டு அமர்வுகளும் காணப்படுகின்றன. மூன்று அமர்வுகளும் ஒன்றாக இணைக்கப்பட்டுள்ளன, தொடக்க நேரம் 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 இல் காணப்படுகிறது).

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"
AdvanceBy() முறையில் அழைப்பைச் சேர்ப்பதன் மூலம் ஒரு டம்ப்லிங் சாளரத்தை துள்ளல் சாளரமாக மாற்றலாம். காட்டப்பட்டுள்ள எடுத்துக்காட்டில், சேமிப்பு இடைவெளி 15 நிமிடங்கள் ஆகும்.

ஒருங்கிணைப்பு முடிவுகளை டைம் விண்டோஸுக்கு வரம்பிடுவது எப்படி என்பதை இந்தப் பகுதியில் பார்த்தீர்கள். குறிப்பாக, இந்தப் பகுதியில் இருந்து பின்வரும் மூன்று விஷயங்களை நீங்கள் நினைவில் வைத்துக் கொள்ள விரும்புகிறேன்:

  • அமர்வு சாளரங்களின் அளவு வரையறுக்கப்பட்ட நேரம் அல்ல, ஆனால் பயனர் செயல்பாடு;
  • "டம்பல்" ஜன்னல்கள் ஒரு குறிப்பிட்ட காலத்திற்குள் நிகழ்வுகளின் மேலோட்டத்தை வழங்குகின்றன;
  • ஜம்பிங் சாளரங்களின் காலம் நிலையானது, ஆனால் அவை அடிக்கடி புதுப்பிக்கப்படும் மற்றும் எல்லா சாளரங்களிலும் ஒன்றுடன் ஒன்று உள்ளீடுகளைக் கொண்டிருக்கலாம்.

அடுத்து, இணைப்பிற்காக KTable ஐ மீண்டும் KStream ஆக மாற்றுவது எப்படி என்பதைக் கற்றுக்கொள்வோம்.

5.3.3. KStream மற்றும் KTable பொருட்களை இணைக்கிறது

அத்தியாயம் 4 இல், இரண்டு KStream பொருட்களை இணைப்பது பற்றி விவாதித்தோம். KTable மற்றும் KStream ஐ எவ்வாறு இணைப்பது என்பதை இப்போது நாம் கற்றுக் கொள்ள வேண்டும். பின்வரும் எளிய காரணத்திற்காக இது தேவைப்படலாம். KStream என்பது பதிவுகளின் ஸ்ட்ரீம், மற்றும் KTable என்பது பதிவு புதுப்பிப்புகளின் ஸ்ட்ரீம், ஆனால் சில நேரங்களில் நீங்கள் KTable இலிருந்து புதுப்பிப்புகளைப் பயன்படுத்தி பதிவு ஸ்ட்ரீமில் கூடுதல் சூழலைச் சேர்க்க விரும்பலாம்.

பங்குச் சந்தை பரிவர்த்தனைகளின் எண்ணிக்கையைப் பற்றிய தரவுகளை எடுத்து அவற்றை தொடர்புடைய தொழில்களுக்கான பங்குச் சந்தை செய்திகளுடன் இணைப்போம். உங்களிடம் ஏற்கனவே உள்ள குறியீட்டைக் கொண்டு இதை அடைய நீங்கள் செய்ய வேண்டியது இங்கே.

  1. பங்கு பரிவர்த்தனைகளின் எண்ணிக்கை குறித்த தரவுகளுடன் ஒரு KTable பொருளை KStream ஆக மாற்றவும், அதைத் தொடர்ந்து விசையை இந்தப் பங்குச் சின்னத்துடன் தொடர்புடைய தொழில் துறையைக் குறிக்கும் விசையுடன் மாற்றவும்.
  2. பங்குச் சந்தை செய்திகளுடன் ஒரு தலைப்பிலிருந்து தரவைப் படிக்கும் KTable பொருளை உருவாக்கவும். இந்த புதிய கேடேபிள் தொழில் துறை வாரியாக வகைப்படுத்தப்படும்.
  3. தொழில் துறையின் பங்குச் சந்தை பரிவர்த்தனைகளின் எண்ணிக்கை பற்றிய தகவலுடன் செய்தி புதுப்பிப்புகளை இணைக்கவும்.

இப்போது இந்த செயல் திட்டத்தை எவ்வாறு செயல்படுத்துவது என்று பார்ப்போம்.

KTable ஐ KStream ஆக மாற்றவும்

KTable ஐ KStream ஆக மாற்ற, நீங்கள் பின்வருவனவற்றைச் செய்ய வேண்டும்.

  1. KTable.toStream() முறையை அழைக்கவும்.
  2. KStream.map முறையை அழைப்பதன் மூலம், விசையை தொழில்துறை பெயருடன் மாற்றவும், பின்னர் Windowed நிகழ்வில் இருந்து 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 பயன்படுத்தப்படுவதால், Serde பொருள்கள் எதுவும் குறிப்பிடப்பட வேண்டியதில்லை என்பது குறிப்பிடத்தக்கது. மேலும், ஆரம்பகால கணக்கீட்டைப் பயன்படுத்துவதன் மூலம், அட்டவணை ஆரம்பத்திலேயே பதிவுகளால் நிரப்பப்படுகிறது.

இப்போது நாம் இறுதி கட்டத்திற்கு செல்லலாம் - இணைப்பு.

பரிவர்த்தனை எண்ணிக்கை தரவுகளுடன் செய்தி புதுப்பிப்புகளை இணைக்கிறது

இணைப்பை உருவாக்குவது கடினம் அல்ல. தொடர்புடைய தொழில்துறைக்கான பங்குச் செய்திகள் இல்லாத பட்சத்தில் இடதுபுற இணைப்பைப் பயன்படுத்துவோம் (தேவையான குறியீட்டை src/main/java/bbejeck/chapter_5/CountingWindowingAndKtableJoinExample.java கோப்பில் காணலாம்) (பட்டியல் 5.10).

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"
இந்த leftJoin ஆபரேட்டர் மிகவும் எளிமையானது. அத்தியாயம் 4 இல் உள்ள இணைப்புகளைப் போலன்றி, JoinWindow முறை பயன்படுத்தப்படுவதில்லை, ஏனெனில் KStream-KTable இணைப்பைச் செய்யும்போது, ​​ஒவ்வொரு விசைக்கும் KTableல் ஒரு உள்ளீடு மட்டுமே இருக்கும். அத்தகைய இணைப்பு நேரம் வரையறுக்கப்படவில்லை: பதிவு KTable இல் உள்ளது அல்லது இல்லை. முக்கிய முடிவு: KTable ஆப்ஜெக்ட்களைப் பயன்படுத்தி, குறைவாக அடிக்கடி புதுப்பிக்கப்பட்ட குறிப்புத் தரவைக் கொண்டு KStream ஐ மேம்படுத்தலாம்.

KStream இலிருந்து நிகழ்வுகளை மேம்படுத்துவதற்கான ஒரு சிறந்த வழியை இப்போது பார்ப்போம்.

5.3.4. GlobalKTable objects

நீங்கள் பார்க்க முடியும் என, நிகழ்வு ஸ்ட்ரீம்களை வளப்படுத்த அல்லது அவற்றுக்கு சூழலைச் சேர்க்க வேண்டிய அவசியம் உள்ளது. அத்தியாயம் 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 பட்டியலிலிருந்து கவுண்ட்ஸ்ட்ரீம் பொருளைப் பயன்படுத்துவோம் (தொடர்புடைய குறியீட்டை src/main/java/bbejeck/chapter_5/GlobalKTableExample.java இல் காணலாம்) மற்றும் அதை இரண்டு GlobalKTable ஆப்ஜெக்ட்களுடன் இணைப்போம்.

புத்தகம் “காஃப்கா ஸ்ட்ரீம்ஸ் இன் ஆக்ஷன். நிகழ்நேர வேலைக்கான பயன்பாடுகள் மற்றும் மைக்ரோ சர்வீஸ்கள்"
நாங்கள் ஏற்கனவே இதைப் பற்றி ஏற்கனவே விவாதித்தோம், எனவே நான் அதை மீண்டும் செய்ய மாட்டேன். ஆனால் toStream().map செயல்பாட்டில் உள்ள குறியீடு, வாசிப்புத்திறனுக்காக இன்லைன் லாம்ப்டா வெளிப்பாட்டிற்குப் பதிலாக ஒரு செயல்பாட்டு பொருளாக சுருக்கப்பட்டது என்பதை நான் கவனிக்கிறேன்.

அடுத்த படி 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) புதுப்பிக்கலாம். மாற்றாக, குறிப்புத் தரவின் அளவு பெரிதாக இல்லாவிட்டால், GlobalKTable ஆப்ஜெக்டைப் பயன்படுத்தலாம். GlobalKTables அனைத்து பகிர்வுகளையும் ஒவ்வொரு காஃப்கா ஸ்ட்ரீம்ஸ் அப்ளிகேஷன் முனையிலும் பிரதிபலிக்கிறது, இது எந்த பிரிவிற்கு விசையை ஒத்திருந்தாலும் எல்லா தரவும் கிடைக்கும் என்பதை உறுதி செய்கிறது.

அடுத்து நாம் காஃப்கா ஸ்ட்ரீம்ஸ் அம்சத்தைப் பார்ப்போம், இதற்கு நன்றி காஃப்கா தலைப்பிலிருந்து தரவைப் பயன்படுத்தாமல் மாநில மாற்றங்களைக் காணலாம்.

5.3.5. கேள்விக்குரிய நிலை

நாங்கள் ஏற்கனவே மாநிலத்தை உள்ளடக்கிய பல செயல்பாடுகளைச் செய்துள்ளோம் மற்றும் எப்போதும் முடிவுகளை கன்சோலில் வெளியிடுகிறோம் (மேம்பாடு நோக்கங்களுக்காக) அல்லது அவற்றை ஒரு தலைப்பில் (உற்பத்தி நோக்கங்களுக்காக) எழுதுகிறோம். ஒரு தலைப்புக்கு முடிவுகளை எழுதும் போது, ​​அவற்றைப் பார்க்க நீங்கள் காஃப்கா நுகர்வோரைப் பயன்படுத்த வேண்டும்.

இந்தத் தலைப்புகளில் இருந்து தரவைப் படிப்பது ஒரு வகை பொருள்சார் பார்வைகளாகக் கருதப்படலாம். எங்கள் நோக்கங்களுக்காக, விக்கிப்பீடியாவில் இருந்து பொருள்படுத்தப்பட்ட பார்வையின் வரையறையைப் பயன்படுத்தலாம்: “...ஒரு வினவலின் முடிவுகளைக் கொண்ட ஒரு இயற்பியல் தரவுத்தளப் பொருள். எடுத்துக்காட்டாக, இது தொலைநிலைத் தரவின் உள்ளூர் நகலாக இருக்கலாம் அல்லது அட்டவணையின் வரிசைகள் மற்றும்/அல்லது நெடுவரிசைகளின் துணைக்குழு அல்லது கூட்டு முடிவுகளாக இருக்கலாம் அல்லது தொகுப்பின் மூலம் பெறப்பட்ட சுருக்க அட்டவணையாக இருக்கலாம்” (https://en.wikipedia.org/wiki /பொருளாக்கப்பட்ட_பார்வை).

காஃப்கா ஸ்ட்ரீம்ஸ், மாநில அங்காடிகளில் ஊடாடும் வினவல்களை இயக்கவும் உங்களை அனுமதிக்கிறது, இதன் மூலம் நீங்கள் நேரடியாக இந்தச் செயல்பட்ட காட்சிகளைப் படிக்கலாம். ஸ்டேட் ஸ்டோருக்கு வினவல் படிக்க மட்டுமேயான செயல்பாடு என்பதைக் கவனத்தில் கொள்ள வேண்டும். உங்கள் பயன்பாடு தரவைச் செயலாக்கும் போது, ​​தற்செயலாக நிலை சீரற்றதாக இருப்பதைப் பற்றி நீங்கள் கவலைப்பட வேண்டியதில்லை என்பதை இது உறுதி செய்கிறது.

மாநில கடைகளை நேரடியாக வினவுவதற்கான திறன் முக்கியமானது. காஃப்கா நுகர்வோரிடமிருந்து முதலில் தரவைப் பெறாமல் டாஷ்போர்டு பயன்பாடுகளை உருவாக்கலாம் என்பதே இதன் பொருள். தரவை மீண்டும் எழுத வேண்டிய அவசியமில்லை என்பதால், இது பயன்பாட்டின் செயல்திறனை அதிகரிக்கிறது:

  • தரவுகளின் இருப்பிடத்திற்கு நன்றி, அவற்றை விரைவாக அணுகலாம்;
  • வெளிப்புற சேமிப்பகத்திற்கு எழுதப்படாததால், தரவின் நகல் நீக்கப்பட்டது.

நீங்கள் நினைவில் கொள்ள விரும்பும் முக்கிய விஷயம் என்னவென்றால், உங்கள் விண்ணப்பத்தில் இருந்து நேரடியாக மாநிலத்தை நீங்கள் வினவலாம். இது உங்களுக்கு வழங்கும் வாய்ப்புகளை மிகைப்படுத்த முடியாது. காஃப்காவிலிருந்து தரவைப் பயன்படுத்துவதற்குப் பதிலாக, பயன்பாட்டிற்கான தரவுத்தளத்தில் பதிவுகளைச் சேமிப்பதற்குப் பதிலாக, அதே முடிவைக் கொண்ட மாநிலக் கடைகளில் நீங்கள் வினவலாம். மாநில கடைகளுக்கான நேரடி வினவல்கள் குறைவான குறியீடு (நுகர்வோர் இல்லை) மற்றும் குறைவான மென்பொருள் (முடிவுகளைச் சேமிக்க தரவுத்தள அட்டவணை தேவையில்லை) என்று பொருள்.

இந்த அத்தியாயத்தில் நாங்கள் சிறிது நிலத்தை உள்ளடக்கியுள்ளோம், எனவே ஸ்டேட் ஸ்டோர்களுக்கு எதிரான ஊடாடும் வினவல்கள் பற்றிய எங்கள் விவாதத்தை இப்போதைக்கு விடுவோம். ஆனால் கவலைப்பட வேண்டாம்: அத்தியாயம் 9 இல், ஊடாடும் வினவல்களுடன் எளிமையான டாஷ்போர்டு பயன்பாட்டை உருவாக்குவோம். ஊடாடத்தக்க வினவல்கள் மற்றும் அவற்றை காஃப்கா ஸ்ட்ரீம்ஸ் பயன்பாடுகளில் எவ்வாறு சேர்க்கலாம் என்பதை நிரூபிக்க இது மற்றும் முந்தைய அத்தியாயங்களிலிருந்து சில எடுத்துக்காட்டுகளைப் பயன்படுத்தும்.

சுருக்கம்

  • KStream பொருள்கள் நிகழ்வுகளின் ஸ்ட்ரீம்களைக் குறிக்கின்றன, தரவுத்தளத்தில் உள்ள செருகல்களுடன் ஒப்பிடலாம். KTable ஆப்ஜெக்ட்கள், தரவுத்தளத்திற்கான புதுப்பிப்புகளைப் போன்ற புதுப்பிப்பு ஸ்ட்ரீம்களைக் குறிக்கின்றன. KTable பொருளின் அளவு வளரவில்லை, பழைய பதிவுகள் புதியவற்றால் மாற்றப்படுகின்றன.
  • ஒருங்கிணைப்பு செயல்பாடுகளுக்கு KTable பொருள்கள் தேவை.
  • விண்டோயிங் செயல்பாடுகளைப் பயன்படுத்தி, ஒருங்கிணைக்கப்பட்ட தரவை நேர வாளிகளாகப் பிரிக்கலாம்.
  • GlobalKTable ஆப்ஜெக்ட்டுகளுக்கு நன்றி, பகிர்வுகளைப் பொருட்படுத்தாமல், பயன்பாட்டில் எங்கு வேண்டுமானாலும் குறிப்புத் தரவை அணுகலாம்.
  • KStream, KTable மற்றும் GlobalKTable ஆப்ஜெக்ட்டுகளுக்கு இடையே இணைப்புகள் சாத்தியமாகும்.

இதுவரை, உயர்நிலை KStream DSL ஐப் பயன்படுத்தி காஃப்கா ஸ்ட்ரீம்ஸ் பயன்பாடுகளை உருவாக்குவதில் கவனம் செலுத்தியுள்ளோம். உயர் மட்ட அணுகுமுறை உங்களை நேர்த்தியான மற்றும் சுருக்கமான நிரல்களை உருவாக்க அனுமதித்தாலும், அதைப் பயன்படுத்துவது ஒரு வர்த்தகத்தை பிரதிபலிக்கிறது. DSL KStream உடன் பணிபுரிவது என்பது கட்டுப்பாட்டின் அளவைக் குறைப்பதன் மூலம் உங்கள் குறியீட்டின் சுருக்கத்தை அதிகரிப்பதாகும். அடுத்த அத்தியாயத்தில், லோ-லெவல் ஹேண்ட்லர் நோட் ஏபிஐயைப் பார்த்து, மற்ற டிரேட்-ஆஃப்களை முயற்சிப்போம். புரோகிராம்கள் முன்பு இருந்ததை விட நீளமாக இருக்கும், ஆனால் நமக்குத் தேவையான எந்த ஹேண்ட்லர் முனையையும் உருவாக்க முடியும்.

→ புத்தகத்தைப் பற்றிய கூடுதல் விவரங்களை இங்கே காணலாம் வெளியீட்டாளரின் இணையதளம்

→ கூப்பனைப் பயன்படுத்தி ஹப்ரோஷிடெலிக்கு 25% தள்ளுபடி - காஃப்கா நீரோடைகள்

→ புத்தகத்தின் காகித பதிப்பிற்கு பணம் செலுத்தியவுடன், ஒரு மின்னணு புத்தகம் மின்னஞ்சல் மூலம் அனுப்பப்படும்.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்