kafka consumer groups ने समझाया

हैलो, यह codeshow है।
इस समय में हम kafka consumer groups के बारे में जानेंगे।
व्यवहार में, consumer को सीधे partition से जोड़ने के बजाय अक्सर consumer groups का उपयोग किया जाता है।
consumer groups consumer को सीधे partition से जोड़ने की तुलना में अधिक स्वचालित partition consume की अनुमति देते हैं।
उदाहरण के लिए, 4 partition से बने topic का consume के लिए, आपको 4 consumer बनाने होंगे जो 0 से 3 तक के partition को देखते हैं।
ऐसा इसलिए है क्योंकि एक consumer केवल एक partition का consume कर सकता है।
हालाँकि, यदि consumer groups का उपयोग किया जाता है, तो एक consumer सभी चार partition का consume कर सकता है।
और जब एक ही समूह में consumer की संख्या बढ़ती है, तो consume के लिए partition स्वचालित रूप से rebalancing है।
सीधे consume partition के विपरीत, संचालन के कई लाभ हैं क्योंकि वे स्वचालित रूप से consume।

हम consumer groups का अभ्यास करेंगे।
पर्यावरण सेटिंग पिछले वीडियो से जारी रहेगी।
kafka अभ्यास के लिए devcontainers चलाएं।
container चलने तक प्रतीक्षा करें।
जब container तैयार हो जाएगा, हम docker desktop खोलेंगे।
kafka container में shell निष्पादित करें।

आइए पहले बनाए गए topic को हटा दें और अभ्यास शुरू करें।
यदि कोई hello topic नहीं है, तो आप इस कदम को छोड़ सकते हैं।

kafka-topics --bootstrap-server kafka:9092 --delete --topic hello

kafka topics कमांड के साथ topic हटाएं।

kafka topics कमांड के साथ दो partition के साथ hello topic बनाएँ।

kafka-topics --bootstrap-server kafka:9092 --create --topic hello --partitions 2

AKHQ के topic मेनू में निर्मित topic की जाँच करें।
मैंने पुष्टि की है कि दो partition हैं।

kafka console consumer कमांड के साथ partition 0 और 1 का consume।

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 0
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 1

पिछले वीडियो में अभ्यास की तरह, हम हाइफ़न के आधार पर key और value produce।
kafka console producer चलाएँ।

kafka-console-producer --bootstrap-server kafka:9092 --topic hello --property "key.separator=-" --property "parse.key=true"

आप देख सकते हैं कि दो consumer संदेशों का consume हैं।
जब consumer partition option के माध्यम से consume है, तो केवल एक partition का consume जा सकता है।
इसलिए, पहले से समाप्त consumer के partition में संचित topic का consume नहीं किया जा सकता है।

फिर, अब से, हम सीधे partition का consume के बजाय consumer groups का उपयोग करेंगे।
चल रहे kafka console consumer को मारें।

किसी मौजूदा कमांड में समूह option जोड़ता है।
समूह option उस समूह की id निर्दिष्ट करता है जहां consumer स्थित है।
work के रूप में समूह id दर्ज करें।

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --partition 0 --group work

आदेश को इच्छित रूप से निष्पादित करने के परिणामस्वरूप त्रुटि होगी।
क्योंकि partition option और समूह option एक ही समय में दर्ज नहीं किए जा सकते हैं।
दो option में से केवल एक ही दर्ज किया जाना चाहिए।
partition option को बाहर करें और kafka console consumer कमांड को फिर से जारी करें।

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

अब, हम AKHQ के माध्यम से consumer groups के संचालन की जाँच करेंगे।
localhost 8080 port के साथ AKHQ से कनेक्ट करें।
AKHQ topics मेनू देखें।
topic की सूची से hello topic का चयन करें।
consumer groups टैब चुनें.
उन consumer groups का चयन करें जिनकी id work है।
topics टैब में, आप वर्तमान में consume topic और partition के बारे में जानकारी देख सकते हैं।
ध्यान दें कि consumer groups एक या अधिक topic का consume कर सकते हैं।
इस अभ्यास में, हम केवल एक topic का consume करेंगे।

