मैं इस QA पर वापस आता रहता हूं। और मुझे मौजूदा उत्तर पर्याप्त नहीं मिले, इसलिए मैं इसे जोड़ रहा हूं।
टी एल; डॉ। आपके इवेंट सोर्सिंग उपयोग के आधार पर हां या नहीं।
दो प्राथमिक प्रकार के इवेंट सोर्स किए गए सिस्टम हैं जिनमें से मैं जागरूक हूं।
डाउनस्ट्रीम ईवेंट प्रोसेसर = हाँ
इस तरह की प्रणाली में, वास्तविक दुनिया में घटनाएं होती हैं और तथ्यों के रूप में दर्ज की जाती हैं। जैसे कि उत्पादों की पट्टियों पर नज़र रखने के लिए वेयरहाउस सिस्टम। मूल रूप से कोई परस्पर विरोधी घटनाएँ नहीं हैं। सब कुछ पहले से ही हुआ है, भले ही वह गलत था। (यानी फूस 123456 ट्रक ए पर रखा गया था, लेकिन ट्रक बी के लिए निर्धारित किया गया था) फिर बाद में तथ्यों को रिपोर्टिंग तंत्रों के अपवादों के लिए जांचा जाता है। इस तरह के डाउन-स्ट्रीम, इवेंट प्रोसेसिंग एप्लिकेशन के लिए काफ्का अच्छी तरह से अनुकूल लगता है।
इस संदर्भ में, यह समझा जा सकता है कि काफ्का लोग इसे इवेंट सोर्सिंग समाधान के रूप में क्यों मान रहे हैं। क्योंकि यह काफी समान है कि यह पहले से कैसे उपयोग किया जाता है, उदाहरण के लिए, धाराओं पर क्लिक करें। हालाँकि, इवेंट सोर्सिंग (स्ट्रीम प्रोसेसिंग के विपरीत) शब्द का उपयोग करने वाले लोग दूसरे उपयोग की बात कर रहे हैं ...
सत्य का अनुप्रयोग-नियंत्रित स्रोत = नहीं
इस तरह का एप्लिकेशन व्यावसायिक तर्क से गुजरने वाले उपयोगकर्ता अनुरोधों के परिणामस्वरूप अपनी स्वयं की घटनाओं की घोषणा करता है। दो प्राथमिक कारणों से काफ्का इस मामले में अच्छा काम नहीं करता है।
इकाई अलगाव की कमी
इस परिदृश्य को किसी विशिष्ट इकाई के लिए ईवेंट स्ट्रीम को लोड करने की क्षमता की आवश्यकता होती है। इसके लिए सामान्य कारण अनुरोध को संसाधित करने के लिए व्यावसायिक तर्क के लिए एक क्षणिक लेखन मॉडल का निर्माण करना है। ऐसा करना काफ्का में अव्यवहारिक है। विषय-प्रति-इकाई का उपयोग करके यह अनुमति दे सकता है, इसके अलावा यह एक गैर-स्टार्टर है जब हजारों या लाखों इकाइयां हो सकती हैं। यह कफ़्का / ज़ुकीपर में तकनीकी सीमाओं के कारण है।
इस तरह से क्षणिक लिखने के मॉडल का उपयोग करने का एक मुख्य कारण व्यवसाय तर्क को सस्ते और तैनाती के लिए आसान बनाना है।
काफ्का के बजाय विषय-प्रति-प्रकार का उपयोग करने की अनुशंसा की जाती है, लेकिन इसके लिए उस प्रकार की प्रत्येक इकाई के लिए केवल एक इकाई के लिए घटनाओं को लोड करने की घटनाओं की आवश्यकता होगी । चूंकि आप लॉग पोजीशन द्वारा यह नहीं बता सकते हैं कि कौन सी ईवेंट किस इकाई से संबंधित हैं। यहां तक कि एक ज्ञात लॉग पोजीशन से शुरू करने के लिए स्नैपशॉट का उपयोग करना, यह एक महत्वपूर्ण घटना हो सकती है।
संघर्ष का पता लगाने का अभाव
दूसरे, उपयोगकर्ता एक ही इकाई के खिलाफ समवर्ती अनुरोधों के कारण दौड़ की स्थिति बना सकते हैं। इस तथ्य के बाद परस्पर विरोधी घटनाओं को बचाने और उन्हें हल करने के लिए काफी अवांछनीय हो सकता है। इसलिए परस्पर विरोधी घटनाओं को रोकने में सक्षम होना महत्वपूर्ण है। अनुरोध लोड को स्केल करने के लिए, स्टेटिक राइट्स का उपयोग करते हुए लिखने के संघर्ष को रोकने के लिए स्टेटलेस सेवाओं का उपयोग करना आम है (केवल यह लिखें कि अंतिम इकाई घटना #x थी)। आका ऑप्टिमिस्टिक कंसीडर। Kafka आशावादी संगामिति का समर्थन नहीं करता है। यहां तक कि अगर यह विषय के स्तर पर इसका समर्थन करता है, तो इसे प्रभावी होने के लिए इकाई स्तर तक सभी तरह की आवश्यकता होगी। काफ्का का उपयोग करने और परस्पर विरोधी घटनाओं को रोकने के लिए, आपको एप्लिकेशन स्तर पर एक स्टेटफुल, क्रमबद्ध लेखक का उपयोग करना होगा। यह एक महत्वपूर्ण वास्तु आवश्यकता / प्रतिबंध है।
अग्रिम जानकारी
प्रति टिप्पणी अपडेट करें
टिप्पणी हटा दी गई है, लेकिन सवाल कुछ इस तरह था: लोग घटना भंडारण के लिए फिर क्या उपयोग करते हैं?
ऐसा लगता है कि अधिकांश लोग मौजूदा डेटाबेस के शीर्ष पर अपने स्वयं के इवेंट स्टोरेज कार्यान्वयन को रोल करते हैं। गैर-वितरित परिदृश्यों के लिए, आंतरिक बैक-एंड या स्टैंड-अलोन उत्पादों की तरह , यह अच्छी तरह से प्रलेखित है कि SQL- आधारित ईवेंट स्टोर कैसे बनाया जाए। और विभिन्न प्रकार के डेटाबेस के शीर्ष पर उपलब्ध पुस्तकालय हैं। EventStore भी है , जो इस उद्देश्य के लिए बनाया गया है।
वितरित परिदृश्यों में, मैंने कुछ अलग-अलग कार्यान्वयन देखे हैं। जेट का पैंथर प्रोजेक्ट श्रोताओं को सूचित करने के लिए चेंज फीड फीचर के साथ एज़्योर कॉस्मोसडीबी का उपयोग करता है। इसी तरह का एक और कार्यान्वयन जो मैंने एडब्ल्यूएस के बारे में सुना है, वह श्रोताओं को सूचित करने के लिए अपने स्ट्रीम फीचर के साथ डायनमोडीबी का उपयोग कर रहा है। विभाजन कुंजी शायद सबसे अच्छा डेटा वितरण (अधिक प्रावधान की मात्रा को कम करने) के लिए स्ट्रीम आईडी होनी चाहिए। हालांकि, डायनमो में धाराओं के पार एक पूरा रीप्ले महंगा है (पढ़ें और लागत-वार)। तो यह इम्प्लांट डायनमो स्ट्रीम्स के लिए भी घटनाओं को S3 में डंप करने के लिए सेटअप किया गया था। जब कोई नया श्रोता ऑनलाइन आता है, या कोई मौजूदा श्रोता पूर्ण रीप्ले चाहता है, तो वह S3 को पहले पकड़ लेगा।
मेरी वर्तमान परियोजना एक बहु-किरायेदार परिदृश्य है, और मैंने पोस्टग्रेज के शीर्ष पर अपना खुद का रोल किया। साइटस जैसे स्केलेबिलिटी के लिए उपयुक्त लगता है, टेंटेंट + स्ट्रीम द्वारा विभाजन।
वितरित परिदृश्यों में कफका अभी भी बहुत उपयोगी है। प्रत्येक सेवा की घटनाओं को अन्य सेवाओं में उजागर करना एक गैर-तुच्छ समस्या है। एक इवेंट स्टोर आम तौर पर उस के लिए नहीं बनाया जाता है, लेकिन ठीक वही है जो काफ्का अच्छा करता है। प्रत्येक सेवा के पास सत्य का अपना आंतरिक स्रोत होता है (घटना भंडारण या अन्यथा हो सकता है), लेकिन कफ़्का को यह जानने के लिए सुनता है कि "बाहर" क्या हो रहा है। सेवा ने काफ्का को ऐसी घटनाओं को भी पोस्ट किया है जो सेवा ने दिलचस्प चीजों के "बाहर" को सूचित किया।