क्या काफ्का के ऊपर RabbitMQ का उपयोग करने का कोई कारण है?


331

मुझे काफ्का के बजाय RabbitMQ का मूल्यांकन करने के लिए कहा गया है, लेकिन एक कारण खोजने में मुश्किल हुई कि यह काफ्का की तुलना में कुछ बेहतर कर रहा है। क्या किसी को पता है कि क्या यह वास्तव में थ्रूपुट, स्थायित्व, विलंबता, या आसानी से उपयोग में बेहतर है?


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

2
@ गिलियूम यह सच नहीं है। काफ्का के लिए उपलब्ध कई भाषाओं के ग्राहक हैं: cwiki.apache.org/confluence/display/KAFKA/Clients इसके अलावा, कंफ्लुएंट अन्य भाषाओं में कई उच्च प्रदर्शन करने वाले खुले स्रोत काफ्का क्लाइंट प्रदान करता है। "कंफ्लुएंट ओपन सोर्स" ऑफर देखें: confluent.io/product/compare
Matthias J. Sax

3
@ MatthiasJ.Sax दोनों RabbitMQ और kafka के पास कई भाषाओं में ग्राहकों की संपत्ति है, लेकिन मेरी बात आधिकारिक ग्राहकों के बारे में थी। आपके द्वारा दिए गए लिंक में इसे सफेद पर काला लिखा गया है: हम सभी को बनाए रखते हैं, लेकिन जेवीएम क्लाइंट बाहरी से मुख्य कोड बेस तक । संगम के बारे में, मैं वास्तव में एक बड़ा उपयोगकर्ता हूं, लेकिन अतिरिक्त ग्राहक भाषा अज्ञेय बाकी एपीआई के माध्यम से हैं, जो कि काफी भयानक है, आधिकारिक जावा क्लाइंट के समान थ्रूपुट नहीं है।
गिलाउम

2
@Guillaume मैं सहमत समुदाय से "यादृच्छिक" ओपन सोर्स क्लाइंट के लिए; सभी उच्च प्रदर्शन नहीं (एक अच्छा ग्राहक लिखना बहुत कठिन है) - यही कारण है कि मैंने "यह जरूरी नहीं कि सच है।" ;) हालांकि, कंफ़्लुएंट के सी / सी ++ और पायथन क्लाइंट उच्च थ्रूपुट और एके जावा क्लाइंट के रूप में कुशल हैं ...
मथायस जे। सैक्स

मैं इस ब्लॉग को पढ़ने की सलाह दूंगा
roottraveller

जवाबों:


467

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

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

काफ्का को एक टिकाऊ संदेश ब्रोकर के रूप में देखा जा सकता है जहां एप्लिकेशन डिस्क पर स्ट्रीम डेटा को प्रोसेस और री-प्रोसेस कर सकते हैं। काफ्का के पास बहुत ही सरल मार्ग है। अगर आपको अपने संदेशों को जटिल तरीके से अपने उपभोक्ताओं तक पहुँचाने की आवश्यकता है तो RabbitMQ के पास बेहतर विकल्प हैं। काफ्का का उपयोग करें यदि आपको बैच उपभोक्ताओं का समर्थन करने की आवश्यकता है जो ऑफ़लाइन हो सकते हैं या ऐसे उपभोक्ता जो कम विलंबता पर संदेश चाहते हैं। 

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

जब वे खाली होते हैं तो RabbitMQ की कतारें सबसे तेज़ होती हैं, जबकि काफ्का बहुत कम ओवरहेड के साथ बड़ी मात्रा में डेटा बरकरार रखता है - काफ्का को बड़ी मात्रा में संदेशों को रखने और वितरित करने के लिए डिज़ाइन किया गया है। (यदि आप RabbitMQ में बहुत लंबी कतारों की योजना बनाते हैं तो आप आलसी कतारों पर एक नज़र डाल सकते हैं ।)

