एक (CQRS) Eventstore के रूप में काफ्का का उपयोग करना। अच्छा विचार?


219

हालांकि मैं का सामना करना पड़ा काफ्का से पहले, मैं अभी हाल ही में एहसास हुआ कि काफ्का शायद के रूप में (के आधार) एक इस्तेमाल किया जा सकता CQRS , eventstore

मुख्य बिंदुओं में से एक जो काफ्का का समर्थन करता है:

  • ईवेंट कैप्चरिंग / भंडारण, सभी हा।
  • पब / उप वास्तुकला
  • इस तथ्य को फिर से दोहराने की क्षमता जो नए ग्राहकों को तथ्य के बाद सिस्टम के साथ पंजीकरण करने की क्षमता प्रदान करता है।

माना जाता है कि मैं 100% CQRS / Event सोर्सिंग में निपुण नहीं हूं, लेकिन ऐसा लगता है कि एक इवेंटस्टोर क्या होना चाहिए। मजेदार बात यह है: मैं वास्तव में काफ्का के बारे में इतना कुछ नहीं पा सकता हूं कि एक घटना के रूप में इस्तेमाल किया जा रहा है, इसलिए शायद मुझे कुछ याद आ रहा है।

तो, काफ्का के लिए एक अच्छी घटना होने के लिए कुछ भी गायब है? यह काम करेगा? यह उत्पादन का उपयोग? अंतर्दृष्टि, लिंक आदि में रुचि।

मूल रूप से सिस्टम की स्थिति को उन लेनदेन / घटनाओं के आधार पर सहेजा जाता है जो सिस्टम को कभी भी मिले हैं, इसके बजाय सिस्टम की वर्तमान स्थिति / स्नैपशॉट को बचाने के बजाय जो आमतौर पर होता है। (लेखांकन में एक जनरल लेजर के रूप में सोचो: सभी लेनदेन अंततः अंतिम स्थिति तक जोड़ते हैं) यह सभी प्रकार की शांत चीजों की अनुमति देता है, लेकिन बस प्रदान किए गए लिंक पर पढ़ें।


हाय गीर्ट-जान। पूर्वव्यापी में, आपने इस समस्या से कैसे निपटा? मेरे पास एक संबंधित प्रश्न है (यहां उजागर: stackoverflow.com/questions/58763727/… )। काफ्का के गोद लेने का सुझाव देने वाले ज्यादातर लोग अपेंड-लॉग इनमुटिबिलिटी, हाई थ्रूपुट और पार्टीशन ऑर्डर गारंटी के बिंदुओं पर भरोसा करते दिखते हैं। मैं विषयों के भीतर तेजी से खोज से संबंधित समस्याओं को देखता हूं (इकाई "पुनर्निर्माण" के लिए), कोई लेन-देन की अशुद्धता और कोई ऑर्डरिंग विभाजन नहीं। (100% आदेश की गारंटी का अर्थ केवल 1 विभाजन का उपयोग करते हुए-संगीतात्मकता का उपयोग करना है)
tony _008

मैं इसे समाप्त नहीं कर पाया क्योंकि मैंने उस साइडप्रोजेक्ट को समाप्त कर दिया था। तो कोई स्पष्ट जवाब नहीं मुझे डर है
जेरट-जन

जवाबों:


119

काफ्का का मतलब एक मैसेजिंग सिस्टम है, जिसमें एक इवेंट स्टोर में कई समानताएं हैं, लेकिन अपने इंट्रो को उद्धृत करने के लिए:

काफ्का क्लस्टर सभी प्रकाशित संदेशों को बरकरार रखता है - भले ही उनका उपभोग किया गया हो या नहीं - समय की एक विन्यास अवधि के लिए । उदाहरण के लिए यदि प्रतिधारण दो दिनों के लिए सेट है, तो एक संदेश प्रकाशित होने के बाद दो दिनों के लिए यह उपभोग के लिए उपलब्ध है, जिसके बाद इसे खाली स्थान खाली करने के लिए छोड़ दिया जाएगा। कफ़्का का प्रदर्शन डेटा आकार के संबंध में प्रभावी रूप से स्थिर है, इसलिए बहुत सारे डेटा को बनाए रखना कोई समस्या नहीं है।

इसलिए जबकि संदेश संभावित रूप से अनिश्चित काल तक बनाए रखा जा सकता है, उम्मीद है कि वे हटा दिए जाएंगे। इसका मतलब यह नहीं है कि आप इसे इवेंट स्टोर के रूप में उपयोग नहीं कर सकते हैं, लेकिन कुछ और का उपयोग करना बेहतर हो सकता है। एक विकल्प के लिए EventStore पर एक नज़र डालें ।

अपडेट करें

काफ्का प्रलेखन :

