प्रतिनिधि इंटरव्यू विषय

बैकएंड इंटरव्यू: रोलिंग रीस्टार्ट के लिए आप Kafka Static Membership का उपयोग कैसे करेंगे?

बैकएंडकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

एक Kafka कंज्यूमर ग्रुप रोलिंग डिप्लॉयमेंट के दौरान बार-बार रीबैलेंस होता है, जिससे लेटेंसी स्पाइक्स (विलंबता में उछाल) आते हैं। समझाएं कि स्टैटिक मेंबरशिप (static membership) इस चर्न को कैसे कम करती है और यह किन समस्याओं को हल नहीं कर सकती है।

प्रश्न और यह कब लागू होता है

एक कंज्यूमर ग्रुप रिप्लेसेबल इंस्टेंसेस पर चलता है। रीस्टार्ट या नेटवर्क में संक्षिप्त रुकावटें पार्टीशन रीअसाइनमेंट को ट्रिगर करती हैं, जिससे रुकावटें और लेटेंसी स्पाइक्स उत्पन्न होते हैं। केवल एक कॉन्फ़िगरेशन का नाम लेने के बजाय स्टैटिक मेंबर आइडेंटिटी, कोऑर्डिनेटर के व्यवहार, डिप्लॉयमेंट क्रम, टाइमआउट और विफलता सीमाओं की व्याख्या करें।

इंटरव्यूअर क्या मूल्यांकन करता है

  • डायनेमिक मेंबर्स, स्टैटिक मेंबर्स और पार्टीशन असाइनर्स के बीच अंतर करना।
  • group.instance.id की विशिष्टता, सेशन टाइमआउट और डुप्लिकेट-ID फेंसिंग जोखिम की व्याख्या करना।
  • कंज्यूमर सेटिंग्स को रोलिंग डिप्लॉयमेंट, ग्रेसफुल शटडाउन और मॉनिटरिंग से जोड़ना।
  • यह बताना कि टोपोलॉजी, टाइमआउट या वास्तविक विफलता के कारण स्टैटिक मेंबरशिप में अभी भी रीबैलेंस कब होता है।

उत्तर देने से पहले स्पष्टीकरण हेतु प्रश्न

  1. क्या प्रत्येक इंस्टेंस की एक स्थिर और विशिष्ट पहचान है, या इसे यादृच्छिक रूप से बदला जाता है?
  2. रीस्टार्ट में कितना समय लगता है, और session.timeout.ms तथा ब्रोकर की सीमाएं क्या हैं?
  3. क्या ग्रुप eager या cooperative असाइनमेंट का उपयोग कर रहा है, और क्या वह माइग्रेशन भी होना चाहिए?
  4. अधिकतम स्वीकार्य पॉज़ और लैग-रिकवरी समय क्या हैं?
  5. डिप्लॉयमेंट यह कैसे सुनिश्चित करता है कि पुरानी इंस्टेंस अपनी ID का पुन: उपयोग करने से पहले बाहर निकल जाए?

30-सेकंड उत्तर का फ्रेमवर्क

मैं प्रत्येक कंज्यूमर को एक स्थिर विशिष्ट group.instance.id असाइन करूँगा, जिससे सेशन टाइमआउट के भीतर एक संक्षिप्त रीस्टार्ट नई यादृच्छिक मेंबर ID के लिए पूर्ण रीअसाइनमेंट को ट्रिगर करने के बजाय मेंबरशिप को बनाए रखने की अनुमति देगा। डिप्लॉयमेंट एक समय में एक स्लॉट को बदलता है और समवर्ती रूप से कभी भी किसी ID का पुन: उपयोग नहीं करता है। स्टैटिक मेंबरशिप असाइनर माइग्रेशन की जगह नहीं लेती है और न ही लंबी विफलताओं को छुपाती है, इसलिए मैं रीबैलेंस काउंट, पार्टीशन-अनुपलब्ध समय, कंज्यूमर लेटेंसी और डुप्लिकेट-ID एरर्स को मान्य करूँगा।

चरण-दर-चरण गहन विश्लेषण

चरण 1: मेंबर आइडेंटिटी मॉडल की पुष्टि करें

डायनेमिक मेंबर्स आमतौर पर एक जेनरेट की गई मेंबर ID के साथ जुड़ते हैं जो प्रोसेस के हटने के बाद बदल जाती है। एक स्टैटिक मेंबर की पहचान group.instance.id द्वारा की जाती है, जो ग्रुप के भीतर अद्वितीय होनी चाहिए और रीस्टार्ट के दौरान बनी रहनी चाहिए। इसे प्रत्येक स्टार्ट पर जेनरेट होने वाले रैंडम UUID के बजाय StatefulSet ऑर्डिनल, मशीन स्लॉट या नियंत्रित लीज से प्राप्त करें।

चरण 2: सेशन-टाइमआउट सीमा को समझें