काफ्का जमीन से क्षैतिज स्केलिंग (अधिक मशीनों को जोड़कर स्केल) को ध्यान में रखकर बनाया गया है, जबकि रैबिटएमक्यू ज्यादातर वर्टिकल स्केलिंग (अधिक शक्ति जोड़कर स्केल) के लिए डिज़ाइन किया गया है।

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

अधिक पढ़ने और कुछ तुलनात्मक डेटा यहां देखे जा सकते हैं: https://www.cloudamqp.com/blog/2019-12-12-when-to-use-rabbitmq-or-apache-kafka.html

उद्योग पत्र की भी सिफारिश: "काफ्का बनाम रैबिटएमक्यू: दो उद्योग संदर्भ प्रकाशन / सदस्यता कार्यान्वयन का तुलनात्मक अध्ययन": http://dl.acm.org/citation.cfm?id=3093908

मैं Apache Kafka और RabbitMQ दोनों को एक सेवा प्रदान करने वाली कंपनी में काम करता हूं।


31
"उच्च-अंतर्ग्रहण" का क्या अर्थ है?
मार्टिन थोमा

23
high-
ingress

6
मैं आपकी बात पर RabbitMQ के बारे में सवाल करता हूं "ज्यादातर वर्टिकल स्केलिंग के लिए बनाया गया है"। ऐसा कैसे ...
रयान.बार्ट्स

17
क्षैतिज स्केलिंग (अधिक मशीनों को जोड़कर स्केल) आपको RabbitMQ में बेहतर प्रदर्शन नहीं देता है। जब आप वर्टिकल स्केलिंग (अधिक शक्ति जोड़कर स्केल) करते हैं तो सर्वश्रेष्ठ प्रदर्शन प्राप्त होता है। मुझे यह पता है क्योंकि मैं कई सालों से हजारों खरगोशों के समूहों के साथ काम कर रहा हूं। आप खरगोश में क्षैतिज स्केलिंग कर सकते हैं, लेकिन इसका मतलब है कि आप अपने नोड्स के बीच क्लस्टरिंग भी सेट करते हैं, जो आपके सेटअप को धीमा कर देगा। मैंने RabbitMQ में उच्च प्रदर्शन बनाम उच्च उपलब्धता के लिए सर्वश्रेष्ठ अभ्यास के बारे में एक गाइड लिखा था: clouddamqp.com/blog/2017-12-29-part1-rabbitmq-best-ults.html
Lovisa Johansson

4
"... जबकि काफ्का नहीं है, यह उपभोक्ता को लगता है कि क्या उपभोग किया गया है और नहीं का ट्रैक रखता है।" यह गलत है। काफ्का प्रत्येक व्यक्तिगत उपभोक्ता द्वारा उपभोग किए गए संदेशों पर नज़र रखता है।
जुकरडी

36

यह प्रश्न मैं हर हफ्ते सुनता हूं ... जबकि RabbitMQ (जैसे IBM MQ या JMS या अन्य मैसेजिंग सॉल्यूशन सामान्य रूप से) का उपयोग पारंपरिक मैसेजिंग के लिए किया जाता है, अपाचे काफ्का को स्ट्रीमिंग प्लेटफॉर्म (मैसेजिंग + डिस्ट्रिब्यूटेड स्टोरेज + डेटा की प्रोसेसिंग) के रूप में उपयोग किया जाता है। दोनों अलग-अलग उपयोग के मामलों के लिए बनाए गए हैं।

आप "पारंपरिक मैसेजिंग" के लिए काफ्का का उपयोग कर सकते हैं, लेकिन काफ्का-विशिष्ट परिदृश्यों के लिए MQ का उपयोग नहीं करते हैं।

लेख " अपाचे काफ्का बनाम एंटरप्राइज सर्विस बस (ईएसबी) -फ्रीड्स, दुश्मन, या फारेनस? ( https: //www.confluent। (RabbitMQ सहित) और दोनों को कैसे एकीकृत किया जाए।