AKHQ पृष्ठ पर, सदस्य टैब चुनें।
कॉलम client id, id, host और assignments हैं।
client id consumer की पहचान करने के लिए दर्ज किया गया मान है।
अभ्यास में, आप देख सकते हैं कि ‘ console consumer ‘, shell कमांड का डिफ़ॉल्ट मान दर्ज किया गया है।
client id डुप्लिकेट की अनुमति देता है।
दूसरी ओर, id कॉलम का मान स्वचालित रूप से consumer समूह के भीतर एक अद्वितीय id असाइन किया जाता है।
आप host कॉलम के माध्यम से consumer की host जानकारी देख सकते हैं।
assignments कॉलम में, आप consumer द्वारा consume topic की partition जानकारी देख सकते हैं।
वर्तमान में, यह hello topic के दो partition 0 और 1 का consume है।
फिर, consumer को चलाएं जिसकी ग्रुप id नीचे terminal में work है।

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

AKHQ चरण को ताज़ा करें।
आप देख सकते हैं कि एक और console consumer जुड़ गया है।
client id के लिए, दो console consumer हैं,
आप id कॉलम के माध्यम से देख सकते हैं कि consumer के पास अद्वितीय id मान हैं।

assignments कॉलम पर ध्यान देने वाली एक बात है।
पहले, एक consumer partition 0 और 1 का consume,
चूंकि अब दो consumer हैं, दो consumer क्रमशः partition 0 और 1 का consume।

जब consumer groups में भाग लेने वाले consumer का विन्यास बदला जाता है, consumer स्वचालित रूप से partition rebalancing कर सकते हैं।
ध्यान दें कि चूंकि consumer की संख्या दोगुनी हो गई है, इसलिए इन consumer groups का प्रवाह भी दोगुना हो गया है।

partition rebalancing स्वचालित रूप से partition size से विभाजित consumer की संख्या आवंटित करता है।
यदि partition का size 10 है और दो consumer हैं, तो प्रत्येक 5 का consume है।
इसके विपरीत, आइए उस मामले को देखें जहां consumer का size partition के size से बड़ा है।
मान लीजिए कि 2 partition और 3 consumer हैं, और consumer एक बड़ा है।
terminal में एक नया consumer जोड़ें ताकि work consumer groups में 3 consumer हों।

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

AKHQ पेज को रिफ्रेश करें।
आप देख सकते हैं कि 3 client हैं जिनकी ग्रुप id work है।
वैसे, यदि आप assignments कॉलम की जांच करते हैं, तो आप देख सकते हैं कि दो consumer को partition सौंपा गया है, लेकिन एक consumer नहीं है।
जैसे, यदि consumer की संख्या partition की संख्या से अधिक हो जाती है, तो शेष consumer को partition नहीं सौंपा जाता है।
आपको सावधान रहने की आवश्यकता है क्योंकि आप अपने सर्वर को अनावश्यक रूप से बर्बाद कर सकते हैं।

आइए अपनी प्रयोगशाला में वापस जाएं और एक consumer को terminal में समाप्त करें।
AKHQ पेज को जल्दी से रिफ्रेश करें।
आप देख सकते हैं कि assignments कॉलम में कोई असाइन किए गए partition नहीं हैं।
यदि consumer समूह की consumer संरचना में परिवर्तन होता है,
सभी consumer partition का consume बंद कर देते हैं और rebalancing की प्रतीक्षा करते हैं।
और जब partition rebalancing पूरा हो जाता है, consumer फिर से consume है।
चूंकि यह प्रक्रिया कम है, इसलिए आपको इसे देखने के लिए इसे जल्दी से जांचना होगा।

फिर, consumer के बजाय kafka topics कमांड के साथ,
यदि आप kafka नोड के partition के size को बढ़ाते हैं तो क्या होता है?
क्या शेष consumer तुरंत नए partition का consume?
मैं पुष्टि करने के लिए एक अभ्यास करूँगा।
consumer जोड़ें।

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

AKHQ पेज को रिफ्रेश करें।
आप असाइन न किए गए consumer को assignments कॉलम में देख सकते हैं।
अब kafka topics के साथ partition की संख्या को 3 तक बढ़ाते हैं।

kafka-topics --bootstrap-server kafka:9092 --alter --topic hello --partitions 3

हालांकि, consumer समूह में consumer को जोड़ने या हटाने के विपरीत,
यहां तक कि अगर आप partition को kafka topics कमांड के साथ बढ़ाते हैं, तो यह तुरंत consumer को नहीं सौंपा जाता है।
संदर्भ के लिए, इस अभ्यास में, partition को consumer समूह को आवंटित करने में लगभग 2 मिनट का समय लगा।
देरी हो सकती है, इसलिए यदि आप partition size alter कमांड का उपयोग करने के बाद, जल्दी से प्रक्रिया करना चाहते हैं,
दूसरा तरीका यह है कि consumer को तुरंत जोड़ा जाए।