इवेंट सोर्सिंग एप्लिकेशन डिज़ाइन की एक शैली है जहाँ राज्य परिवर्तन रिकॉर्ड के क्रम के रूप में लॉग किए जाते हैं। बहुत बड़े संग्रहित लॉग डेटा के लिए काफ्का का समर्थन इस शैली में निर्मित एप्लिकेशन के लिए एक उत्कृष्ट बैकएंड बनाता है।

अद्यतन २

इवेंट सोर्सिंग के लिए काफ्का के उपयोग के साथ एक चिंता आवश्यक विषयों की संख्या है। आमतौर पर इवेंट सोर्सिंग में, प्रति इकाई घटनाओं (जैसे उपयोगकर्ता, उत्पाद, आदि) की एक धारा (विषय) होती है। इस तरह, धारा में सभी घटनाओं को फिर से लागू करके एक इकाई की वर्तमान स्थिति का पुनर्गठन किया जा सकता है। प्रत्येक काफ्का विषय में एक या अधिक विभाजन होते हैं और प्रत्येक विभाजन को फाइल सिस्टम पर एक निर्देशिका के रूप में संग्रहीत किया जाता है। ज़ूकोड बढ़ने से ज़ूकेपर का दबाव भी होगा।


16
मैं काफ्का को देख रहा था और मुझे एक और चिंता थी: मुझे आशावादी-निर्णायक के बारे में कुछ भी ध्यान नहीं आया। आदर्श रूप में मैं कह सकता हूं: "इस घटना को आइटम एन + 1 के रूप में जोड़ें, यदि ऑब्जेक्ट का सबसे हालिया इवेंट अभी भी एन है।"
डेरेन

2
@ डेरेन: मैं शायद एक सेटअप के साथ जा रहा हूं जहां रेडिस काफ्का ( रेडिस नोटिफिकेशन का उपयोग करके ) को खिलाती है । चूंकि Redis आशावादी संगामिति (घड़ी / बहु-निष्पादन का उपयोग करके) की अनुमति देता है, इसलिए यह काम करना चाहिए
Geert-Jan

2
@Darien मैं इवेंट सोर्सिंग का विशेषज्ञ नहीं हूं, लेकिन मेरी समझ यह थी कि आम तौर पर बोलने के लिए आपको आशावादी संगोष्ठी की आवश्यकता नहीं होती है क्योंकि घटनाएं उन चीजों के परिभाषा रिकॉर्ड द्वारा होती हैं जो पहले से ही ऐतिहासिक रूप से हुई हैं।
जॉन

4
@ जॉन मुझे लगता है कि यदि आपके पास पहले से ही गैर-परस्पर विरोधी घटनाओं का आधिकारिक आदेश है, तो इसका मतलब है कि वे जहां भी रहते हैं वह आपकी वास्तविक घटना-स्टोर तकनीक है, और काफ्का बस उन्हें वितरित करने के लिए एक माध्यमिक प्रणाली के रूप में उपयोग किया जा रहा है।
दरियाई

1
: वहाँ भी बहुमूल्य जानकारी यहाँ है groups.google.com/forum/#!topic/dddcqrs/rm02iCfffUY
manuc66

283

मैं काफ्का के मूल लेखकों में से एक हूं। काफ्का इवेंट सोर्सिंग के लिए लॉग के रूप में बहुत अच्छा काम करेगा। यह दोष-सहिष्णु है, डेटा आकार में भारी वृद्धि करता है, और इसमें निर्मित विभाजन मॉडल है।

हम लिंक्डइन पर इस फॉर्म के कई उपयोग मामलों के लिए इसका उपयोग करते हैं। उदाहरण के लिए हमारे ओपन सोर्स स्ट्रीम प्रोसेसिंग सिस्टम, अपाचे सैमज़ा, इवेंट सोर्सिंग के लिए बिल्ट-इन सपोर्ट के साथ आता है ।

मुझे लगता है कि आप मुख्य रूप से इवेंट सोर्सिंग के लिए काफ्का का उपयोग करने के बारे में ज्यादा नहीं सुनते क्योंकि इवेंट सोर्सिंग शब्दावली उपभोक्ता वेब स्पेस में बहुत प्रचलित नहीं है जहां काफ्का सबसे लोकप्रिय है।

मैंने यहाँ काफ्का उपयोग की इस शैली के बारे में थोड़ा लिखा है


2
उस लिंक को पोस्ट करने जा रहा था :) बहुत बढ़िया ब्लॉग पोस्ट। अच्छा होता कि मैं इस पर टिप्पणी कर पाता क्योंकि मेरे कई सवाल हैं। @ गेर्ट-जान "लैंबडा आर्किटेक्चर" पर भी एक नज़र डालते हैं, यह काफी समान है और यह नाम स्टॉर्म लेखक से दिया गया है, ज्यादातर किसी तरह के हडूप आधारित ईवेंट लॉग का कई उदाहरणों में उपयोग करते हैं
सेबस्टियन

