डीएलक्यू और जहर संदेश हैंडलिंग
डेड लेटर क्यू (डीएलक्यू) संदेशों के लिए एक पृथक कतार/विषय है जिसे नियमित उपभोक्ता द्वारा दिए गए प्रयासों की संख्या के बाद या स्पष्ट तकनीकी/व्यावसायिक कारणों (अमान्य योजना, समय, संस्करण संघर्ष, आदि) के लिए नहीं। जहर संदेश - एक रिकॉर्ड जिसका पुनर्संसाधन लगातार विफल रहता है और पाइपलाइन की स्थिरता को खतरे में डालता है।
DLQ का उद्देश्य SLO को संरक्षित करना, विफलता को स्थानीय बनाना, मुख्य धारा को अवरुद्ध करने से रोकना और विश्लेषण और सुरक्षित रीप्ले (redrave) की संभावना की गारंटी देना है।
1) जहां से जहरीले संदेश आते हैं
स्कीमा/अनुबंध: असंगत परिवर्तन, गुम आवश्यक क्षेत्र, गलत प्रकार।
व्यावसायिक सत्यापन: डुप्लिकेट, उल्लंघन आक्रमणकारियों, समाप्त घटनाओं।
ऑर्डर और कारण: "क्रिएट" करने के लिए "अपडेट" आया, लापता सहसंबंध, आउट-ऑफ-ऑर्डर।
पहचान: पुनर्संसाधन दुष्प्रभाव उत्पन्न करता है।
बाहरी निर्भरता: सीमित सीमा/समय समाप्ति, एपीआई अनुपलब्धता।
डेटा: पेलोड भ्रष्टाचार, गलत एन्कोडिंग, ओवरसाइज़।
2) डीएलक्यू प्रस्तुत मानदंड
संदेश DLQ में प्रवेश करता है यदि निम्नलिखित शर्तों में से एक या अधिक को पूरा किया जाता है:- उपभोक्ता/कामगार पर प्रसंस्करण का अधिकतम प्रयास।
- त्रुटि को गैर-पुनर्विचार के रूप में वर्गीकृत किया गया है: अमान्य योजना, एक महत्वपूर्ण संसाधन की कमी, व्यवसाय निषेध।
- समय सीमा संदेश (टीटीएल/समाप्ति) समाप्त हो गया है।
- इस कुंजी/किरायेदार के लिए सर्किट ब्रेकर या प्रवेश नियंत्रण नीति शुरू की गई थी।
- स्पष्ट ऑपरेटर समाधान (मुख्य धागे से मैनुअल "बेदखल")।
3) डीएलक्यू टोपोलॉजी और पैटर्न
प्रति-कतार DLQ: प्रत्येक कतार/विषय की अपनी DLQ होती है। सरल और पारदर्शी।
सेंट्रल डीएलक्यू (पार्किंग स्थल): जटिल मामलों के लिए सामान्य "पार्किंग", एकीकृत विश्लेषण उपकरण के लिए सुविधाजनक।
डीएलटी (डेड लेटर टॉपिक): लॉग-ओरिएंटेड बसों (इवेंट लॉग) के लिए - विफलता के कारण के मेटाडेटा के साथ एक अलग विषय।
संगरोध: हार्ड एक्सेस के साथ संगरोध बफर और मैनुअल विश्लेषण के लिए पीआईआई स्वच्छता।
छाया-धारा: सुरक्षित निर्धारण प्रयोगों के लिए "छाया" में समस्याग्रस्त संदेशों की नकल।
4) डीएलक्यू के साथ मेटाडेटा की आवश्यकता
न्यूनतम सेट:- असफलता का कारण: त्रुटि कोड/वर्ग, स्टैक/ट्रेस आईडी।
- पुनः प्रयास संदर्भ: 'प्रयास', 'अधिकतम प्रयास', 'प्रथम _ देखा _ ts', 'अंतिम _ प्रयास _ ts'.
- सहसंबंध: 'ट्रेस _ आईडी', 'स्पैन _ आईडी', 'टेनेंट _ आईडी', 'इकाई _ आईडी', पार्टीशन कुंजी।
- मूल ऑफसेट/पार्टीशन/अनुक्रम (लॉग बसों के लिए) या संदेश-आईडी.
- संविदा/स्कीमा/पेलोड संस्करण।
- पहचान-कुंजी/निवेदन आईडी (यदि कोई हो).
- रूटिंग स्रोत: कतार नाम/विषय, उपभोक्ता समूह।
5) डीएलक्यू से पहले पुनर्विचार नीतियां
DLQ में भेजने से पहले सही पुनरावृत्ति का उपयोग करें:- लघु उपभोक्ता पुनरावृत्ति: 'मैक्सप्रेशर्स' 2-5, घातीय बैकऑफ + जिटर, संगामिति पर कैप।
- सहकारी बैकप्रेशर: त्रुटियों के बढ़ ने के साथ प्रतिस्पर्धा को कम करना।
- त्रुटि वर्गीकरण: पुनर्प्राप्य ('5xx', टाइमआउट) बनाम गैर-पुनर्प्राप्य (सत्यापन, स्कीमा बेमेल)।
- देरी की कतारें: अस्थायी विफलताओं के लिए 5s → 30 → 2m।
- प्रति-कुंजी अलगाव: यदि एक विशिष्ट कुंजी "शोर" है, तो पूरी पार्टी को अवरुद्ध न करें।
6) सुरक्षित Redrive (DLQ से पुनर्वितरण)
Redrive DLQ से प्रसंस्करण के संदेशों की नियंत्रित वापसी है।
सिद्धांत:1. फिक्स चेक: कोड/कॉन्फ़िगरेशन/स्कीम को ठीक करने के बाद या बाहरी निर्भरताओं को बहाल करने के बाद फिर से तैयार करें।
2. पहचान: हैंडलर को पुनरावृत्ति (अपसर्ट, प्रभाव-टोलुएंट ऑपरेशन) के लिए प्रतिरोधी होना चाहिए।
3. 'idempotency _ key '/' message _ id '/' business _ key' द्वारा deduplication।
4. बैचिंग और विंडो: एन संदेशों द्वारा बैच, रिड्राइव द्वारा दर-सीमा, समय/पार्टियों द्वारा "विंडोज"।
5. स्थानीय सत्यापन: पुनर्वितरण से पहले योजना का त्वरित सत्यापन (जल्दी अमान्य मामलों को अस्वीकार करें)।
6. प्राथमिकता: रिड्राइव को बिक्री यातायात (श्रमिकों/व्यक्तिगत पूल की कम प्राथमिकता) को विस्थापित नहीं
7. अवलोकन: रिड्राइव के लिए व्यक्तिगत मैट्रिक्स और ट्रेल्स; परिणाम रिपोर्ट (सफलता/दोहराएं DLQ/हानि)।
7) वितरण शब्दार्थ और आदेश
कम से कम एक बार सबसे आम मोड है: पहचान और कमी की आवश्यकता होती है।
सबसे अधिक बार - DLQ को अक्षम किया जा सकता है; नुकसान का जोखिम। नुकसान स्वीकार्य होने पर ही उपयोग करें।
बिल्कुल एक बार (कुशल): व्यापार भंडारण में लेनदेन और कमी द्वारा प्राप्त; महंगा और विशिष्ट।
आदेश: DLQ आमतौर पर एक विशिष्ट कुंजी/पार्टी के लिए आदेश को तोड़ ता है। यदि आदेश महत्वपूर्ण है, तो कुंजी और क्रमिक रूप से फिर से तैयार करें।
8) योजनाएं, अनुबंध और मान्यता
स्कीमा रजिस्ट्री/अनुबंध: स्पष्ट संस्करण, पिछड़े/आगे की संगतता के साथ विकास।
प्रवेश द्वार पर मान्यता: भारी चरणों से पहले JSON स्कीमा/Protobuf/Avro के माध्यम से सस्ते चेक।
असंगति नीति: एक "ब्रेकिंग" क्षेत्र के साथ - तुरंत कोड 'SCHEMA _ INCOMPATABLE' के साथ DLQ में।
Redaction PII: DLQ में आपको केवल वही स्टोर करना है; मुखौटा संवेदनशील क्षेत्
9) पहचान और कमी
Idempotency-key: "बिजनेस सेंस" (किरायेदार + इकाई + ऑपरेशन + ts-बाल्टी) से निर्माता पर फॉर्म।
डेडअप लॉग: टीटीएल के साथ अंतिम 'एन' कुंजी रखें; ऑपरेशन के "प्रभाव" को याद रखें।
Upsert/merge: प्रतिबंध के बिना "सम्मिलित-केवल" से बचें।
साइड इफेक्ट्स: बाहरी कॉल के लिए - कॉल करने से पहले लॉग करें और "दोहराएं" की जाँच करें।
10) अवलोकन और एसएलओ
मेट्रिक्स (बदले में/किरायेदार/कुंजी):- DLQ दर (msg/s), संदेशों का अनुपात, DLQ में औसत/औसत "आयु"।
- Redrave (%) की सफलता, दोहराया DLQ शेयर।
- कारणों का वर्गीकरण: स्कीमा, सत्यापन, समय समाप्ति, निर्भरता, अज्ञात।
- p95/p99 मुख्यधारा उपचार विलंबता बनाम redrive में।
- डीएलक्यू आकार, अतिप्रवाह का जोखिम।
- आवश्यक टैग हैं 'संदेश _ id', 'इकाई _ id', 'किरायेदार _ id', 'प्रयास', 'कारण', 'redrive _ batch _ id'.
- "डीएलक्यू शाखा" का पता लगाना: स्रोत से बार-बार सफलता तक।
- संदेशों के प्रतिशत ने टी मिनट में ≥ X% को सफलतापूर्वक संसाधित किया।
- DLQ मामले के लिए जांच और सुधार का समय ≤ Y घंटे।
- DLQ ≤ Z घंटे (अलर्ट के साथ) में संदेश की अधिकतम "आयु"।
11) सुरक्षा और अनुपालन
कम से कम विशेषाधिकार पहुँच: Redrive - Operators/playbooks।
लेखा परीक्षा: कौन और कब ट्रिगर किया redrive/delete/edite मेटाडेटा।
स्वच्छता: केंद्रीय डीएलक्यू में स्थानांतरित होने पर, अनावश्यक पीआईआई/रहस्य हटा दें।
प्रतिधारण: डीएलक्यू के लिए अलग प्रतिधारण और विलोपन नीतियां।
12) बहु-किरायेदारी
टैग 'किरायेदार _ आईडी/योजना': सीमा को अलग करें, प्राथमिकताओं को फिर से तैयार करें, रिपोर्ट करें।
प्रति-किरायेदार डीएलक्यू या पार्टियां: ताकि "शोर" ग्राहक समग्र डीएलक्यू को बंद न करे।
बिलिंग/कोटा: डीएलक्यू वॉल्यूम और उपयोग में पुनर्वितरण की लागत को ध्यान में रखें।
13) कॉन्फ़िगरेशन टेम्पलेट (उदाहरण)
yaml consumer:
max_attempts: 4 backoff:
strategy: exponential_full_jitter initial_ms: 200 max_ms: 5000 classify_errors:
retryable: [TIMEOUT, DEP_UNAVAILABLE, 5xx]
nonretryable:[SCHEMA_INCOMPATIBLE, VALIDATION_FAILED, DUPLICATE]
concurrency_caps:
per_partition: 8 per_tenant: 50
dlq:
type: topic name: myapp. events. dlq metadata:
include: [reason, stack, attempt, first_seen_ts, last_attempt_ts, schema_version,
tenant_id, entity_id, trace_id, source_topic, partition, offset]
retention_hours: 168 pii_redaction: true
redrive:
mode: batch batch_size: 500 rate_limit_per_sec: 50 priority: low validate_schema_before_redrive: true idempotency:
dedup_ttl_hours: 24 ordering:
by_key: true
14) ऑपरेशनल प्लेबुक (रनबुक)
1. असामान्य DLQ वृद्धि: उत्पादन उपभोक्ता के थ्रॉटलिंग को चालू करें, शीर्ष कारणों का विश्लेषण करें, रिलीज/योजनाओं की जांच करें।
2. स्कीमा बेमेल: रोलबैक/कमिट स्कीमा, एडाप्टर माइग्रेशन, सत्यापन के बाद पुनर्वितरण।
3. बाहरी निर्भरता अनुपलब्ध: ठहराव रिट्रेंस, विलंब कतार सक्षम करें, वसूली के बाद पुनर्निर्मित करें।
4. Redrive के बाद दोहराया DLQ: "शैडो" हैंडलर/सिम्युलेटर सक्षम करें, पहचान की जाँच करें, संकीर्ण बैच।
5. DLQ अतिप्रवाह: संग्रह-भंडारण के लिए निकासी, कुंजियों/कारणों के लिए चयनात्मक पुनर्वितरण सक्षम करें।
15) परीक्षण और अराजकता
त्रुटि इंजेक्शन: स्कीमा-ब्रेक, सत्यापन, टाइमआउट, 1-on-N चिपचिपा त्रुटियाँ।
बड़े पैमाने पर संशोधन: उत्पादन पर खुराक और प्रभाव की जांच
आउट-ऑफ-ऑर्डर अनुक्रम: सही कुंजी हैंडलिंग सुनिश्चित करें।
पेलोड भ्रष्टाचार: सत्यापन और सुरक्षित विफलता।
रिड्राइव कार्यकर्ता के पतन के बाद वसूली: बैच संचालन की पहचान।
16) विशिष्ट त्रुटियाँ
DLQ में मेटाडेटा की कमी - क्लस्टर कारणों और सुरक्षित रूप से संशोधित करना असंभव है।
सीमा के बिना बड़े पैमाने पर पुनर्मूल्यांकन - उत्पादन का पुन: क्षरण।
कोई पहचान/डिडप्लिकेशन नहीं - डुप्लिकेट्स और साइड इफेक्ट्स।
PII बिना स्वच्छता के केंद्रीय DLQ में मिश्रण।
संदेशों के विकास में योजनाओं/अनुबंधों की कमी - "आश्चर्य"।
किरायेदार/कुंजी विभाजन के बिना एकमात्र सामान्य DLQ।
गैर-पुनर्प्राप्य त्रुटियों के लिए प्रारंभिक DLQ के बजाय अनंत रिट्रेज़।
17) त्वरित व्यंजनों
सामान्य व्यापार प्रवाह: 3-4 प्रयास, जिटर के साथ घातीय बैकऑफ, त्रुटियों का प्रारंभिक वर्गीकरण, पूर्ण मेटाडेटा के साथ डीएलक्यू।
महत्वपूर्ण घटनाएं (भुगतान): सख्त पहचान, कम समय, न्यूनतम प्रयास, तेज डीएलक्यू और मैनुअल पार्सिंग।
फिक्स के बाद मास रीड: छोटे बैच (100-500), दर-सीमा, श्रमिकों का अलग पूल, बढ़ ती गति से पहले सफलता> 95% की निगरानी।
मल्टी-किरायेदार: प्रति-किरायेदार रेड्राइव सीमा, डीएलक्यू शीर्ष ग्राहक जनरेटर रिपोर्ट।
निष्कर्ष
DLQ एक "कचरा कैन" नहीं है, लेकिन एक नियंत्रित विश्वसनीयता लूप है। स्पष्ट हिट नियम, समृद्ध मेटाडेटा, पहचान और कमी, सुरक्षित मीटर रिड्राइव, स्कीमा अनुशासन और अवलोकन एक खतरे से एसएलओ को एक प्रबंधनीय इंजीनियरिंग प्रक्रिया में विषाक्त संदेश बदलते हैं - उपयोगकर्ताओं पर समझने योग्य प्य।