देरी से निपटने का कारण kafka में topic का क्रम है।
उदाहरण के लिए, मान लें कि topic A को topic B को संसाधित करने से पहले संसाधित किया जाना चाहिए।
हालाँकि, A विभाजन 0 पर है,
बी को विभाजन # 1 पर संग्रहीत माना जाता है।
यदि partition 0 में 1 मिनट की देरी हो रही है, तो partition 1 में B का consume पहले किया जाता है,
जब विलंब समाप्त होता है और एक topic partition 0 के माध्यम से consume है,
A को B से पहले सहेजा जाना चाहिए, लेकिन B को पहले सहेजा जाता है, इसलिए त्रुटि होती है।
चूंकि kafka partition द्वारा आदेश की गारंटी देता है,
ए और बी topic जिन्हें क्रम की आवश्यकता होती है वे एक ही key का उपयोग करते हैं ताकि उन्हें एक ही partition में संग्रहीत किया जा सके।
consumer समूह के रूप में, जब एक consumer दो या दो से अधिक partition का consume है,
आपको topic में मेटा जानकारी की जांच करने, partition की जानकारी पढ़ने और प्रत्येक partition को अलग से संसाधित करने की आवश्यकता है।
मैं इसे दूसरे वीडियो में कोड के माध्यम से जांचूंगा।

अंत में, आइए consumer groups में offset प्रबंधित करने पर एक नज़र डालें।
मौजूदा partition संख्या के साथ सीधे consume समय, offset जानकारी को प्रत्येक consumer के लिए अलग से प्रबंधित नहीं किया जाता है।
हालाँकि, consumer groups समूह id के आधार पर प्रति partition संसाधित अंतिम offset जानकारी रिकॉर्ड करता है।
इसलिए, यदि एक विशिष्ट consumer विफलता के कारण समाप्त हो जाता है, partition तुरंत दूसरे consumer को सौंपा जाता है, और अंतिम संसाधित offset से consume शुरू की जा सकती है।
terminal में दो consumer और producer चलाएं।

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work
kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work
kafka-console-producer --bootstrap-server kafka:9092 --topic hello --property "key.separator=-" --property "parse.key=true"

उसी कुंजी को दर्ज करके topic प्रकाशित करें।
जांचें कि एक consumer consume है।
topic प्राप्त करने वाले consumer को मार दें।
producer के समान key के साथ topic को फिर से प्रकाशित करें।
आप देख सकते हैं कि consumer को पहले topic प्राप्त नहीं हुआ था, वह अब topic को संसाधित कर रहा है।
फिर हम सभी consumer को बंद कर देंगे।
producer के रूप में विभिन्न key के साथ topic प्रकाशित करें।

consumer को kafka console consumer के रूप में फिर से चलाएँ।

kafka-console-consumer --bootstrap-server kafka:9092 --topic hello --group work

आप देख सकते हैं कि असंसाधित topic का consume है।

इस तरह, यदि आप kafka का उपयोग करते हैं, भले ही consumer विफल हो जाए, तो आप प्रसंस्करण पूरा होने के बाद offset से काम कर सकते हैं, जिससे आप अंतिम स्थिरता प्राप्त कर सकते हैं।
kafka से आप स्थिर सेवा संचालन प्राप्त कर सकते हैं।

संदर्भ के लिए, consumer समूह के लिए offset जानकारी consumer offsets topic में पाई जा सकती है।
आप AKHQ topics पृष्ठ पर ‘ all topics show ‘ का चयन करके और उसे खोजकर consumer offsets topic देख सकते हैं।
यदि आप consumer offsets topic के नीचे ‘ live tail’ बटन दबाते हैं, तो आप वास्तविक समय में topic की जांच कर सकते हैं।
यदि आपके पास topic में key के रूप में समूह id, topic, partition संख्या है और विवरण दृश्य पर क्लिक करें, तो आप offset जानकारी खोज सकते हैं।
यह consumer groups को संसाधित offset संख्या देखने की अनुमति देता है।

यह consumer groups की व्याख्या को समाप्त करता है।

कंटेंट क्रिएटर्स के लिए सूचनाओं की तरह सेटिंग करना बहुत मददगार है।
धन्यवाद