6
@ जय: जब से मैंने इस विषय में रुचि का नवीनीकरण किया है, क्या आप इस तथ्य पर थोड़ा विस्तार कर सकते हैं कि क्या काफ्का को लगता है कि यह प्रकाशित संदेश समय की एक निर्धारित अवधि के बाद समाप्त हो गया है? यदि काफ़्का का उपयोग एक इवेंटसोर्स के रूप में किया जाता है, तो संदेशों को अनिश्चित काल तक संग्रहीत किया जाना चाहिए। यह शायद विन्यास योग्य है, लेकिन क्या इससे कोई समस्या पैदा होगी?
गीर्ट-जान

2
क्या काफ्का और इवेंटस्टोर के बीच कोई तुलना है? विशेष रूप से मुझे अनुमानों में एफआरपी पर ध्यान केंद्रित करना पसंद है। क्या काफ़्का / सामजा में ऐसा कुछ है?
CMCDragonkai

4
मुझे @ गीर्ट-जान के जे के सवाल पर भी दिलचस्पी है। डोमेन एग्रीगेट (लाखों लोग सोचो) की घटनाओं (विषय) की एक धारा की आवश्यकता के कारण वास्तविक घटना सोर्सिंग ट्रांजेक्शनल पक्ष के लिए काफ्का उपयुक्त नहीं है। हालाँकि, यह आदर्श रूप से ईवेंट GetEventStore से इसमें प्राप्त होने के लिए अनुकूल है। लेकिन यह केवल असीम रूप से बनाए रखा घटनाओं (हमारे मामले में) के साथ काम करेगा, और कुछ संक्षिप्त टिप्पणियों से अलग, यह काफ्का का एक समर्थित उपयोग मामला नहीं लगता है? क्या मैं यहाँ गलत हूँ? उदाहरण के लिए, सैमज़ा, केवल दो परिदृश्य हैं: समय-आधारित अवधारण या कुंजी-आधारित अवधारण। अन्य लोग भी हैं ..
स्टीफन ड्र्यू

3
@eulerfx यह मानते हुए कि हम कफ़्का का उपयोग घटना के लिए स्टोरेज सिस्टम के रूप में करना चाहते हैं, आशावादी लॉकिंग / कंसीडर को कैसे लागू किया जाना चाहिए?
क्रिज़िस्तोफ़ ब्रानिकी

51

मैं इस QA पर वापस आता रहता हूं। और मुझे मौजूदा उत्तर पर्याप्त नहीं मिले, इसलिए मैं इसे जोड़ रहा हूं।

टी एल; डॉ। आपके इवेंट सोर्सिंग उपयोग के आधार पर हां या नहीं।

दो प्राथमिक प्रकार के इवेंट सोर्स किए गए सिस्टम हैं जिनमें से मैं जागरूक हूं।

डाउनस्ट्रीम ईवेंट प्रोसेसर = हाँ

इस तरह की प्रणाली में, वास्तविक दुनिया में घटनाएं होती हैं और तथ्यों के रूप में दर्ज की जाती हैं। जैसे कि उत्पादों की पट्टियों पर नज़र रखने के लिए वेयरहाउस सिस्टम। मूल रूप से कोई परस्पर विरोधी घटनाएँ नहीं हैं। सब कुछ पहले से ही हुआ है, भले ही वह गलत था। (यानी फूस 123456 ट्रक ए पर रखा गया था, लेकिन ट्रक बी के लिए निर्धारित किया गया था) फिर बाद में तथ्यों को रिपोर्टिंग तंत्रों के अपवादों के लिए जांचा जाता है। इस तरह के डाउन-स्ट्रीम, इवेंट प्रोसेसिंग एप्लिकेशन के लिए काफ्का अच्छी तरह से अनुकूल लगता है।

इस संदर्भ में, यह समझा जा सकता है कि काफ्का लोग इसे इवेंट सोर्सिंग समाधान के रूप में क्यों मान रहे हैं। क्योंकि यह काफी समान है कि यह पहले से कैसे उपयोग किया जाता है, उदाहरण के लिए, धाराओं पर क्लिक करें। हालाँकि, इवेंट सोर्सिंग (स्ट्रीम प्रोसेसिंग के विपरीत) शब्द का उपयोग करने वाले लोग दूसरे उपयोग की बात कर रहे हैं ...

सत्य का अनुप्रयोग-नियंत्रित स्रोत = नहीं

