मैं Google Pub / उप बनाम काफ्का का मूल्यांकन कर रहा हूं? [बन्द है]


82

मैंने काफ्का पर ज्यादा काम नहीं किया है, लेकिन जीसीई में डेटा पाइपलाइन का निर्माण करना चाहते हैं। इसलिए हम काफ्का बनाम पब / सब जानना चाहते थे। मूल रूप से मैं जानना चाहता हूं कि काफ्का और पब / उप दोनों में संदेश की स्थिरता, संदेश की उपलब्धता, संदेश की विश्वसनीयता कैसी है

धन्यवाद


6
ठीक उसी तरह से नहीं जिसे आप ढूंढ रहे हैं, लेकिन शायद आपके लिए एक दिलचस्प
रीडिंग

जवाबों:


92

Google Pub / Sub के अलावा Google और Kafka को खुला स्रोत द्वारा प्रबंधित किया जा रहा है, दूसरा अंतर यह है कि Google Pub / Sub एक संदेश कतार (जैसे Rabbit MQ) है जहाँ Kafka स्ट्रीमिंग लॉग के रूप में अधिक है। आप पब्सब के साथ संदेशों को "री-रीड" या "रीप्ले" नहीं कर सकते। (EDIT - २०१ ९ फरवरी तक, आप संदेशों को पुनः देख सकते हैं और एक निश्चित टाइमस्टैम्प के अनुसार समय में पीछे की ओर देख सकते हैं, प्रति टिप्पणी नीचे दी गई है)

Google Pub / Sub के साथ, एक बार एक सदस्यता और ACKed से एक संदेश पढ़ा जाता है, तो यह चला गया है। विभिन्न पाठकों द्वारा पढ़े जाने वाले संदेश की अधिक प्रतियां प्राप्त करने के लिए, आप उस विषय के लिए "सदस्यता" बनाकर विषय को "फ़ैन-आउट" करते हैं, जहाँ प्रत्येक सदस्यता के पास विषय में जाने वाली हर चीज़ की पूरी प्रति होगी। लेकिन इससे लागत भी बढ़ जाती है क्योंकि Google द्वारा पढ़े गए डेटा की मात्रा से पब / उप उपयोग का शुल्क लिया जाता है।

काफ्का के साथ, आप एक अवधारण अवधि निर्धारित करते हैं (मुझे लगता है कि यह डिफ़ॉल्ट रूप से 7 दिन है) और संदेश कफका में रहते हैं चाहे कितने उपभोक्ता इसे पढ़ते हों। आप एक नया उपभोक्ता (उर्फ सब्सक्राइबर) जोड़ सकते हैं, और किसी भी समय विषय के सामने से इसका उपभोग करना शुरू कर सकते हैं। आप अवधारण अवधि को अनंत होने के लिए भी सेट कर सकते हैं, और फिर आप मूल रूप से काफ्का को एक अपरिवर्तनीय डेटास्टोर के रूप में उपयोग कर सकते हैं, जैसा कि यहां वर्णित है: http://stackoverflow.com/a/22597637/304262

Amazon AWS Kinesis, Kafka का एक प्रबंधित संस्करण है जबकि मैं Google Pubsub को Rabbit MQ के प्रबंधित संस्करण के रूप में मानता हूं। SQS के साथ Amazon SNS भी Google Pubsub के समान है (SNS प्रशंसक प्रदान करता है और SQS कतार प्रदान करता है)।


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

4
PubSub जैसी संदेश कतार प्रणाली के साथ "रीप्ले" को पूरा करने का तरीका विषय से अधिक सदस्यता (यानी संदेशों की अधिक प्रतियां बनाना) के प्रशंसक-आउट करने से है, और प्रत्येक उपभोक्ता अपनी स्वयं की सदस्यता का अपनी गति से उपभोग करता है। मुझे लगता है कि आपके पास एक सदस्यता हो सकती है जो आपको आवश्यकता होने पर फिर से खेलना के लिए होती है। काफ़्का के साथ एक ही काम करने के लिए, आप एक नया उपभोक्ता बनाएंगे और सामने से उपभोग करना शुरू कर देंगे (क्योंकि काफ़्का संदेशों की एक प्रति नहीं बनाता है, यह सिर्फ प्रत्येक उपभोक्ता को अपना "पॉइंटर" ऑफसेट देता है जो कि क्या था पहले से ही पढ़ा हुआ)
बंदूक

2
काइनिस को एक प्रबंधित सेवा के रूप में माना जा सकता है जो कि काफ्का के समान है, लेकिन यह कहना गलत है कि यह "काफ्का का प्रबंधित संस्करण" है। एक वास्तविक "काफ्का प्रबंधित" के लिए, कंफ्लुएंट क्लाउड कन्फ्लुएंट को देखें ।io/ confluent
cloud

6
क्लाउड पब / सब ने हाल ही में पहले से स्वीकार किए गए संदेशों को फिर से जोड़ने के लिए समर्थन जोड़ा। शुरुआत वाली मार्गदर्शिका और ब्लॉग पोस्ट कैसे सुविधा का उपयोग करने की व्याख्या।
कमल अबुल-होसन

1
@EmmettButler सही है; Kinesis का अपना उत्पाद है। यहां तक ​​कि अगर यह काफ्का द्वारा संचालित किया गया था, तो यह पूरी तरह से अलग एपीआई पेश करता है। अमेज़ॅन AWS MSK के साथ प्रबंधित काफ्का की पेशकश करता है ।
user0000001