30

कफका और रैबिटएमक्यू के बीच 5 प्रमुख अंतर , जो ग्राहक उनका उपयोग कर रहे हैं: यहां छवि विवरण दर्ज करें

किस मैसेजिंग सिस्टम को चुनना चाहिए या हमें अपने मौजूदा मैसेजिंग सिस्टम को बदलना चाहिए?

उपरोक्त प्रश्न का कोई एक उत्तर नहीं है। समीक्षा आप जो संदेश प्रणाली तय करने के लिए है या आप मौजूदा प्रणाली में परिवर्तन करना चाहिए जब करने के लिए एक संभावित दृष्टिकोण "करने के लिए है गुंजाइश और लागत का मूल्यांकन "


5
इस जानकारी के लिए आपका स्रोत कहां है? मैं RabbitMQ में प्रदर्शन के संबंध में आपके उत्तर से सहमत नहीं हूँ - जो कतारों, कनेक्शनों आदि की संख्या पर निर्भर करता है
Lovisa Johansson

सही बात। लेकिन औसत विचरण रेंज जैसा कि ऊपर कहा गया है। ऐसे परिदृश्य हैं जहां यह उपर्युक्त सीमा से बेहतर या बदतर है। Rabbitmq ब्लॉग देखें। नवीनतम डेटा बिंदुओं में परिवर्तन हो सकता है rabbitmq.com/blog/2012/04/25/…
शिशिर

@ शिशिर - क्या आप अधिक संदेश / लिंक साझा कर सकते हैं जो विभिन्न संदेश विनिमय प्रकारों को समझाते हैं - प्रत्यक्ष, प्रशंसक बाहर, पब / उप आदि? ये ध्वनि दी गई आवश्यकताओं के लिए सही संदेश मंच का निर्धारण करने में सहायक होती हैं। धन्यवाद
एंडी डफ्रेस्ने

@ शिशिर 2012 से एक लिंक, शायद बदल गया है, हाँ।
लोविसा जोहानसन

@AndyDufresne, थोड़ा देर से, लेकिन यहाँ एक लिंक है: clouddamqp.com/blog/…
Lovisa Johansson

28

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


3
आप RabbitMQ
Nikolas

16

RabbitMQ एक पारंपरिक सामान्य प्रयोजन संदेश दलाल है। यह वेब सर्वरों को तेज़ी से अनुरोधों का जवाब देने और कई सेवाओं को संदेश देने में सक्षम बनाता है। प्रकाशक संदेश प्रकाशित करने और उन्हें कतारों को उपलब्ध कराने में सक्षम हैं, ताकि उपभोक्ता उन्हें पुनः प्राप्त कर सकें। संचार या तो अतुल्यकालिक या तुल्यकालिक हो सकता है।


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

यह क्षैतिज रूप से स्केलेबल, दोष-सहिष्णु, दुष्ट तेजी से, और हजारों कंपनियों में उत्पादन में चलता है।

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

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

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

साथ ही, काफ्का क्लस्टर्स के प्रबंधन के लिए बहुत सारे ओपन-सोर्स और एंटरप्राइज-लेवल यूजर इंटरफेस अब उपलब्ध हैं। अधिक जानकारी के लिए मेरे लेख देखें अपाचे कफ़्का समूहों और अपाचे कफ़्का के लिए UI निगरानी उपकरणों का अवलोकन क्यों?


RabbitMQ या काफ्का के लिए जाने का निर्णय आपकी परियोजना की आवश्यकताओं पर निर्भर है। सामान्य तौर पर, यदि आप एक साधारण / पारंपरिक पब-उप संदेश दलाल चाहते हैं तो RabbitMQ के लिए जाएं। यदि आप एक घटना-संचालित वास्तुकला का निर्माण करना चाहते हैं, जिसके शीर्ष पर आपका संगठन वास्तविक समय में घटनाओं पर काम कर रहा हो, तो अपाचे काफ्का के लिए जाएं क्योंकि यह इस वास्तुकला प्रकार (उदाहरण के लिए काफ्का स्ट्रीम या ksqbDB) के लिए अधिक कार्यक्षमता प्रदान करता है।