इस तरह का एप्लिकेशन व्यावसायिक तर्क से गुजरने वाले उपयोगकर्ता अनुरोधों के परिणामस्वरूप अपनी स्वयं की घटनाओं की घोषणा करता है। दो प्राथमिक कारणों से काफ्का इस मामले में अच्छा काम नहीं करता है।

इकाई अलगाव की कमी

इस परिदृश्य को किसी विशिष्ट इकाई के लिए ईवेंट स्ट्रीम को लोड करने की क्षमता की आवश्यकता होती है। इसके लिए सामान्य कारण अनुरोध को संसाधित करने के लिए व्यावसायिक तर्क के लिए एक क्षणिक लेखन मॉडल का निर्माण करना है। ऐसा करना काफ्का में अव्यवहारिक है। विषय-प्रति-इकाई का उपयोग करके यह अनुमति दे सकता है, इसके अलावा यह एक गैर-स्टार्टर है जब हजारों या लाखों इकाइयां हो सकती हैं। यह कफ़्का / ज़ुकीपर में तकनीकी सीमाओं के कारण है।

इस तरह से क्षणिक लिखने के मॉडल का उपयोग करने का एक मुख्य कारण व्यवसाय तर्क को सस्ते और तैनाती के लिए आसान बनाना है।

काफ्का के बजाय विषय-प्रति-प्रकार का उपयोग करने की अनुशंसा की जाती है, लेकिन इसके लिए उस प्रकार की प्रत्येक इकाई के लिए केवल एक इकाई के लिए घटनाओं को लोड करने की घटनाओं की आवश्यकता होगी । चूंकि आप लॉग पोजीशन द्वारा यह नहीं बता सकते हैं कि कौन सी ईवेंट किस इकाई से संबंधित हैं। यहां तक ​​कि एक ज्ञात लॉग पोजीशन से शुरू करने के लिए स्नैपशॉट का उपयोग करना, यह एक महत्वपूर्ण घटना हो सकती है।

संघर्ष का पता लगाने का अभाव

