प्रॉम्प्ट और संदर्भ
ऑर्डर और भुगतान यूजर और ऑर्डर ID द्वारा जोड़े जाते हैं, लेकिन भुगतान ऑर्डर के दो घंटे बाद आ सकता है। Flink Event Time Interval Join के लिए बाउंड्स, वॉटरमार्क, स्टेट रिटेंशन, लेट-डेटा पाथ और सुधार (correction) रणनीति डिज़ाइन करें। Event time, processing time और ingestion time के बीच अंतर स्पष्ट करें, और बताएं कि संदेश आगमन का क्रम (message arrival order) क्यों अपर्याप्त है।
इंटरव्यूअर क्या मूल्यांकन करता है
- Processing time से क्रम का अनुमान लगाने के बजाय व्यावसायिक समय (business-time) अंतराल को परिभाषित करना।
- यह समझना कि वॉटरमार्क केवल प्रगति का संकेत (progress signal) है, विश्व स्तर पर सत्य समय नहीं।
- दो-स्ट्रीम स्टेट, क्लीनअप, लेट डेटा और डुप्लिकेट-इवेंट हैंडलिंग को समझाना।
- लेटेंसी, पूर्णता (completeness), स्टेट लागत और रिप्लेबिलिटी के बीच संतुलन बनाना।
पूछने के लिए स्पष्टीकरण प्रश्न
- ऑर्डर और भुगतान पर व्यावसायिक-समय फ़ील्ड क्या हैं, और क्या उनके क्लॉक में अंतर (drift) हो सकता है?
- भुगतान कितना लेट हो सकता है, और क्या अंतराल के बाद सुधार या मैन्युअल समाधान (reconciliation) की आवश्यकता है?
- क्या जॉइन की (join key) विशिष्ट (unique) है, और क्या डुप्लिकेट, रद्दीकरण या एकाधिक भुगतान हो सकते हैं?
- क्या डाउनस्ट्रीम केवल-जोड़े जाने वाले (append-only) तथ्य, अपडेट, या केवल एक अंतिम समाधान तालिका स्वीकार करता है?
30-सेकंड उत्तर रूपरेखा
व्यवसाय के समय में अंतराल को परिभाषित करें, जैसे ऑर्डर के शून्य से दो घंटे बाद तक का भुगतान। दोनों स्ट्रीम्स को की (key) द्वारा विभाजित (partition) करें, इवेंट-टाइम वॉटरमार्क को आगे बढ़ाएं, और जॉइन को दोनों पक्षों के रिकॉर्ड तब तक रखने दें जब तक कि प्रगति यह साबित न कर दे कि वे अब मेल नहीं खा सकते। अनुमत सीमा के भीतर देर से आने वाले इवेंट्स जॉइन हो सकते हैं; इससे परे के इवेंट साइड आउटपुट या मुआवज़ा (compensation) स्ट्रीम में जाते हैं। डिडुप्लिकेशन, चेकपॉइंट्स, रिप्ले और डाउनस्ट्रीम इडेम्पोटेंसी (idempotency) के साथ समाप्त करें।
चरण-दर-चरण गहन विश्लेषण
1. इवेंट टाइम और अंतराल सीमाएं चुनें
प्रत्येक रिकॉर्ड से एक अपरिवर्तनीय व्यावसायिक इवेंट टाइमस्टैम्प निकालें और उसी यूजर-और-ऑर्डर की का उपयोग करें। यदि भुगतान ऑर्डर के बाद ही होना चाहिए, तो निचली सीमा (lower bound) शून्य और ऊपरी सीमा (upper bound) दो घंटे रखें; केवल तभी नकारात्मक निचली सीमा की अनुमति दें यदि अग्रिम भुगतान मान्य हो। यह अंतराल व्यावसायिक SLA से आता है, न कि किसी मनमाने लंबे विंडो से। Processing time केवल तभी उपयुक्त होता है जब ऐतिहासिक क्रम का कोई महत्व न हो।
2. वॉटरमार्क और दो-स्ट्रीम स्टेट
प्रत्येक इनपुट अपनी अव्यवस्था सीमा (out-of-order bound) से एक वॉटरमार्क बनाता है। जॉइन तब तक प्रतीक्षा करता है जब तक कि दोनों पक्षों की प्रगति यह जानने के लिए पर्याप्त न हो जाए कि रिकॉर्ड को कोई अन्य मैच नहीं मिल सकता; तब तक, रिकॉर्ड्स कीड स्टेट (keyed state) में बने रहते हैं। स्टेट का आकार इनपुट दर, अंतराल की लंबाई, की कार्डिनैलिटी और डिसऑर्डर बाउंड पर निर्भर करता है। चेकपॉइंट उस स्टेट को सुरक्षित रखते हैं ताकि रिकवरी पहले से उत्सर्जित परिणामों का अनुमान लगाने के बजाय एक ज्ञात स्थिति से जारी रहे।
3. लेट, डुप्लिकेट और रद्दीकरण इवेंट्स
अनुमत अव्यवस्था और देरी की सीमा के भीतर आने वाले इवेंट्स जॉइन हो सकते हैं। सीमा से परे के इवेंट समाधान के लिए साइड आउटपुट या टिकाऊ मुआवज़ा विषय (durable compensation topic) में जाते हैं। इवेंट ID या बिज़नेस की के साथ डिडुप्लिकेट करें, और भुगतान रद्दीकरण या रिफंड को एक नए इवेंट या स्पष्ट रिट्रैक्शन (retraction) के रूप में मॉडल करें। यदि डाउनस्ट्रीम अपडेट का समर्थन करता है, तो अप्सर्ट या रिट्रैक्शन उत्सर्जित करें; अन्यथा इतिहास को चुपचाप फिर से लिखने के बजाय एक सुधार तालिका बनाए रखें।
4. लेटेंसी, स्टेट लागत और सत्यापन
छोटी सीमाएं और डिसऑर्डर लिमिट्स स्टेट और लेटेंसी को कम करती हैं लेकिन छूटे हुए मैचों को बढ़ाती हैं। व्यापक सीमाएं पूर्णता में सुधार करती हैं जबकि मेमोरी, चेकपॉइंट और रिकवरी लागत बढ़ाती हैं। लॉन्च से पहले, डिसऑर्डर, डुप्लिकेट, क्रॉस-विंडो इवेंट्स और रिकवरी विफलताओं को रिप्ले करें। जॉइन हिट रेट, साइड-आउटपुट वॉल्यूम, वॉटरमार्क लैग, स्टेट साइज, चेकपॉइंट अवधि और डुप्लिकेट दर की जांच करें। एंड-टू-एंड इडेम्पोटेंसी कीज़ रीस्टार्ट या रिप्ले के दौरान डुप्लिकेट शुल्क को रोकती हैं।
मॉडल उत्तर
मैं ऑर्डर और भुगतान के बिज़नेस टाइमस्टैम्प और अनुमत लेटेंसी SLA की पुष्टि करूंगा, फिर यूजर और ऑर्डर ID द्वारा विभाजन करूंगा। यदि भुगतान किसी ऑर्डर के दो घंटे के भीतर ही आ सकता है, तो मैं processing time विंडो के बजाय शून्य-से-दो घंटे का इवेंट-टाइम अंतराल व्यक्त करूंगा। प्रत्येक स्ट्रीम वॉटरमार्क उत्सर्जित करती है; जॉइन रिकॉर्ड्स को keyed state में रखता है और प्रगति द्वारा यह साबित होने पर उन्हें हटा देता है कि कोई मैच शेष नहीं है।
सीमा के भीतर लेट इवेंट्स भाग लेते हैं; इसके बाहर के इवेंट साइड आउटपुट या मुआवज़ा स्ट्रीम में जाते हैं। इवेंट ID द्वारा डिडुप्लिकेट करें, और रिफंड तथा रद्दीकरण को नए इवेंट्स के रूप में प्रस्तुत करें। समर्थित होने पर अप्सर्ट या रिट्रैक्शन उत्सर्जित करें, अन्यथा एक सुधार तालिका बनाए रखें। लॉन्च से पहले डिसऑर्डर, डुप्लिकेट और रिकवरी को रिप्ले करें, हिट रेट, साइड आउटपुट, वॉटरमार्क लैग, स्टेट और चेकपॉइंट्स की निगरानी करें, और रिप्ले सुरक्षा के लिए इडेम्पोटेंसी कीज़ का उपयोग करें।
सामान्य गलतियाँ
- व्यावसायिक इवेंट टाइम को संदेश आगमन समय से बदलना।
- वॉटरमार्क को इस बात के प्रमाण के रूप में मानना कि प्रत्येक अपस्ट्रीम इवेंट आ चुका है।
- स्टेट क्लीनअप, चेकपॉइंट्स और रिकवरी पर चर्चा किए बिना एक बड़ी विंडो चुनना।
- साइड आउटपुट या समाधान पथ के बिना विंडो से बाहर के लेट इवेंट्स को छोड़ना।
- डिडुप्लिकेशन और डाउनस्ट्रीम इडेम्पोटेंसी को छोड़ना, जिससे रीस्टार्ट के बाद डुप्लिकेट भुगतान परिणाम उत्पन्न होते हैं।
फॉलो-अप प्रश्न और उत्तर
फॉलो-अप 1: दो स्वतंत्र विंडो और एक सामान्य जॉइन का उपयोग क्यों नहीं करते?
स्वतंत्र विंडो दो स्ट्रीम्स की इवेंट-टाइम प्रगति और क्लीनअप सीमा को खो देती हैं, जिससे एक सापेक्ष-समय अंतराल को व्यक्त करना कठिन हो जाता है। Interval Join इस संबंध के लिए स्पष्ट निचली और ऊपरी सीमाओं के साथ की-मैचिंग को जोड़ता है।
फॉलो-अप 2: जब वॉटरमार्क रुक जाता है (stalls) तो आप क्या करते हैं?
पार्टीशन निष्क्रियता (partition idleness), सोर्स टाइमस्टैम्प, बैकप्रेशर और डिसऑर्डर कॉन्फ़िगरेशन की जाँच करें। वास्तव में शांत पार्टीशन के लिए निष्क्रियता कॉन्फ़िगर करें ताकि एक खाली पार्टीशन प्रगति को अवरुद्ध न करे, लेकिन सोर्स विफलता को छिपाने के लिए वॉटरमार्क को मनमाने ढंग से आगे न बढ़ाएं।
फॉलो-अप 3: क्या होगा यदि व्यवसाय दो घंटे के बाद आने वाले भुगतानों को स्वीकार करता है?
रीयल-टाइम जॉइनिंग को समाधान (reconciliation) से अलग करें। एक अनंतिम (provisional) परिणाम उत्सर्जित करें, लेट इवेंट्स को एक मुआवज़ा स्ट्रीम में बनाए रखें, और एक बैच या दूसरे स्ट्रीमिंग जॉब को एक इडेम्पोटेंट अप्सर्ट के साथ सुधार उत्पन्न करने दें।