हार्टबीट्स रुकने के बाद, कोऑर्डिनेटर तुरंत स्टैटिक मेंबर को स्थायी रूप से चला गया नहीं मानता; यह सेशन टाइमआउट के बाद मेंबर को विफल घोषित करता है। बहुत कम टाइमआउट सामान्य डिप्लॉयमेंट में रीबैलेंस का कारण बनता है; बहुत लंबा टाइमआउट वास्तविक विफलता के बाद टेकओवर में देरी करता है। इसे ब्रोकर सीमाओं के भीतर स्टार्टअप समय, नेटवर्क जिटर और व्यावसायिक पॉज़ बजट के आधार पर सेट करें।

चरण 3: डुप्लिकेट IDs को रोकें

एक ग्रुप में दो सक्रिय इंस्टेंस एक group.instance.id साझा नहीं कर सकते। ऑर्केस्ट्रेशन को प्रतिस्थापन शुरू करने से पहले पुरानी पहचान को मुक्त करना होगा। यदि दोनों चलते हैं, तो कोऑर्डिनेटर एक मेंबर को अस्वीकार या फेंस कर सकता है। डुप्लिकेट-ID एरर्स को रीट्रीज़ के साथ छिपाने के बजाय डिप्लॉयमेंट-ब्लॉकिंग सिग्नल के रूप में समझें।

चरण 4: असाइनर और ग्रेसफुल शटडाउन का समन्वय करें

स्टैटिक मेंबरशिप आइडेंटिटी चर्न को कम करती है; असाइनर पार्टीशन मूवमेंट को निर्धारित करता है। असाइनर को अपग्रेड करने या कोऑपरेटिव मोड को सक्षम करने के लिए अपनी स्वयं की अनुकूलता जांच की आवश्यकता होती है। सामान्य शटडाउन पर, पोलिंग बंद करें, सुरक्षित ऑफसेट्स कमिट करें, ग्रुप छोड़ें और कनेक्शन बंद करें। असामान्य स्टॉप सेशन-टाइमआउट टेकओवर पर निर्भर करता है।

चरण 5: रोलिंग डिप्लॉयमेंट डिज़ाइन करें

एक समय में एक इंस्टेंस को बदलें, और नए मेंबर के शामिल होने, पार्टीशन्स के स्थिर होने और लेटेंसी के ठीक होने की प्रतीक्षा करें। डिप्लॉयमेंट से पहले इंस्टेंस-टू-पार्टीशन मैपिंग रिकॉर्ड करें, कोऑर्डिनेटर लॉग्स और कंज्यूमर लैग का निरीक्षण करें, और पुराने संस्करण को बनाए रखते हुए विफलता पर बैच को रोकें। स्टैटिक मेंबरशिप असीमित समानांतर रीस्टार्ट की अनुमति नहीं देती है।

चरण 6: उन मामलों की पहचान करें जो अभी भी रीबैलेंस करते हैं

मेंबर जोड़ना, सेशन टाइमआउट से अधिक होना, पार्टीशन की संख्या या टॉपिक सब्सक्रिप्शन बदलना, असाइनर बदलना और कोऑर्डिनेटर मूवमेंट सभी रीअसाइनमेंट को ट्रिगर कर सकते हैं। स्टैटिक मेंबरशिप संक्षिप्त अनुपस्थिति और वापसी से होने वाले चर्न को कम करती है; यह टोपोलॉजी या क्षमता परिवर्तनों के कारण होने वाले समन्वय को समाप्त नहीं करती है।

चरण 7: मेट्रिक्स के साथ लाभों और जोखिमों को मान्य करें

प्रत्येक डिप्लॉयमेंट में रीबैलेंस काउंट, पार्टीशन-अनुपलब्ध समय, p99 कंज्यूमर लेटेंसी, अधिकतम लैग, डुप्लिकेट-ID एरर्स, सेशन टाइमआउट और रिकवरी समय रिकॉर्ड करें। संक्षिप्त रीस्टार्ट, धीमे स्टार्टअप, नेटवर्क पार्टीशन्स, ID टकराव और ब्रोकर परिवर्तन इंजेक्ट करें। स्वचालित पॉज़ और रोलबैक थ्रेशोल्ड सेट करें।

उच्च-गुणवत्ता वाला नमूना उत्तर

मैं डिप्लॉयमेंट ऑर्डिनल या नियंत्रित लीज से उत्पन्न प्रत्येक कंज्यूमर स्लॉट को एक स्थिर अद्वितीय group.instance.id असाइन करूँगा। एक रोलिंग डिप्लॉयमेंट एक समय में एक स्लॉट को बदलता है: पुराना मेंबर पोलिंग बंद कर देता है और ग्रेसफुली बाहर निकल जाता है, फिर नई प्रोसेस उसी ID के साथ जुड़ती है। यदि रीस्टार्ट सेशन टाइमआउट के भीतर फिट बैठता है, तो ग्रुप बदली हुई यादृच्छिक मेंबर ID के कारण होने वाले चर्न से बच जाता है। मैं session.timeout.ms को केवल बढ़ाने के बजाय अधिकतम सामान्य स्टार्टअप, नेटवर्क जिटर और अनुमत पॉज़ से प्राप्त करूँगा। ऑर्केस्ट्रेशन समवर्ती ID पुन: उपयोग पर ब्लॉक करेगा; एक डुप्लिकेट-ID या फेंसिंग एरर रोलआउट को रोकती है। स्टैटिक मेंबरशिप अभी भी पार्टीशन विस्तार, सब्सक्रिप्शन परिवर्तन या वास्तविक टाइमआउट को नहीं संभालती है, इसलिए मैं फॉल्ट-इंजेक्शन रोलबैक परीक्षणों के साथ रीबैलेंस, p99 लेटेंसी, लैग, अनुपलब्ध समय और रिकवरी की निगरानी करूँगा।