दूसरे, उपयोगकर्ता एक ही इकाई के खिलाफ समवर्ती अनुरोधों के कारण दौड़ की स्थिति बना सकते हैं। इस तथ्य के बाद परस्पर विरोधी घटनाओं को बचाने और उन्हें हल करने के लिए काफी अवांछनीय हो सकता है। इसलिए परस्पर विरोधी घटनाओं को रोकने में सक्षम होना महत्वपूर्ण है। अनुरोध लोड को स्केल करने के लिए, स्टेटिक राइट्स का उपयोग करते हुए लिखने के संघर्ष को रोकने के लिए स्टेटलेस सेवाओं का उपयोग करना आम है (केवल यह लिखें कि अंतिम इकाई घटना #x थी)। आका ऑप्टिमिस्टिक कंसीडर। Kafka आशावादी संगामिति का समर्थन नहीं करता है। यहां तक ​​कि अगर यह विषय के स्तर पर इसका समर्थन करता है, तो इसे प्रभावी होने के लिए इकाई स्तर तक सभी तरह की आवश्यकता होगी। काफ्का का उपयोग करने और परस्पर विरोधी घटनाओं को रोकने के लिए, आपको एप्लिकेशन स्तर पर एक स्टेटफुल, क्रमबद्ध लेखक का उपयोग करना होगा। यह एक महत्वपूर्ण वास्तु आवश्यकता / प्रतिबंध है।

अग्रिम जानकारी


प्रति टिप्पणी अपडेट करें

टिप्पणी हटा दी गई है, लेकिन सवाल कुछ इस तरह था: लोग घटना भंडारण के लिए फिर क्या उपयोग करते हैं?

ऐसा लगता है कि अधिकांश लोग मौजूदा डेटाबेस के शीर्ष पर अपने स्वयं के इवेंट स्टोरेज कार्यान्वयन को रोल करते हैं। गैर-वितरित परिदृश्यों के लिए, आंतरिक बैक-एंड या स्टैंड-अलोन उत्पादों की तरह , यह अच्छी तरह से प्रलेखित है कि SQL- आधारित ईवेंट स्टोर कैसे बनाया जाए। और विभिन्न प्रकार के डेटाबेस के शीर्ष पर उपलब्ध पुस्तकालय हैं। EventStore भी है , जो इस उद्देश्य के लिए बनाया गया है।

वितरित परिदृश्यों में, मैंने कुछ अलग-अलग कार्यान्वयन देखे हैं। जेट का पैंथर प्रोजेक्ट श्रोताओं को सूचित करने के लिए चेंज फीड फीचर के साथ एज़्योर कॉस्मोसडीबी का उपयोग करता है। इसी तरह का एक और कार्यान्वयन जो मैंने एडब्ल्यूएस के बारे में सुना है, वह श्रोताओं को सूचित करने के लिए अपने स्ट्रीम फीचर के साथ डायनमोडीबी का उपयोग कर रहा है। विभाजन कुंजी शायद सबसे अच्छा डेटा वितरण (अधिक प्रावधान की मात्रा को कम करने) के लिए स्ट्रीम आईडी होनी चाहिए। हालांकि, डायनमो में धाराओं के पार एक पूरा रीप्ले महंगा है (पढ़ें और लागत-वार)। तो यह इम्प्लांट डायनमो स्ट्रीम्स के लिए भी घटनाओं को S3 में डंप करने के लिए सेटअप किया गया था। जब कोई नया श्रोता ऑनलाइन आता है, या कोई मौजूदा श्रोता पूर्ण रीप्ले चाहता है, तो वह S3 को पहले पकड़ लेगा।

मेरी वर्तमान परियोजना एक बहु-किरायेदार परिदृश्य है, और मैंने पोस्टग्रेज के शीर्ष पर अपना खुद का रोल किया। साइटस जैसे स्केलेबिलिटी के लिए उपयुक्त लगता है, टेंटेंट + स्ट्रीम द्वारा विभाजन।

वितरित परिदृश्यों में कफका अभी भी बहुत उपयोगी है। प्रत्येक सेवा की घटनाओं को अन्य सेवाओं में उजागर करना एक गैर-तुच्छ समस्या है। एक इवेंट स्टोर आम तौर पर उस के लिए नहीं बनाया जाता है, लेकिन ठीक वही है जो काफ्का अच्छा करता है। प्रत्येक सेवा के पास सत्य का अपना आंतरिक स्रोत होता है (घटना भंडारण या अन्यथा हो सकता है), लेकिन कफ़्का को यह जानने के लिए सुनता है कि "बाहर" क्या हो रहा है। सेवा ने काफ्का को ऐसी घटनाओं को भी पोस्ट किया है जो सेवा ने दिलचस्प चीजों के "बाहर" को सूचित किया।


1
@Dominik मैंने अद्यतन अनुभाग (2 पैरा) में EventStore का उल्लेख किया है। मैं वापस जाऊंगा और इसे लिंक करूंगा। मैंने इसे आज़माया है, और इसमें प्रभावशाली परफ़ेक्ट है। हमारी छोटी टीम के लिए, किसी अन्य डेटाबेस की शुरुआत नहीं करना समय के लिए अधिक महत्वपूर्ण माना जाता था, इसलिए पोस्टग्रेज (जिसका उपयोग विचारों के लिए भी किया जाता है)। यह संभव है कि हम भविष्य में या भविष्य के उत्पादों में EventStore पर जाएं।
केसी स्पीकमैन

2
@KaseySpeakman विषय विभाजन के समान नहीं हैं। एक विषय में एक या अधिक विभाजन होते हैं। विभाजन की गारंटी किसी भी क्षण में प्रति समूह केवल एक उपभोक्ता के पास होती है। अपनी संस्थाओं को इस तरह से विभाजित करें कि उसका लाभ उठा सकें। आपको प्रति इकाई या यहां तक ​​कि विभाजन प्रति इकाई विषय की आवश्यकता नहीं है। आपको बस उन्हें इस तरह से विभाजित करने की आवश्यकता है कि गारंटी देने के लिए कि एक ही इकाई को संबोधित सभी आदेश एक ही विभाजन पर जाएं।
एंड्रयू लार्सन

1
@ KaseySpeakman कई इकाइयां एक ही विभाजन को साझा कर सकती हैं। किसने कहा कि आपको हमेशा घटनाओं को फिर से देखते हुए इवेंट स्टोर से सीधे इकाई की स्थिति को लोड करना होगा? लाइन-बाय-लाइन ग्रेग यंग के कार्यान्वयन के बिना समान अवधारणा को प्राप्त करने के अन्य तरीके हैं।
एंड्रयू लार्सन

1
@AndrewLarsson यदि आप प्रति इकाई विभाजन नहीं करते हैं, तो आप इकाई स्तर पर परस्पर विरोधी घटनाओं को कैसे रोकेंगे? जब से हम समसामयिक संघर्षों के लिए पूर्ण सर्कल वापस आए हैं, तब शायद आपको अपने स्वयं के लेख को मध्यम या कुछ पर पोस्ट करना चाहिए कि आपने उत्पादन में इवेंट सोर्सिंग (स्ट्रीम स्ट्रीम नहीं) के लिए काफ्का का उपयोग कैसे किया है। आप इसे किस प्रकार के विभाजन के साथ और इकाई स्तर के समवर्ती नियंत्रण के बिना पूरा करते हैं। अगर मैं असहमत होता तो मैं इसे पढ़ता, और मैं आपको टिप्पणियों में ट्रोल भी नहीं करता।
केसी स्पीकमैन

2
@ KaseySpeakman काफ्का का इस तरह इस्तेमाल करना किसी भी तरह से आसान नहीं है। लेकिन अगर आप उस पैमाने पर हैं जहां आपने सीक्यूआरएस और इवेंट सोर्सिंग पर गंभीरता से विचार किया है, तो आप उस पैमाने पर हैं जहां आप चीजों को आसान तरीके से करने का जोखिम नहीं उठा सकते। आपके कॉन्सेप्ट मॉडल का आपके पैमाने पर सीधा प्रभाव पड़ता है - मनमाने ढंग से एक का चयन न करें। इसके अलावा, HTTP एक विश्वसनीय परिवहन नहीं है, और फिर, यदि आप उस पैमाने पर हैं, तो आप खोए हुए संदेश और / या डुप्लिकेट संदेश समस्याओं को हल करने में समय व्यतीत नहीं कर सकते। यह सब क्लाइंट और कमांड प्रोसेसर के बीच काफ्का का उपयोग करके हल किया जा सकता है, लेकिन हां, यह जटिलता की कीमत पर आता है।
एंड्रयू लार्सन

20

आप काफ्का को इवेंट स्टोर के रूप में उपयोग कर सकते हैं, लेकिन मैं ऐसा करने की सलाह नहीं देता, हालांकि यह अच्छा विकल्प लग सकता है:

  • काफ्का केवल कम से कम एक बार डिलीवरी की गारंटी देता है और ईवेंट स्टोर में डुप्लिकेट हैं जिन्हें हटाया नहीं जा सकता है। अपडेट: यहां आप पढ़ सकते हैं कि कफ़्का के साथ यह इतना कठिन क्यों है और इस व्यवहार को कैसे प्राप्त किया जाए, इसके बारे में कुछ नवीनतम समाचार: https://www.confluent.io/blog/exactly-once-semantics-are-possible/heres-how -apache-काफ्का-करता-यह /
  • अपरिवर्तनीयता के कारण, ईवेंट स्टोर में हेरफेर करने का कोई तरीका नहीं है जब एप्लिकेशन विकसित होता है और घटनाओं को बदलना पड़ता है (कोर्स के तरीके जैसे कि अपकास्टिंग, लेकिन ...)। एक बार कह सकते हैं कि आपको घटनाओं को बदलने की आवश्यकता नहीं है, लेकिन यह सही धारणा नहीं है, ऐसी स्थिति हो सकती है जहां आप मूल का बैकअप लेते हैं, लेकिन आप उन्हें नवीनतम संस्करणों में अपग्रेड करते हैं। यह घटना संचालित आर्किटेक्चर में वैध आवश्यकता है।
  • संस्थाओं / समुच्चय और रिप्ले के स्नैपशॉट को बनाए रखने के लिए कोई स्थान धीमा और धीमा नहीं होगा। स्नैपशॉट बनाना दीर्घकालिक दृष्टिकोण से इवेंट स्टोर के लिए आवश्यक है।
  • यह देखते हुए काफ्का विभाजन वितरित किए जाते हैं और वे डेटाबेस के साथ तुलना और प्रबंधन करने में मुश्किल होते हैं। डेटाबेस बस सरल हैं :-)