15

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

इसे सरल बनाने के लिए, जब आप काफ्का के ऊपर RabbitMQ (या किसी भी कतार तकनीकी) को प्राथमिकता देना चाहते हैं, तो सबसे स्पष्ट उपयोग का मामला निम्नलिखित है:

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

सबसे अधिक आप उन लोगों के रूप में कर सकते हैं और कफका को एक कतार के रूप में बदलने की कोशिश कर रहे हैं: https://github.com/software/mlq

यानिक


10

जब RabbitMQ का उपयोग करें:

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

शॉर्ट में: डेटा के कम ट्रैफ़िक के साथ, प्राथमिकता कतार और लचीले रूटिंग विकल्पों के लाभ के साथ, रैबिटएमक्यू सरल उपयोग के मामलों के लिए अच्छा है। बड़े पैमाने पर डेटा और उच्च थ्रूपुट के लिए काफ्का का उपयोग करें।


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

9

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

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

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


4

एकमात्र लाभ जो मैं सोच सकता हूं वह है ट्रांजैक्शनल फीचर, बाकी सभी काफ्का का उपयोग करके किया जा सकता है


2
काफ्का में लेन
OneCricketeer

2

वितरित गलती सहिष्णु तरीके से दोनों को स्केल करना मुश्किल है, लेकिन मैं एक मामला बनाऊंगा कि यह RabbitMQ के साथ बड़े पैमाने पर बहुत कठिन है। शॉवेल, फेडरेशन, मिरर क्यूज, एसीके, मेम इश्यू, फाल्ट टोलरेंस आदि को समझना तुच्छ नहीं है। यह कहने के लिए नहीं कि आपके पास काफ्का पर ज़ुकाइपर आदि के साथ विशिष्ट मुद्दे भी नहीं होंगे, लेकिन प्रबंधन करने के लिए कम चलती हिस्से हैं। उस ने कहा, आपको आरएमक्यू के साथ एक पॉलीग्लॉट एक्सचेंज मिलता है जिसे आप काफ्का के साथ नहीं देते हैं। यदि आप स्ट्रीमिंग चाहते हैं, तो काफ्का का उपयोग करें। यदि आप सरल IoT या समान उच्च मात्रा पैकेट वितरण चाहते हैं, तो काफ्का का उपयोग करें। यह स्मार्ट उपभोक्ताओं के बारे में है। यदि आप उच्च लागत और संभवतः कुछ जटिलता के साथ msg लचीलापन और उच्च विश्वसनीयता चाहते हैं, तो RMQ का उपयोग करें।


मैं इस बात से सहमत नहीं हूं कि आपने आरएमक्यू को "कुछ जटिलता" के रूप में बताया है जैसे कि काफ्का की जटिलता कम है।
कोरी रॉबिन्सन

1

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


[+1] अच्छी व्याख्या, मुझे यकीन है कि आप अपनी परियोजनाओं में इनका उपयोग कर रहे हैं, क्या आप कुछ ऐसे नाम रख सकते हैं, जिन्होंने इन दोनों में से किसी एक का उपयोग संदेश प्रणाली को बढ़ाने में किया है?
जिंजरहेड

@GingerHead हमने एक रेडियो कंपनी के साथ काम किया जिसने अपने GUI और सेटअप में आसानी के लिए RabbitMQ का उपयोग किया। यह डेवलपर्स के लिए बहुत अच्छा था कि वे आसानी से अपने माइक्रोसर्विसेज की स्थिति की जांच कर सकें। उसी कंपनी ने डेटा की उच्च-मात्रा धाराओं के लिए काफ्का का भी इस्तेमाल किया, जिसके लिए तीन दिनों से अधिक समय के प्रतिधारण की आवश्यकता थी। यदि आप दो तकनीकों के बीच के अंतर के बारे में अधिक पढ़ने में रुचि रखते हैं, तो एक लेख मैंने इस विषय पर लिखा है: काफ्का बनाम RabbitQQ लेख
मारिया हैटफील्ड

