काफ्का: उपभोक्ता एपीआई बनाम स्ट्रीम एपीआई


102

मैंने हाल ही में काफ्का सीखना शुरू किया और इन सवालों का अंत किया।

  1. उपभोक्ता और धारा में क्या अंतर है? मेरे लिए, यदि कोई उपकरण / एप्लिकेशन काफ्का के संदेशों का उपभोग करता है, तो वह काफ्का दुनिया का एक उपभोक्ता है।

  2. कैसे स्ट्रीम अलग है क्योंकि यह काफ्का को संदेश देता या उत्पन्न करता है? और इसकी आवश्यकता क्यों है क्योंकि हम उपभोक्ता एपीआई का उपयोग करके अपने स्वयं के उपभोक्ता एप्लिकेशन को लिख सकते हैं और उन्हें आवश्यकतानुसार संसाधित कर सकते हैं या उन्हें उपभोक्ता एप्लिकेशन से स्पार्क भेज सकते हैं?

मैंने इस पर Google किया, लेकिन इसके लिए कोई अच्छा जवाब नहीं मिला। क्षमा करें यदि यह प्रश्न बहुत तुच्छ है।

जवाबों:


108

अद्यतन 09 अप्रैल, 2018 : आजकल आप काफ्का में अपने डेटा को संसाधित करने के लिए, काफ़्का के लिए इवेंट स्ट्रीमिंग डेटाबेस का उपयोग भी कर सकते हैं । ksqlDB काफ्का की स्ट्रीम एपीआई के ऊपर बनाया गया है, और यह "स्ट्रीम" और "टेबल" के लिए प्रथम श्रेणी के समर्थन के साथ आता है।

उपभोक्ता API और स्ट्रीम API में क्या अंतर है?