इसलिए, अपनी पसंद बनाने से पहले आप दो बार सोचते हैं। इवेंट स्टोर एप्लीकेशन लेयर इंटरफेस (निगरानी और प्रबंधन), एसक्यूएल / नोएसक्यूएल स्टोर और काफ्का के संयोजन के रूप में, ब्रोकर केफका हैंडल को छोड़ने से बेहतर विकल्प है कि पूरी सुविधा पूर्ण समाधान बनाने के लिए दोनों भूमिकाओं को संभाल लें।

इवेंट स्टोर जटिल सेवा है जिसके लिए काफ्का की पेशकश से अधिक की आवश्यकता होती है यदि आप इवेंट सोर्सिंग वास्तुकला में इवेंट सोर्सिंग, सीक्यूआरएस, सागास और अन्य पैटर्न को लागू करने के बारे में गंभीर हैं और उच्च प्रदर्शन पर बने रहें।

मेरे जवाब को चुनौती देने के लिए स्वतंत्र महसूस करें! आप ओवरलैपिंग क्षमताओं के साथ अपने पसंदीदा ब्रोकर के बारे में जो कहते हैं, वह आपको पसंद नहीं आ सकता है, लेकिन फिर भी, काफ्का को इवेंट स्टोर के रूप में डिज़ाइन नहीं किया गया था, बल्कि उच्च प्रदर्शन ब्रोकर और बफर के रूप में एक ही समय में तेजी से उत्पादकों बनाम धीमे उपभोक्ता परिदृश्यों को संभालने के लिए, उदाहरण के लिए।