0

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

https://docs.confluent.io/current/ksql/docs/index.html

Rabbitmq उन प्रणालियों के बजाय etl सिस्टम के लिए एक लोकप्रिय विकल्प नहीं है जहाँ इसे कम थ्रूपुट के साथ सरल मैसेजिंग सिस्टम की आवश्यकता होती है।


0

मुझे एहसास है कि यह एक पुराना सवाल है, लेकिन एक परिदृश्य जहां रैबिटएमक्यू एक बेहतर विकल्प हो सकता है, जब डेटा रिडक्शन से निपटना है।

RabbitMQ के साथ, डिफ़ॉल्ट रूप से एक बार संदेश का उपभोग करने के बाद, इसे हटा दिया जाता है। कफ़्का के साथ, डिफ़ॉल्ट रूप से, संदेश एक सप्ताह के लिए रखे जाते हैं। इसे लंबे समय तक सेट करना सामान्य है, या यहां तक ​​कि उन्हें कभी भी हटाने के लिए नहीं।

जबकि CCPA या GDPR अनुपालन एक चिंता का विषय है, अगर दोनों उत्पादों को बनाए रखने (या नहीं बनाए रखने) के लिए कॉन्फ़िगर किया जा सकता है, तो मैं RabbitMQ के साथ जाऊंगा।


0

कफका थ्रूपुट, स्थायित्व, विलंबता के संदर्भ में RabbitMQ से बेहतर है। यदि आप 10k / sec लेनदेन से कम की उम्मीद कर रहे हैं तो आप RabbitMQ के लिए जा सकते हैं, लेकिन यह भी आपके कार्यान्वयन पर निर्भर करता है।

मैंने अपने उत्पाद में काफ्का लागू किया है जहां हम 70k / sec लेनदेन से अधिक संभाल रहे थे और विलंबता औसतन 15ms थी जिसमें कुछ स्पाइक्स 40ms तक पहुंच गए थे। टॉपिक का आकार 100kb था।

KAFKA और RabbitMQ पर PFB के अधिक डेटा पॉइंट: Apache Kafka में स्वयं ब्रोकर शामिल हैं, जो वास्तव में सबसे प्रसिद्ध और इसका सबसे लोकप्रिय हिस्सा है, और इसे स्ट्रीम प्रोसेसिंग परिदृश्यों के लिए डिज़ाइन और प्रमुखता से विपणन किया गया है। इसके अलावा, अपाचे काफ्का ने हाल ही में काफ्का स्ट्रीम को जोड़ा है जो खुद को स्ट्रीमिंग प्लेटफॉर्म जैसे कि अपाचे स्पार्क, अपाचे फ्लिंक, अपाचे बीम / गूगल क्लाउड डेटा फ़्लो और स्प्रिंग क्लाउड डेटा फ़्लो के विकल्प के रूप में रखता है। प्रलेखन वेबसाइट गतिविधि ट्रैकिंग, मेट्रिक्स, लॉग एग्रीगेशन, स्ट्रीम प्रोसेसिंग, इवेंट सोर्सिंग और कमिट लॉग जैसे लोकप्रिय उपयोग के मामलों पर चर्चा करने का एक अच्छा काम करता है। उन उपयोग मामलों में से एक यह वर्णन करने वाला संदेश है, जो कुछ भ्रम पैदा कर सकता है। तो चलिए थोडा अनपैक करते हैं और कुछ स्पष्टता प्राप्त करते हैं, जिस पर मैसेजिंग परिदृश्य कफका के लिए सबसे अच्छे हैं, जैसे:

