बैच बनाम स्ट्रीम: जब क्या
क्यों चुनें
कोई भी डेटा सिस्टम विलंबता, लागत, समर्थन जटिलता और विश्वसनीयता के बीच संतुलन बनाता है।
बैच - आवधिक "बैंडविड्थ" के साथ डेटा का उच्च बैंडविड्थ और प्रति रिकॉर्ड कम लागत।
स्मृति/स्थानीय क्षेत्रों में न्यूनतम विलंब और स्थिति के साथ घटनाओं का स्ट्रीम - सतत प्रसंस्करण।
संक्षेप में मॉडल के बारे में
बैच
स्रोत: फ़ाइल/टेबल/स्नैपशॉट।
ट्रिगर: शेड्यूल (घंटा/दिन) या शर्त (नई लकड़ी की फाइल)।
ताकत: सादगी, नियतात्मकता, पूर्ण डेटा संदर्भ, सस्ते बड़े पुनर्गणना।
कमजोर: वास्तविक समय के संकेतों के बिना "ऑनलाइन", उच्च विलंबता, "खिड़कियां" नहीं।
स्ट्रीम
स्रोत: दलाल (काफ्का/एनएटीएस/पल्सर), सीडीसी, कतारें
ट्रिगर: घटना।
मजबूत: उत्पाद के साथ कम विलंबता, प्रतिक्रियाशीलता, प्राकृतिक एकीकरण।
कमजोर: समय जटिलता (घटना बनाम प्रसंस्करण), आदेश/डुप्लिकेट, राज्य, संचालन।
समाधान: चयन मैट्रिक्स
नियम 80/20: यदि एसएलए मिनट/घंटे की देरी की अनुमति देता है और कोई प्रतिक्रियाशील विशेषताएं नहीं हैं - बैच लें। यदि प्रतिक्रिया महत्वपूर्ण है "यहाँ और अब" या आपको लाइव शोकेस की आवश्यकता है - स्ट्रीम (अक्सर सामंजस्य के लिए अतिरिक्त रात बैच)।
विशिष्ट परिदृश्य
बैच - जब बेहतर हो:- दैनिक रिपोर्टिंग, पीरियड्स में बिलिंग, एमएल प्रशिक्षण, बड़े जुड़ ता है, कमी "पूरे सेट के साथ।"
- गहरी सत्यता के साथ पदक मॉडल (कांस्य/रजत/स्वर्ण)।
- मास बैकटेस्ट और शॉप विंडो आश्वस्त।
- एंटी-फ्रॉड/मॉनिटरिंग, एसआरई अलर्ट, वास्तविक समय संतुलन/मिशन, "अब" सिफारिशें।
- इवेंट-अस-फैक्ट (EDC) एकीकरण, भौतिक दृश्य अद्यतन (CQRS)।
- Microservices: सूचनाएँ, वेबहूक, व्यावसायिक घटनाओं पर प्रतिक्रियाएँ।
- प्रवाह परिचालन प्रदर्शन और संकेत उत्पन्न करता है; नाइट बैच सुलह, तिजोरी और सस्ते ऐतिहासिक लाभ करता है।
वास्तुकला
लैंबडा (स्ट्रीम + बैच)
वृद्धि और ऑनलाइन के लिए स्ट्रीम; पूर्णता और सुधार के लिए बैच।
पेशेवरों: लचीलापन और एसएलए। विपक्ष: डबल लॉजिक, कोड दोहराव।
कप्पा (все - स्ट्रीम + रिप्ले)
सत्य के स्रोत के रूप में एक एकल लॉग; बैच-रिकॉल्कुलेशन = रीप्ले।
पेशेवरों: एक कोड बेस, एकल शब्दार्थ। विपक्ष: संचालित करने के लिए अधिक कठिन, भंडारण आवश्यकताओं को लॉग करें
हाइब्रिड-व्यावहारिक
भारी जुड़ाव/एमएल/सुधार के लिए "ऑपरेटिंग सिस्टम" + आवधिक बैच नौकरियों को स्ट्रीमिंग।
व्यवहार में, यह सबसे आम विकल्प है।
समय, अनुक्रम, विंडो (स्ट्रीम के लिए)
घटना समय पर भरोसा करें, प्रक्रिया समय नहीं.
वॉटरमार्क प्रबंधित करें और 'स्वीकार्य _ लेटनेस बाद की घटनाओं के लिए वापसी/अपसर्ट का समर्थन करें।
इकाई कुंजियों द्वारा विभाजन, "हॉट कुंजी" की योजना बनाएं।
विश्वसनीयता और प्रभाव के शब्दार्थ
बैच
डेटाबेस लेनदेन या बैचों/तालिकाओं का परमाणु प्रतिस्थापन।
Idempotency - नियतात्मक कंप्यूटिंग के माध्यम से और ओवरराइट/इंसर्ट-ओवरराइट के माध्यम से।
स्ट्रीम
कम से कम-एक बार + आइडेम्पोटेंट सिंक (अपसर्ट/मर्ज, एग्रीगेट के संस्करण)।
EOS के लिए लेन-देन "रीड-राइट-फिक्स पोजीशन" प्रभाव से।
'घटना _ id '/' ऑपरेशन _ id' द्वारा डीडुप्लीकेशन टेबल।
वाल्ट और प्रारूप
बैच
डेटा लेक (Parquet/Delta/Iceberg), OLAP (ClickHouse/BigQuery), ऑब्जेक्ट स्टोरेज।
परमाणु प्रतिस्थापन, समय यात्रा के लिए ACID टेबल।
स्ट्रीम
अनुमानों के लिए दलालों, राज्य भंडारों (RockDB/एम्बेडेड), KV/Redis, OLTP में लॉग/विषय।
स्कीमा रजिस्ट्री (एवरो/JSON/Proto), संगतता मोड।
लागत और एसएलओ
बैच: आप बैचों में भुगतान करते हैं - यह बड़ी मात्रा में लाभदायक है, लेकिन देरी - अनुसूची।
स्ट्रीम: निरंतर रनटाइम संसाधन, उच्च QPS पर चरम लागत; लेकिन सेकंड में SLA।
काउंट p95/p99 लेटेंसी, पास-थ्रू लैग, क्यू/इवेंट में लागत और टीसीओ का समर्थन करें।
परीक्षण
आम: गोल्डन-सेट, प्रॉपर्टी-आधारित इनवेरिएंट, गंदे इनपुट जनरेशन।
बैच: वाल्टों की तुलना से पहले/बाद में निर्धारण, पहचान पुनः प्रारंभ होती है।
स्ट्रीम: आउट-ऑफ-ऑर्डर/डुप्लिकेट्स, प्रभाव और ऑफसेट फिक्सेशन के बीच फॉल्ट-इंजेक्शन, रीप्ले परीक्षण।
अवलोकन क्षमता
बैच: नौकरी की अवधि, विफलताओं का हिस्सा/पीछे हटना, दुकान की खिड़कियों की ताजगी, स्कैन-लागत।
स्ट्रीम: समय/संदेश अंतराल, वॉटरमार्क, देर से दर, राज्य आकार/चेकपॉइंट आवृत्ति, डीएलक्यू दर।
हर जगह: 'ट्रेस _ आईडी', 'इवेंट _ आईडी', योजनाओं/पाइपलाइनों के संस्करण।
सुरक्षा और डेटा
PII/PCI - कम से कम, एन्क्रिप्ट एट-रेस्ट/इन-फ्लाइट, सर्किट में मार्क फ़ील्ड ('x-pii')।
स्ट्रीम - राज्य/चौकियों की सुरक्षा के लिए, विषयों के लिए एसीएल।
GDPR/भूल जाने का अधिकार: स्ट्रीम में - क्रिप्टो इरेज़र/अनुमानों में संपादन; बैचों के पुनर्गणना में।
संक्रमण रणनीतियाँ
बैच → स्ट्रीम: घटनाओं (आउटबॉक्स/सीडीसी) को प्रकाशित करके शुरू करें, मौजूदा तिजोरी को छूने के बिना एक छोटा वास्तविक समय शोकेस उठाएं।
स्ट्रीम → बैच - रिपोर्टिंग/सामंजस्य के लिए दैनिक वाल्ट जोड़ें और स्ट्रीमिंग सिंक पर लोड में कमी करें।
एंटी-पैटर्न
फैशन के लिए "ऑल इन स्ट्रीम": वास्तविक आवश्यकता के बिना महंगा और कठिन।
आवश्यकताओं के साथ "एक विशाल रात बैच" <5 मिनट।
व्यवसाय मैट्रिक्स के लिए प्रसंस्करण समय का उपयोग करें।
कच्चे सीडीसी सार्वजनिक कार्यक्रमों के रूप में: तंग कनेक्टिविटी, विकास में दर्द।
सिंक में कोई पहचान नहीं - पुनरारंभ पर दोहरा प्रभाव।
चयन जाँच सूची
- ताजगी एसएलओ: कितने सेकंड/मिनट/घंटे स्वीकार्य हैं?
- इनपुट स्थिरता: क्या आउट-ऑफ-ऑर्डर/डुप्लिकेट हैं?
- क्या मुझे ऑनलाइन प्रतिक्रियाओं/स्टोरफ्रंट की आवश्यकता है?
- लागत: रनटाइम 24/7 बनाम "अनुसूचित खिड़की"।
- सुधार विधि वापस लेने/अपसर्ट या रात की पुनर्गणना है।
- टीम और परिचालन परिपक्वता (अवलोकन, ऑन-कॉल)।
- "बिल्कुल एक प्रभाव" के लिए आवश्यकताएं।
- पीआईआई नीतियां/प्रतिधारण/भूलने का अधिकार।
संदर्भ पैटर्न
परिचालन शोकेस (हाइब्रिड):- स्ट्रीम: UI के लिए EDC → अनुमान (KV/Redis, OLTP), पहचाने जाने वाले अपसर्ट।
- बैच: ओएलएपी में रात की तिजोरी, सुलह, एमएल सुविधाएँ।
- स्ट्रीम: सत्र विंडोज़, सीईपी नियम, अलर्ट <1-5 s.
- बैच: पीछे हटना मॉडल, ऑफ़ लाइन सत्यापन।
- स्ट्रीम: ट्रिगर, वास्तविक समय खंड।
- बैच: स्कोरिंग, एलटीवी मॉडल, रिपोर्ट।
एफएक्यू
क्या बैच पर "लगभग वास्तविक समय" प्राप्त करना संभव है?
हां: माइक्रोबैच/ट्रिगर जैब्स (हर 1-5 मिनट में) - एक समझौता, लेकिन खिड़कियों/देर से होने वाली घटनाओं की जटिलता के बिना।
क्या लैम्ब्डा दृष्टिकोण की हर जगह आवश्यकता है?
नहीं, यह नहीं है। यदि थ्रेड सभी कार्यों को बंद कर देता है और आप जानते हैं कि रीप्ले कैसे करना है - कप्पा लंबे समय तक आसान है। अन्यथा - एक संकर।
लागत की गणना कैसे करें?
सम गणना + भंडारण + ऑप्स। स्ट्रीम के लिए, "24/7" डाउनटाइम मूल्य और आपातकालीन रातें जोड़ें; बैच के लिए - "अतिदेय" डेटा की कीमत।
परिणाम
कम लागत, सादगी और अवधि वाल्ट महत्वपूर्ण होने पर बैच चुनें; स्ट्रीम - जब प्रतिक्रिया और ताजगी महत्वपूर्ण होती है। व्यवहार में, हाइब्रिड जीतता है: धारा - ऑनलाइन और संकेतों के लिए, बैच - पूर्णता और सस्ते ऐतिहासिक पुनर्गणना के लिए। मुख्य बात यह है कि एसएलओ सेट करना, पहचान/अवलोकन सुनिश्चित करना और अग्रिम में सुधार पथ को डिजाइन करना।