काफ्का की स्ट्रीम लाइब्रेरी ( https://kafka.apache.org/documentation/streams/ ) कफका निर्माता और उपभोक्ता ग्राहकों के ऊपर बनाई गई है। कफ़्का धाराएँ काफी अधिक शक्तिशाली हैं और सादे ग्राहकों की तुलना में अधिक अभिव्यंजक भी हैं।

यह सादा उपभोक्ता के मुकाबले कफ़्का धाराओं के साथ खत्म करने के लिए एक वास्तविक दुनिया के आवेदन को शुरू करने के लिए बहुत सरल और तेज है।

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

  • काफ़्का लेनदेन के माध्यम से ठीक एक बार प्रसंस्करण शब्दार्थ का समर्थन करता है ( ईओएस का अर्थ है )
  • समर्थन दोष सहिष्णु स्टेटफुल (और साथ ही राज्यविहीन, निश्चित रूप से) प्रसंस्करण सहित स्ट्रीमिंग मिलती है , एकत्रित , और विंडोइंग । दूसरे शब्दों में, यह आपके एप्लिकेशन के प्रोसेसिंग आउट-ऑफ-द-बॉक्स के प्रबंधन का समर्थन करता है।
  • घटना-समय प्रसंस्करण और प्रसंस्करण-समय और अंतर्ग्रहण-समय के आधार पर प्रसंस्करण का समर्थन करता है । यह निर्बाध रूप से डेटा को संसाधित भी करता है ।
  • स्ट्रीम और टेबल दोनों के लिए प्रथम श्रेणी का समर्थन है , जो कि जहां स्ट्रीम प्रोसेसिंग डेटाबेस से मिलता है; व्यवहार में, अधिकांश स्ट्रीम प्रसंस्करण अनुप्रयोगों को अपने संबंधित उपयोग के मामलों को लागू करने के लिए दोनों धाराओं और तालिकाओं की आवश्यकता होती है, इसलिए यदि स्ट्रीम प्रसंस्करण तकनीक में दोनों में से किसी एक का अभाव है (जैसे, तालिकाओं के लिए कोई समर्थन नहीं) आप या तो अटक गए हैं या मैन्युअल रूप से इस कार्यक्षमता को स्वयं लागू करना चाहिए (उसके साथ अच्छा भाग्य...)
  • अन्य अनुप्रयोगों और सेवाओं के लिए नवीनतम प्रसंस्करण परिणामों को उजागर करने के लिए इंटरैक्टिव क्वेरी (जिसे 'क्वेरी स्टेट' भी कहा जाता है) का समर्थन करता है
  • अधिक अर्थपूर्ण है: इसके साथ जहाजों (1) एक कार्यात्मक प्रोग्रामिंग शैली डीएसएल जैसे कार्यों के साथ map, filter, reduceके साथ-साथ (2) एक अनिवार्य शैली प्रोसेसर एपीआई जैसे जटिल घटना प्रसंस्करण (सीईपी) करने के लिए (3) आप भी जोड़ सकते हैं, और डीएसएल और प्रोसेसर एपीआई।
  • इकाई और एकीकरण परीक्षण के लिए अपनी स्वयं की परीक्षण किट है

देखें http://docs.confluent.io/current/streams/introduction.html के लिए एक अधिक विस्तृत, लेकिन अभी भी काफ्का स्ट्रीम एपीआई, जो भी मदद करनी चाहिए आप निचले स्तर काफ्का उपभोक्ता के लिए अंतर को समझने के लिए करने के लिए उच्च स्तरीय परिचय ग्राहक।

काफ्का धाराओं से परे, आप काफ्का में अपने डेटा को संसाधित करने के लिए इवेंट स्ट्रीमिंग डेटाबेस ksqlDB का उपयोग कर सकते हैं । ksqlDB काफ्का धाराओं के ऊपर बनाया गया है। यह अनिवार्य रूप से कफ़्का धाराओं के समान सुविधाओं का समर्थन करता है, लेकिन आप जावा या स्काला के बजाय स्ट्रीमिंग एसक्यूएल लिखते हैं। प्रोग्रामेटिक रूप से, आप CLI या REST API के माध्यम से ksqlDB के साथ बातचीत कर सकते हैं; यदि आप REST का उपयोग नहीं करना चाहते हैं, तो इसमें एक मूल जावा क्लाइंट भी है।

तो काफ्का स्ट्रीम एपीआई कैसे अलग है क्योंकि यह काफ्का के संदेशों का उपभोग या उत्पादन भी करता है?

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

और इसकी आवश्यकता क्यों है क्योंकि हम उपभोक्ता एपीआई का उपयोग करके अपने स्वयं के उपभोक्ता एप्लिकेशन को लिख सकते हैं और उन्हें आवश्यकतानुसार संसाधित कर सकते हैं या उन्हें उपभोक्ता एप्लिकेशन से स्पार्क भेज सकते हैं?

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


8
किस मामले में काफ्का स्ट्रीम एपीआई पर काफ्का कंज्यूमर एपीआई का उपयोग किया जाएगा?
bhh1988

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

1
मुझे लगता है कि मुख्य चीज जो उन्हें अलग करती है वह स्टोर तक पहुंचने की क्षमता है। एक बार जब आप एक स्ट्रीम के भीतर स्टोर का उपयोग करने की ताकत को समझते हैं, तो आप काफ्का धाराओं की शक्ति को समझेंगे।
योनतन कीरोन

25

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

"काफ्का धाराएँ काफ्का निर्माता और उपभोक्ता पुस्तकालयों के निर्माण और डेटा समानता, वितरित समन्वय, गलती सहिष्णुता और परिचालन सादगी की पेशकश करने के लिए काफ्का की मूल क्षमताओं का लाभ उठाते हुए अनुप्रयोग विकास को सरल बनाती हैं।"

नीचे काफ्का स्ट्रीम पर प्रमुख वास्तुशिल्प विशेषताएं हैं। कृपया यहाँ देखें

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

नीचे मेरी समझ के आधार पर महत्वपूर्ण अंतर हैं जो मुझे अपडेट करने के लिए खुले हैं यदि किसी भी बिंदु को गायब या भ्रामक है

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें

उपभोक्ता - निर्माता का उपयोग कहाँ करें:

  1. यदि एकल उपभोक्ता हैं, तो संदेश प्रक्रिया का उपभोग करें, लेकिन अन्य विषयों के लिए नहीं।
  2. बिंदु 1 के रूप में अगर सिर्फ प्रोड्यूसर प्रोड्यूसिंग संदेश है तो हमें कफका स्ट्रीम की आवश्यकता नहीं है
  3. यदि उपभोक्ता एक काफ्का क्लस्टर से संदेश भेजता है, लेकिन विभिन्न काफ्का क्लस्टर विषयों के लिए प्रकाशित करता है। उस स्थिति में, भले ही आप काफ्का स्ट्रीम का उपयोग कर सकते हैं, लेकिन आपको अलग-अलग समूहों में संदेश प्रकाशित करने के लिए एक अलग निर्माता का उपयोग करना होगा। या बस काफ्का उपभोक्ता - निर्माता तंत्र का उपयोग करें।
  4. बैच प्रसंस्करण - यदि एक संदेश को इकट्ठा करने की आवश्यकता होती है या एक सामान्य पारंपरिक तरीके का उपयोग करने के लिए अपने बैच को संसाधित करना होता है।

काफ्का स्ट्रीम का उपयोग कहां करें:

  1. यदि आप एक विषय के संदेशों का उपभोग करते हैं, तो अन्य विषयों के लिए काफ़्का स्ट्रीम को बदलना और प्रकाशित करना सबसे उपयुक्त है।
  2. रीयलटाइम प्रसंस्करण, रीयलटाइम विश्लेषणात्मक, और मशीन सीखने।
  3. राज्य परिवर्तन जैसे एकत्रीकरण, खिड़की से जुड़ना आदि।
  4. पोर्टवर्क्स आदि जैसे स्थानीय स्टेट स्टोर्स या माउंटेड स्टेट स्टोर्स का उपयोग करने की योजना।
  5. बिल्कुल एक प्रसंस्करण अर्थ और ऑटो परिभाषित दोष सहिष्णुता प्राप्त करें।

1
बहुत बढ़िया, वास्तव में मददगार, लेकिन एक बड़ी गलती है, बिल्कुल एक बार उपभोक्ता और धाराओं दोनों में उपलब्ध सिमेंटिक, इसके अलावा ईओएस बस निचले स्तर पर उपभोक्ता / निर्माता के लिए सेटिंग्स का एक गुच्छा है, जैसे कि यह सेटिंग विशिष्ट मूल्यों के साथ संयोजन में समूह EOS व्यवहार की गारंटी। वर्तमान में मैं बिना मुद्दों के उपभोक्ता एपीआई के साथ ईओएस का उपयोग कर रहा हूं।
uptoyou

हाँ ठीक है, हम कफ़्का स्ट्रीम में एक बार सिमेंटिक को परिभाषित कर सकते हैं, लेकिन सरल निर्माता और उपभोक्ता के लिए संपत्ति सेट करके हमें एक इकाई लेनदेन के रूप में समर्थन करने के लिए
निष्क्रिय

सुझाव के अनुसार शब्दों में बदलाव किया गया
सूर्य 7०० on

@ sun007, जो सरल अनुप्रयोगों के लिए तेज़ है, जिसे रीयल-टाइम क्षमताओं की आवश्यकता नहीं है? और भी, क्या काफ़्का देशी कार्यक्षमता के शीर्ष पर किसी भी अन्य उच्च स्तरीय टूल की तरह स्ट्रीमिंग "अतिरिक्त" रूपांतरण उपरि का उपयोग करता है?
नाग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.