अधिकतम रूटिंग (100k / sec +) के साथ जटिल राउटिंग के बिना ए से बी तक स्ट्रीम, कम से कम एक बार विभाजन क्रम में वितरित किया जाता है। जब आपके आवेदन को स्ट्रीम इतिहास की पहुंच की आवश्यकता होती है, तो कम से कम एक बार विभाजन क्रम में वितरित किया जाता है। काफ्का एक टिकाऊ संदेश भंडार है और ग्राहक मांग पर इवेंट स्ट्रीम का "रीप्ले" प्राप्त कर सकते हैं, क्योंकि अधिक पारंपरिक संदेश दलालों का विरोध किया जाता है जहां एक बार संदेश पहुंचाने के बाद, इसे कतार से हटा दिया जाता है। स्ट्रीम प्रोसेसिंग इवेंट सोर्सिंग रैबिटएमक्यू एक सामान्य उद्देश्य संदेश समाधान है, जिसका उपयोग अक्सर वेब सर्वर को संसाधन-भारी प्रक्रियाओं को करने के लिए जल्दी से अनुरोध करने के लिए प्रतिक्रिया देने के लिए किया जाता है, जबकि उपयोगकर्ता परिणाम का इंतजार करता है। यह उच्च लोड (20k + / सेकंड) के तहत खपत के लिए या श्रमिकों के बीच संतुलन के लिए कई प्राप्तकर्ताओं को संदेश वितरित करने के लिए भी अच्छा है। जब आपकी आवश्यकताएं थ्रूपुट से आगे बढ़ती हैं, तो RabbitMQ के पास बहुत कुछ है: विश्वसनीय वितरण, मार्ग, महासंघ, हा, सुरक्षा, प्रबंधन उपकरण और अन्य सुविधाओं के लिए सुविधाएँ। आइए RabbitMQ के लिए कुछ परिदृश्यों की सर्वोत्तम जाँच करें, जैसे:

आपके एप्लिकेशन को मौजूदा प्रोटोकॉल जैसे AMQP 0-9-1, STOMP, MQTT, AMQP 1.0 के किसी भी संयोजन के साथ काम करने की आवश्यकता है। आपको प्रति संदेश के आधार पर एक महीन-दाने वाली स्थिरता नियंत्रण / गारंटी की आवश्यकता होती है (मृत पत्र कतार इत्यादि) हालांकि, काफ्का ने हाल ही में लेनदेन के लिए बेहतर समर्थन जोड़ा है। आपके एप्लिकेशन को पॉइंट टू पॉइंट, रिक्वेस्ट / रिप्लाई, और मैसेजिंग / सब्सक्राइबिंग मेसेजिंग कॉम्प्लेक्स रूटिंग टू कंज्यूमर्स, नॉन-ट्रिवियल राउटिंग लॉजिक के साथ कई सर्विसेज / एप्स को इंटीग्रेट करने की जरूरत है। RabbitMQ ऊपर दिए गए काफ्का के कई मजबूत उपयोग के मामलों को भी प्रभावी ढंग से संबोधित कर सकता है, लेकिन अतिरिक्त सॉफ्टवेयर की मदद। RabbitMQ का उपयोग अक्सर Apache Cassandra के साथ किया जाता है जब एप्लिकेशन को स्ट्रीम इतिहास तक पहुंच की आवश्यकता होती है, या उन अनुप्रयोगों के लिए LevelDB प्लगइन के साथ जिन्हें "अनंत" कतार की आवश्यकता होती है, लेकिन RabbitMQ के साथ न तो जहाजों की सुविधा होती है।


0

संक्षिप्त उत्तर "संदेश स्वीकार" है। संदेश स्वीकृति की आवश्यकता के लिए RabbitMQ को कॉन्फ़िगर किया जा सकता है। यदि एक रिसीवर विफल हो जाता है तो संदेश कतार में वापस चला जाता है और दूसरा रिसीवर फिर से कोशिश कर सकता है। जब आप इसे काफ्का में अपने कोड के साथ पूरा कर सकते हैं, तो यह बॉक्स से बाहर RabbitMQ के साथ काम करता है।