14

मैं ऊपर दिए गए उत्तर पढ़ रहा हूं और मैं उन्हें पूरक करना चाहूंगा, क्योंकि मुझे लगता है कि कुछ विवरण लंबित हैं:

पूरी तरह से प्रबंधित प्रणाली दोनों सिस्टम क्लाउड में पूरी तरह से प्रबंधित संस्करण हो सकते हैं। Google Pubsub प्रदान करता है और वहाँ कुछ पूरी तरह से प्रबंधित Kafka संस्करण हैं जिन्हें आप कॉन्फ़िगर कर सकते हैं क्लाउड पर और ऑन-

क्लाउड बनाम ऑन-प्रिम मुझे लगता है कि यह उनके बीच एक वास्तविक अंतर है, क्योंकि पब्सब को केवल जीसीपी पारिस्थितिकी तंत्र के हिस्से के रूप में पेश किया जाता है, जबकि अपाचे काफ्का आप क्लाउड सेवा और ऑन-प्रीमियर सेवा दोनों के रूप में उपयोग कर सकते हैं (स्वयं के लिए क्लस्टर कॉन्फ़िगरेशन कर सकते हैं)

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

अवधारण नीति कफका और पब्सब दोनों के पास अधिकतम अवधारण समय को कॉन्फ़िगर करने के लिए विकल्प हैं, डिफ़ॉल्ट रूप से, मुझे लगता है कि 7 दिन है।

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

मुझे लगता है कि आपके प्रश्न का कोई सही उत्तर नहीं है, यह वास्तव में इस बात पर निर्भर करता है कि आपको क्या आवश्यकता होगी और आपके पास जो बाधाएँ हैं (नीचे एस्केनॉज के कुछ उदाहरण हैं):

  • यदि समाधान GCP में होना चाहिए, तो स्पष्ट रूप से Google क्लाउड Pubsub का उपयोग करें। आप सभी सेटिंग्स प्रयासों से बचेंगे या काफ्का की आवश्यकता वाले पूरी तरह से स्वचालित प्रणाली के लिए अतिरिक्त भुगतान करेंगे।

  • यदि समाधान को स्ट्रीमिंग तरीके से प्रक्रिया डेटा की आवश्यकता होनी चाहिए, लेकिन बैच प्रसंस्करण (अंततः) का समर्थन करने की आवश्यकता है, तो क्लाउड डेटाफ़्लो + पब्सब का उपयोग करना एक अच्छा विचार है।

  • यदि समाधान में कुछ स्पार्क प्रसंस्करण का उपयोग करने की आवश्यकता होती है, तो आप स्पार्क स्ट्रीमिंग का पता लगा सकते हैं (जिसे आप स्ट्रीम प्रोसेसिंग के लिए काफ्का कॉन्फ़िगर कर सकते हैं)

सामान्य तौर पर, दोनों बहुत ही ठोस स्ट्रीम प्रोसेसिंग सिस्टम हैं। जो बिंदु बहुत बड़ा है, वह यह है कि Pubsub GCP से जुड़ी क्लाउड सेवा है, जबकि Apache Kafka को Cloud और On-prem दोनों में इस्तेमाल किया जा सकता है।


2
मुझे लगता है कि यह भ्रामक हो सकता है; जब तक आप काफ्का तार प्रोटोकॉल पर अपनी खुद की लाइब्रेरी लिखना नहीं चाहते हैं, मौजूदा ग्राहक पहले से ही ऑफ़सेट्स से निपटने के लिए कॉन्फ़िगर करने योग्य तंत्र प्रदान करते हैं। ज़ूकीपर में भी कॉम्पटेड ऑफ़सेट नहीं रखे जाते हैं, लेकिन एक विशेष विषय "__consumer_offsets" में, जो दलालों के बीच दोहराया जाता है। यह एक अच्छा पढ़ा गया है: confluent.io/blog/…
Zoltan

: वास्तव में मैं वास्तव में मैन्युअल रूप से ऑफसेट भंडारण के बारे में अपने बयान समझ में नहीं आता With Kafka you will need to manage the offsets of the messages by yourself, using an external storage, such as, Apache Zookeeper => Downvoting
किराए

12

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


7
यह वास्तव में अंतर नहीं है क्योंकि कई विक्रेता हैं जो काफ्का को पूरी तरह से प्रबंधित सेवा के रूप में भी पेश करते हैं। यह अंतर शायद यह है कि Google PubSub केवल Googles Cloud में सेवा के रूप में उपलब्ध है, इसलिए इसका कोई मुख्य संस्करण नहीं है और न ही AWS या Azure जैसे अन्य क्लाउड प्रदाताओं में कोई प्रबंधित सेवा चल रही है।
हंस जेस्पर्सन

2
"Google PubSub केवल Googles Cloud में एक सेवा के रूप में उपलब्ध है" जो कि गलत है ... आपका एप्लिकेशन Google App Engine में तैनात होने के लिए बाध्य नहीं है..आप किसी भी क्लाइंट से GooglePub / Sub में कनेक्ट और प्रकाशित कर सकते हैं जब तक कि आप सुरक्षित रूप से 'सेवा खाते' के माध्यम से इसे कनेक्ट करें।
जेरिल कुक

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