संभावित समस्याओं के बारे में अधिक जानकारी के लिए कृपया नीचे दिए गए ईवेंट micioervices के ओपन सोर्स ढांचे को देखें: http://eventuate.io/

8 फरवरी 2018 तक अपडेट करें

मैं टिप्पणियों से नई जानकारी को शामिल नहीं करता, लेकिन उनमें से कुछ पहलुओं पर सहमत हूं। यह अपडेट माइक्रोसर्विस इवेंट-संचालित प्लेटफॉर्म के लिए कुछ सिफारिशों के बारे में अधिक है। यदि आप microservice मजबूत डिजाइन और सामान्य रूप से उच्चतम संभव प्रदर्शन के बारे में गंभीर हैं, तो मैं आपको कुछ संकेत प्रदान कर सकता हूं जिनकी आपको रुचि हो सकती है।

  1. वसंत का उपयोग न करें - यह बहुत अच्छा है (मैं इसे स्वयं बहुत उपयोग करता हूं), लेकिन एक ही समय में भारी और धीमा होता है। और यह microservice मंच बिल्कुल नहीं है। यह "सिर्फ" एक ढांचा है जो आपको एक को लागू करने में मदद करता है (इसके पीछे बहुत काम ..)। अन्य ढांचे "सिर्फ" हल्के आरईएस या जेपीए या अलग-अलग केंद्रित फ्रेमवर्क हैं। मैं संभवतः सर्वोत्तम-इन-क्लास खुले स्रोत पूर्ण माइक्रोसॉफ़्ट प्लेटफॉर्म उपलब्ध करने की सलाह देता हूं जो शुद्ध जावा जड़ों पर वापस आ रहा है: https : // github -nizonnt

यदि आप प्रदर्शन के बारे में आश्चर्य करते हैं, तो आप अपने आप को मौजूदा बेंचमार्क सूट के साथ तुलना कर सकते हैं। https://github.com/networknt/microservices-framework-benchmark

  1. काफ्का का उपयोग बिलकुल न करें :-)) यह आधा मजाक है। मेरा मतलब है, जबकि काफ्का महान है, यह एक और ब्रोकर केंद्रित प्रणाली है। मुझे लगता है कि भविष्य ब्रोकर-कम मैसेजिंग सिस्टम में है। आप आश्चर्यचकित हो सकते हैं, लेकिन कफका सिस्टम तेज हैं, तो निश्चित रूप से आपको निचले स्तर तक उतरना होगा। क्रॉनिकल को देखो।

  2. इवेंट स्टोर के लिए मैं TimescaleDB नामक बेहतर Postgresql एक्सटेंशन की सिफारिश करता हूं, जो बड़ी मात्रा में उच्च प्रदर्शन टाइमसीरीज डेटा प्रोसेसिंग (ईवेंट्स टाइमरीज) पर केंद्रित है। बेशक CQRS, इवेंट सोर्सिंग (रिप्ले, इत्यादि फीचर्स) को light4j फ्रेमवर्क में बॉक्स से बाहर बनाया गया है जो Postgres को कम स्टोरेज के रूप में उपयोग करता है।

  3. मैसेजिंग के लिए क्रॉनिकल क्यू, मैप, इंजन, नेटवर्क को देखने की कोशिश करें। मेरा मतलब है कि इस पुराने जमाने के ब्रोकर केंद्रित समाधानों से छुटकारा पाएं और माइक्रो मैसेजिंग सिस्टम (एक एम्बेडेड) के साथ जाएं। क्रॉनिकल क्यू वास्तव में काफ्का से भी तेज है। लेकिन मैं मानता हूं कि यह सब एक समाधान में नहीं है और आपको कुछ विकास करने की जरूरत है अन्यथा आप एंटरप्राइज संस्करण (एक भुगतान किया गया) खरीद कर ले जाएं। अंत में क्रॉनिकल से निर्माण करने का प्रयास आपकी खुद की मैसेजिंग परत काफका क्लस्टर को बनाए रखने के बोझ को हटाकर भुगतान किया जाएगा।


दिलचस्प दृश्य। कुछ बिंदुओं पर विस्तार से ध्यान रखें? > काफ्का केवल कम से कम एक बार डिलीवरी करता है और ईवेंट स्टोर में डुप्लिकेट होते हैं जिन्हें हटाया नहीं जा सकता। आपको लगता है कि वास्तव में एक बार डिलीवरी जैसी कोई चीज है। afaik (और मुझे उस पर पूरा यकीन है) एक वितरित प्रणाली में ऐसी कोई बात नहीं है। 2) आपकी बात के अनुसार 2: शास्त्रीय स्कूल ऑफ (इवेंट सोर्सिंग / डीडीडी) ने सोचा है कि घटनाएं स्वाभाविक रूप से अपरिवर्तनीय हैं। Ie: वे खुश हैं, अतीत को बदलने का कोई तरीका नहीं है। रेट्रोस्पेक्ट में उन्हें बदलने का वास्तविक उपयोग क्या है? धन्यवाद!
गर्ट-जान