मेरे अनुभव में, यदि आपके पास एक ऐसा एप्लिकेशन है जिसमें सूचना की एक धारा को क्वेरी करने की आवश्यकता है, तो काफ्का और केएसकेएल आपकी सबसे अच्छी शर्त हैं। यदि आप एक कतार प्रणाली चाहते हैं तो आप RabbitMQ के साथ बेहतर हैं।


0

सबसे अधिक वोट किए गए उत्तर में अधिकांश भाग शामिल हैं, लेकिन मैं उच्च प्रकाश उपयोग के मामले को देखना चाहता हूं। क्या काफ्का खरगोश खरगोश कर सकता है, जवाब हाँ है लेकिन क्या खरगोश माक सब कुछ कर सकता है जो काफ्का करता है, इसका जवाब नहीं है। तो ऐसी कौन सी चीज़ है जो खरगोश mq नहीं कर सकता है जो कफ़्का को अलग करता है, जिसे संदेश प्रसंस्करण वितरित किया जाता है। इसके साथ अब सबसे अधिक वोट किए गए उत्तर को वापस पढ़ें और यह अधिक समझ में आएगा। विस्तृत करने के लिए, एक उपयोग का मामला लें जहां आपको एक मैसेजिंग सिस्टम बनाने की आवश्यकता होती है जिसमें फेसबुक में "पसंद" के लिए सुपर उच्च थ्रूपुट है और आपने इसके लिए खरगोश mq चुना है। आपने एक एक्सचेंज और कतार और एक उपभोक्ता बनाया जहाँ सभी प्रकाशक (इस मामले में FB उपयोगकर्ता) 'पसंद' संदेश प्रकाशित कर सकते हैं। चूंकि आपका थ्रूपुट उच्च है, आप समानांतर में संदेशों को संसाधित करने के लिए उपभोक्ता में कई थ्रेड बनाएंगे, लेकिन आप अभी भी उस मशीन की हार्डवेयर क्षमता से बंधे हैं जहां उपभोक्ता चल रहा है। यह मानते हुए कि एक उपभोक्ता सभी संदेशों को संसाधित करने के लिए पर्याप्त नहीं है - आप क्या करेंगे? क्या आप कतार में एक और उपभोक्ता जोड़ सकते हैं - नहीं आप ऐसा नहीं कर सकते। क्या आप एक नई कतार बना सकते हैं और उस कतार को उस एक्सचेंज से बाँध सकते हैं जो 'पसंद' संदेश को प्रकाशित करता है, उत्तर कोई कारण नहीं है कि आपके पास दो बार प्रगति होगी। यह मुख्य समस्या है जो काफ्का हल करती है। यह आपको वितरित विभाजन (खरगोश mq में कतार) और वितरित उपभोक्ता बनाता है जो एक दूसरे से बात करते हैं। यह सुनिश्चित करता है कि किसी विषय में आपके संदेश विभिन्न नोड्स (मशीनों) में वितरित उपभोक्ताओं द्वारा प्रक्रियाएं प्राप्त करते हैं। काफ्का के दलाल यह सुनिश्चित करते हैं कि संदेशों को उस विषय के सभी विभाजनों में संतुलित लोड मिले। उपभोक्ता समूह यह सुनिश्चित करता है कि सभी उपभोक्ता एक दूसरे से बात करें और संदेश दो बार संसाधित न हो। लेकिन वास्तविक जीवन में आप इस समस्या का सामना नहीं करेंगे, जब तक कि आपका थ्रू गंभीर रूप से ऊंचा न हो क्योंकि खरगोश mq भी एक उपभोक्ता के साथ बहुत तेजी से डेटा संसाधित कर सकता है।

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