सामान्य गलतियाँ

  • प्रत्येक स्टार्ट पर एक नया रैंडम group.instance.id जेनरेट करना।
  • विफलता टेकओवर समय का अनुमान लगाए बिना सेशन टाइमआउट बढ़ाना।
  • समान इंस्टेंस ID के साथ दो प्रक्रियाओं को समवर्ती रूप से शुरू करना।
  • यह मान लेना कि स्टैटिक मेंबरशिप प्रत्येक रीबैलेंस को समाप्त कर देती है और टॉपिक, पार्टीशन या सब्सक्रिप्शन परिवर्तनों को अनदेखा करना।
  • असाइनर अनुकूलता और ग्रेसफुल शटडाउन को मान्य किए बिना कॉन्फ़िगरेशन बदलना।
  • केवल औसत लैग को देखना और डिप्लॉयमेंट के दौरान अनुपलब्ध समय और p99 लेटेंसी को नजरअंदाज करना।

फॉलो-अप प्रश्न और प्रतिक्रियाएं

फॉलो-अप 1: क्रैश हुई इंस्टेंस के पार्टीशन को कितनी जल्दी टेकओवर किया जाता है?

आमतौर पर कोऑर्डिनेटर द्वारा यह निर्धारित करने के बाद कि सेशन टाइम आउट हो गया है; हार्टबीट्स, नेटवर्क स्थिति और कोऑर्डिनेटर की स्थिति भी मायने रखती है। डिफ़ॉल्ट मान बताने के बजाय रिकवरी उद्देश्य से उल्टी दिशा में काम करें और फॉल्ट इंजेक्शन के साथ मापें।

फॉलो-अप 2: क्या स्टैटिक मेंबरशिप और कोऑपरेटिव स्टिकी असाइनर (cooperative sticky assignor) एक ही हैं?

नहीं। स्टैटिक मेंबरशिप मेंबर आइडेंटिटी को स्थिर करती है और संक्षिप्त अनुपस्थिति से चर्न को कम करती है। एक कोऑपरेटिव असाइनर नियंत्रित करता है कि पार्टीशन्स कैसे मूव होते हैं और माइग्रेशन पॉज़ को कम करता है। उन्हें संयोजित किया जा सकता है लेकिन अलग से मान्य किया जाना चाहिए।

फॉलो-अप 3: डुप्लिकेट ID पर डिप्लॉयमेंट को ब्लॉक क्यों करें?

एक पहचान के लिए प्रतिस्पर्धा करने वाली दो प्रक्रियाएं फेंसिंग, पार्टीशन चर्न और अप्रत्याशित स्वामित्व का कारण बन सकती हैं। रीट्रीज़ टकराव को बढ़ा सकते हैं, इसलिए डिप्लॉयमेंट को पहले आइडेंटिटी एलोकेशन को ठीक करना होगा।

फॉलो-अप 4: क्या सेशन टाइमआउट कई घंटों का हो सकता है?

केवल तभी यदि व्यवसाय किसी विफलता के बाद पार्टीशन्स द्वारा इतने लंबे समय तक प्रतीक्षा करने को स्वीकार करता है और ब्रोकर सीमा इसकी अनुमति देती है। अधिकांश सिस्टम धीमी शुरुआत को अत्यधिक टाइमआउट के पीछे छिपाने के बजाय डिप्लॉय पॉज़ और विफलता रिकवरी को अलग-अलग मॉडल करते हैं।

फॉलो-अप 5: क्या कंज्यूमर्स को स्केल करने पर भी रीबैलेंस होता है?

हाँ। एक नया मेंबर पार्टीशन के स्वामित्व को बदलता है; स्टैटिक आइडेंटिटी टोपोलॉजी परिवर्तनों को नहीं रोक सकती है। शांत समय के दौरान स्केल करें, माइग्रेशन और लैग का निरीक्षण करें, और असाइनर रणनीति और संस्करणों को संगत रखें।

फॉलो-अप 6: आप विफल डिप्लॉयमेंट को कैसे रोलबैक करते हैं?

आगे के प्रतिस्थापनों को रोकें, अपरिवर्तित इंस्टेंसेस को बनाए रखें, और सत्यापित करें कि पुराना संस्करण अपनी मूल ID के साथ फिर से जुड़ सकता है और कंजम्पशन फिर से शुरू कर सकता है। आगे बढ़ना है या घटना प्रतिक्रिया का विस्तार करना है, यह तय करने से पहले डुप्लिकेट IDs, कमिट किए गए ऑफसेट्स, लैग और कोऑर्डिनेटर लॉग्स की जांच करें।

सार्वजनिक स्रोत

संबंधित प्रश्न