1.) प्रत्येक संदेश सुनिश्चित करने के लिए हेज़ेलकास्ट एक बार और केवल एक बार संसाधित किया जाएगा। 2.) मुझे सर्विस कोड में _V2 जैसी कोई चीज पसंद नहीं है, इसलिए या तो आप अपने नए संस्करणों के संग्रह को फिर से संग्रहित करेंगे और पुरानी घटनाओं को फिर से बनाएंगे (आप अभी भी मूल सत्य हैं), या आप इस कार्यक्षमता को सीधे घटना में छिपा सकते हैं / बना सकते हैं स्नैपशॉट कार्यक्षमता को स्टोर करें, इसलिए ईवेंट स्टोर करने का एकल बिंदु है -> इवेंट स्टोर। आपके पास इसके क्या उपाय हैं?
केंसई

1) उपभोक्ता पर कम से कम-एक बार + बेरोजगारी। Ie: अगर पहले से ही देखा घटना की जाँच करें। यदि ऐसा है तो छोड़ दें। या बेहतर अभी तक, सुखद कार्रवाई है। बेशक, यह हमेशा संभव नहीं है। 2) मैं संस्करण की घटनाओं की जरूरत का सामना कभी नहीं किया है। मैं हमेशा घटनाओं को स्वयं को सत्य का स्रोत मानता हूं और उन सभी जानकारी को शामिल करता हूं जिनकी मुझे कभी आवश्यकता होगी। ऐसा करने से, मुझे कभी ऐसी स्थिति का सामना नहीं करना पड़ा जहां मुझे किसी घटना के बारे में एक अलग घटना-संरचना और / या डेटा की आवश्यकता थी। लेकिन शायद ymmv। सुनने में रुचि है कि किन स्थितियों में आपको वास्तव में अद्यतन घटनाओं की आवश्यकता होगी।
गर्ट-जान

1.) पसंद का तरीका हो सकता है .. 2.) तब आपकी डेटा संरचनाएं शुरू से ही परिपूर्ण थीं :-) भाग्यशाली आप, हाहा। मुझे अपनी वर्तमान परियोजना पर इसकी आवश्यकता नहीं हो सकती है, लेकिन मैं ईवेंट के कांटे पर एक संपूर्ण मंच का निर्माण कर रहा हूं। कुछ उच्च-प्रदर्शन वाले जेईई के साथ विलय केवल प्रकाश घटना 4 जे से लिया गया है ... यह पूरी चर्चा स्टैकेवरफ्लो पर टिप्पणियों के लिए नहीं है , लेकिन अगर आप गहरी गोताखोरी में रुचि रखते हैं, तो मैं इस लेख की सलाह देता हूं: leanpub.com/esversioning/read
kensai

1
काफ्का अब एक बार प्रसव का समर्थन करता है, वैसे। अपडेट बुलेट 1
OneCricketeer

8

हां, आप काफ्का को एक इवेंट स्टोर के रूप में उपयोग कर सकते हैं। यह काफी अच्छी तरह से काम करता है, विशेष रूप से काफ्का धाराओं की शुरूआत के साथ , जो आपकी घटनाओं को संचित स्थिति में संसाधित करने के लिए एक काफ्का-देशी तरीका प्रदान करता है जिसे आप क्वेरी कर सकते हैं

के बारे में:

इस तथ्य को फिर से दोहराने की क्षमता जो नए ग्राहकों को तथ्य के बाद सिस्टम के साथ पंजीकरण करने की क्षमता प्रदान करता है।

यह मुश्किल हो सकता है। मैंने इसे यहाँ विस्तार से कवर किया है: https://stackoverflow.com/a/48482974/741970


0

हां, काफ्का इवेंट सोर्सिंग मॉडल विशेष रूप से CQRS में अच्छी तरह से काम करता है, हालाँकि आपने विषयों के लिए TTLs सेट करते समय ध्यान रखा है और हमेशा ध्यान रखें कि Kafka इस मॉडल के लिए डिज़ाइन नहीं किया गया था, हालाँकि हम इसका उपयोग बहुत अच्छी तरह से कर सकते हैं।


0

मुझे लगता है कि आपको काफ्का के समर्थन के साथ अक्षतंतु ढांचे को देखना चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.