स्ट्रीमिंग
स्ट्रीमिंग क्या है
स्ट्रीमिंग घटनाओं के अंतहीन अनुक्रमों (लेनदेन लॉग, क्लिक, भुगतान, टेलीमेट्री) के लिए एक निरंतर प्रतिक्रिया है, जिसमें न्यूनतम देरी और एक गारंटी है कि राज्य सही हैं। बैच के विपरीत, जहां "हम अवधि में संचित सभी लेते हैं", धारा डेटा को संसाधित करती है जैसे ही यह आता है, राज्य को बनाए रखता है और घटना के समय को ध्यान में रखता है।
कुंजी अवधारणाएँ
घटना 'ईवेंट _ टाइम' और अद्वितीय 'इवेंट _ id' के साथ एक अपरिवर्तनीय तथ्य है।
घटना का समय बनाम प्रसंस्करण समय - पहला स्रोत से आता है, दूसरा - जब ऑपरेटर ने वास्तव में घटना को देखा।
विंडोज़ - समूह घटनाएँ समय के अनुसार:- टंबलिंग, होपिंग/स्लाइडिंग, सत्र।
- वाटरमार्क - एक आकलन जो "टी से पहले की घटनाएं पहले ही आ चुकी हैं", आपको खिड़कियों को बंद करने और देर से डेटा की प्रतीक्षा को सीमित करने की अनुमति देता है।
- लेटनेस - वर्तमान वाटरमार्क से कम 'इवेंट _ टाइम' के साथ घटनाएं; परिष्करण नियम अक्सर लागू किए जाते
- समुच्चय के लिए राज्य - स्थानीय तालिकाएं/कुंजीकृत राज्य, सम्मिलित, कमी।
- Backpressure - दबाव जब डाउनस्ट्रीम थ्रूपुट से अधिक हो; प्रोटोकॉल और बफर्स द्वारा नियंत्रित किया जाता है
वास्तुशिल्प आधार
1. स्रोत: इवेंट ब्रोकर (काफ्का/एनएटीएस/पल्सर), डीबी से सीडीसी, कतारें, फाइलें/लॉग कलेक्टर।
2. स्ट्रीमिंग इंजन: विंडो, एग्रीगेट, जॉयन, पैटर्न (सीईपी) की गणना करता है, राज्य और चौकियों का प्रबंधन करता है।
3. सिंक: OLTP/OLAP डेटाबेस, खोज इंजन, कैश, विषय, शोकेस/रिपोर्ट के लिए भंडारण।
4. स्कीमा रजिस्ट्री: पेलोड विकास और संगतता को नियंत्रित करना।
5. अवलोकन: मैट्रिक्स, ट्रेसिंग, लॉग, लैग और वॉटरमार्क के डैशबोर्ड।
समय शब्दार्थ और क्रम
हमेशा घटना समय पसंद करें: यह देरी और रुकावटों के लिए एकमात्र अपरिवर्तनीय है।
घटनाएं क्रम से बाहर आ सकती हैं; आदेश केवल पार्टी कुंजी के भीतर गारंटी है।
वाटरमार्क की अनुमति:- खिड़कियां बंद करें और परिणाम उत्सर्जित करें;
- सीमा "हम" विलंबित घटनाओं ('अनुमत _ विलंबता') के लिए कितना इंतजार कर रहे हैं।
- देर से होने वाली घटनाओं के लिए, वापसी/अपसर्ट का उपयोग करें: समुच्चय और सुधारात्मक घटनाओं का पुनर्गणना।
स्थिति और विश्वसनीयता
कुंजीकृत अवस्था: समुच्चय का डेटा (योग, काउंटर, डिडप्लिकेशन के लिए संरचनाएं) कुंजियों द्वारा फेरबदल किया जाता है।
वसूली के लिए चेकपॉइंट/सेवपॉइंट - आवधिक स्थिति स्नैपशॉट; कोड संस्करण पलायन के लिए सेवपॉइंट - प्रबंधित स्नैपशॉट।
वास्तव में एक बार प्रभाव प्राप्त किया जाता है:- ट्रांजेक्शनल "रीड-प्रोसेस्ड-राइट" (कमिट सिंक + रीड पोजीशन);
- पहचान सिंक (upsert/merge) + deduplication टेबल;
- संस्करण समुच्चय (आशावादी संगति) द्वारा।
विंडोज, एकत्रीकरण, शामिल हों
विंडोज़:- टंबलिंग: सरल आवधिक रिपोर्ट (मिनट, घंटा)।
- होपिंग/स्लाइडिंग: "स्लाइडिंग" मेट्रिक्स (1 मिनट की वेतन वृद्धि में 5 मिनट में)।
- सत्र: कस्टम सत्रों और धोखाधड़ी विरोधी के लिए प्राकृतिक।
- एकत्रीकरण: योग/गणना/एवीजी/लगभग-विशिष्ट (हाइपरलॉग लॉग), प्रतिशत (टीडीआईजेस्ट/सीकेएमएस)।
- स्ट्रीम-स्ट्रीम में शामिल होना: कुंजी और समय, 'allowed _ skew' द्वारा दोनों पक्षों को बफरिंग की आवश्यकता
- स्ट्रीम-तालिका जुड़ें (KTable) -एक निर्देशिका या वर्तमान स्थिति को संलग्न करता है (उदाहरण के लिए, "सक्रिय उपयोगकर्ता सीमा")।
पिछले और डुप्लिकेट डेटा के साथ काम कर रहा है
डीडुप्लिकेशन: 'इवेंट _ आईडी' या '(producer_id, सीक्वेंस)' द्वारा; TTL ≥ redo विंडो के साथ "देखी गई" कुंजियों को संग्रहीत करें।
देर से घटनाएँ: बंद होने के बाद 'X' के लिए विंडो पोस्ट-प्रोसेसिंग की अनुमति दें (वापसी/अपसर्ट)।
झूठी डुप्लिकेट: समुच्चय को समायोजित करें और लॉग में "ALREADY_APPLIED" को ठीक करें।
पैमाना और प्रदर्शन
मुख्य शार्डिंग: समानतावाद प्रदान करता है; गर्म चाबियों के लिए देखो।
Backpressure: समानतावाद को सीमित करें, प्रकाशन के दौरान बैच और संपीड़न का उपयोग करें।
वाटरमार्क: बहुत आक्रामक मत बनो - हार्ड वॉटरमार्क प्रत्याशा को कम करते हैं लेकिन देर से अपडेट के अनुपात को बढ़ाते हैं।
स्थिति: आकार और पहुंच पैटर्न को ध्यान में रखते हुए प्रारूप (RockDB/राज्य स्टोर/मेमोरी में) का चयन करें; टीटीएल को साफ करें।
ऑटोस्कैलिंग: लैग, सीपीयू, राज्य का आकार, जीसी समय।
विश्वसनीयता और पुनरारंभ
ऑफसेट निर्धारण के साथ पहचान सिंक या लेनदेन शुद्धता का आधार है।
पुनः आरंभ करने के बाद पुनर्संसाधन की अनुमति है; प्रभाव "बिल्कुल एक बार" रहना चाहिए।
DLQ/पार्किंग स्थल: कारणों के साथ एक अलग धागे में समस्या रिकॉर्ड भेजें; पुनर्संसाधन प्रदान करें।
अवलोकन (क्या मापना है)
स्रोत द्वारा अंतराल (समय और संदेश द्वारा)।
वाटरमार्क/वर्तमान घटना समय और देर से होने वाली घटनाओं का अनुपात।
थ्रूपुट/लेटेंसी ऑपरेटर, p95/p99 एंड-टू-एंड।
राज्य का आकार/रॉकस्डीबी I/O, चेकपॉइंट दर/अवधि।
DLQ दर, deduplication/retray प्रतिशत।
सीपीयू/जीसी/ढेर, समय ठहराएँ.
सुरक्षा और अनुपालन
डेटा वर्गीकरण: आरेख में पीआईआई/पीसीआई को चिह्नित करें, न्यूनतम, एन्क्रिप्ट राज्य और स्नैपशॉट को संग्रहीत करें।
अभिगम नियंत्रण: विषय/राज्य तालिकाओं के लिए और सिंक के लिए अलग एसीएल।
रिटेंशन: कानूनी आवश्यकताओं के अनुरूप (जीडीपीआर/भूलने का अधिकार)।
लेखा परीक्षा: log 'event _ id', 'trace _ id', परिणाम: 'APPLED/ALSALT _ APPLED/RETRIEWED'.
कार्यान्वयन पैटर्न
1. सीडीसी → सामान्यीकरण → डोमेन घटनाएँ: कच्चे डेटाबेस परिवर्तन प्रसारित न करें, समझने योग्य व्यावसायिक तथ्यों के लिए नक्शा।
2. उत्पादकों के लिए आउटबॉक्स: लेनदेन तथ्य + घटना - एक डेटाबेस लेनदेन में।
3. कोर बनाम समृद्ध: महत्वपूर्ण प्रवाह में न्यूनतम पेलोड, संवर्धन - अतुल्यकालिक।
4. रीप्ले-फ्रेंडलीनेस: अनुमानों/शोकेस को लॉग से फिर से इकट्ठा किया जाना चाहिए।
5. डिजाइन द्वारा पहचान: ऑपरेशन/इवेंट कुंजी, अपसर्ट योजनाएं, समुच्चय के संस्करण।
परीक्षण
इकाई/संपत्ति-आधारित: समुच्चय और परिवर्तनों के अपरिवर्तनीय।
स्ट्रीम परीक्षण: आउट-ऑफ-ऑर्डर और डुप्लिकेट्स - विंडो और डीडुप्लिकेशन चेक के साथ निश्चित घटना स्ट्रीम।
गोल्डन विंडो: संदर्भ विंडो/समुच्चय और स्वीकार्य देर से समायोजन।
फॉल्ट-इंजेक्शन: "रिकॉर्ड किए गए प्रभाव" और "प्रतिबद्ध ऑफसेट" के बीच आते हैं।
रीप्ले परीक्षण: लॉग = वर्तमान स्थिति की शुरुआत से शोकेस को फिर से जोड़ ना।
लागत और अनुकूलन
विंडोज और वॉटरमार्क विलंबता/संसाधनों को प्रभावित करते हैं: जितनी लंबी खिड़की और 'अधिक से अधिक', उतना ही अधिक राज्य।
कोडेक और संपीड़न: संतुलन सीपीयू/नेटवर्क।
बैचिंग आउटपुट: कम नेटवर्क कॉल और लेनदेन।
जल्दी फ़िल्टर करना ("पुशडाउन"): जितना संभव हो उतना स्रोत के करीब छोड़ दें।
एंटीपैटर्न
प्रसंस्करण समय पर टाई जहां घटना समय की आवश्यकता होती है - गलत एनालिटिक्स।
सिंक में पहचान की कमी - पुनरारंभ पर दोहरे प्रभाव।
वैश्विक "मेगा-कीज़": एक गर्म विभाजन समानतावाद को तोड़ ता है।
सार्वजनिक कार्यक्रमों के रूप में रॉ सीडीसी: लीक डीबी स्कीमा, विकास में नाजुकता।
कोई डीएलक्यू नहीं: "जहरीला" संदेश पूरी पाइपलाइन को अवरुद्ध करते हैं।
वॉटरमार्क के बजाय निश्चित कठिन देरी: या तो शाश्वत प्रतीक्षा या डेटा हा
डोमेन के उदाहरण
भुगतान/वित्त
स्ट्रीम 'भुगतान। ', एंटी-फ्रॉड (सत्र + सीईपी) के लिए खिड़कियां,' ऑपरेशन _ आईडी 'द्वारा दादा।
वास्तव में एक बार प्रभाव जब लेखांकन खाता (अपसर्ट + संस्करण) पर पोस्ट किया जाता है।
विपणन/विज्ञापन
सीटीआर/रूपांतरण की स्लाइडिंग विंडो, सहिष्णुता के साथ क्लिक और छापों में शामिल हों, बोली के लिए एकत्रीकरण।
iGaming/ऑनलाइन सेवाएं
वास्तविक समय संतुलन/सीमाएं, मिशन/उपलब्धियां (सत्र खिड़कियां), धोखाधड़ी विरोधी पैटर्न और अलर्ट।
मिनी टेम्पलेट (छद्म कोड)
वॉटरमार्क और देर से अपडेट के साथ विंडो
pseudo stream
.withEventTime(tsExtractor)
.withWatermark(maxAllowedLag=2m)
.window(TUMBLING, size=1m, allowedLateness=30s)
.keyBy(user_id)
.aggregate(sum, retractions=enable)
.sink (upsert_table )//idempotent upsert by (user_id, window_start)
ऑफसेट फिक्सेशन के साथ लेन-देन सिंक
pseudo begin tx upsert target_table using event, key=(k)
update consumer_offsets set pos=:pos where consumer=:c commit
उत्पादन जाँच सूची
- घटना समय और वाटरमार्क रणनीति परिभाषित; विंडो और 'lowed _ latness' का चयन किया जाता है।
- idempotent सिंक या लेनदेन ऑफसेट के साथ प्रतिबद्ध है।
- स्कीमा रजिस्ट्री और संगतता मोड सक्षम हैं; योगात्मक विकास।
- मेट्रिक्स: लैग, वॉटरमार्क, p95/p99, डीएलक्यू, राज्य का आकार, चेकपॉइंट अवधि।
- टेस्ट: आउट-ऑफ-ऑर्डर, डुप्लिकेट, रीप्ले, रीप्ले।
- राज्य और स्नैपशॉट के लिए पीआईआई/प्रतिधारण नीतियां।
- स्केलिंग योजना और बैकप्रेशर रणनीतियाँ।
- विंडो अनुबंध और समायोजन का प्रलेखन (देर से अद्यतन)।
FAQ
घटना समय की आवश्यकता है?
यदि मैट्रिक्स और स्थिरता की शुद्धता महत्वपूर्ण है, तो हाँ। तकनीकी गणना/निगरानी के लिए प्रसंस्करण समय उपयुक्त है, लेकिन एनालिटिक्स को विकृत करता है।
क्या यह बिल्कुल एक बार की जरूरत है?
बिंदु: महत्वपूर्ण प्रभावों के लि अधिक बार, कम से कम एक बार + आइडेम्पोटेंट सिंक पर्याप्त है।
विंडो कैसे चुनें?
बिजनेस एसएलए पर निर्माण: "अंतिम 5 मिनट -" होपिंग ", उपयोगकर्ता सत्र -" सत्र ", मिनट रिपोर्ट -" टंबलिंग।
देर से डेटा का क्या करना है?
सीमित 'लेलोड _ लेटनेस' की अनुमति दें और समायोजन (अपसर्ट/रिट्रैक्ट) जारी करें। क्लाइंट शोकेस को अपडेट करने में सक्षम होना चाहिए।
कुल
कम विलंबता के साथ-साथ, स्ट्रीमिंग समय, स्थिति और अनुबंधों का एक अनुशासन है। घटना के समय, खिड़कियों और वॉटरमार्क, प्लस आइडेम्पोटेंट प्रभाव, अवलोकन और परीक्षण का सही विकल्प पाइपलाइन को विश्वसनीय, प्रजनन योग्य और किफायती बनाता है - और यहां और अब समाधान देता है, हर दूसरी रात नहीं।