Logo GH

संदेश कतारें: RabbitMQ, काफ्का

संदेश कतारें: RabbitMQ, काफ्का

1) कब चुनना है

RabbitMQ (AMQP 0-9-1/1। 0, क्लासिक कतारें, कोरम कतारें, धाराएँ)

इसके लिए उपयुक्त: आरपीसी/कमांड, वर्कफ़्लो, लघु कार्य, फैनआउट/विषय मार्ग, लचीली पुष्टि, प्राथमिकता नियंत्रण।

पेशेवरों: समृद्ध रूटिंग शब्दार्थ (एक्सचेंज), 'बुनियादी। qos '(प्रीफेच), प्रति-संदेश TTL/देरी, सुविधाजनक RPC (उत्तर-टू) पैटर्न, आसान शुरुआत।

विपक्ष: कतार में संग्रहीत इतिहास, कतारों/शार्क में क्षैतिज रूप से बढ़ाया गया; बहुत बड़े प्रवाह के साथ उच्च थ्रूपुट-लागत।

अपाचे काफ्का (इवेंट लॉग, पार्टियां, उपभोक्ता समूह)

इसके लिए उपयुक्त: इवेंट स्ट्रीम, ऑडिटिंग, इवेंट सोर्सिंग, ईटीएल/एकीकरण (कनेक्ट), उच्च आरपीएस/एमबीपी, रीप्ले/री-प्रोसेसिंग, स्ट्रीम प्रोसेसिंग (स्ट्रीम/केएसक्यूएलडीबी)।

पेशेवरों: दीर्घकालिक पत्रिका, पार्टियों द्वारा स्केलिंग, स्थिर रीप्ले, प्रमुख

विपक्ष: पुल + पार्टियों मॉडल - छोटे आरपीसी के लिए नहीं; केवल पार्टी के भीतर आदेश; स्कीमा प्रबंधन/इंटरऑपरेबिलिटी टीम की जिम्मेदारी है।

💡 अभ्यास: कमांड/कार्य - RabbitMQ, घटनाओं/ऑडिट/ETL Kafka। बड़ी प्रणालियों में, दोनों सह-अस्तित्ववादी।

2) वितरण शब्दार्थ और अपरिवर्तनीय

सबसे अधिक एक बार: कोई रिट्रेज़नहीं; तेजी से, नुकसान का जोखिम।

कम से कम एक बार: पीछे हटने के साथ; उपभोक्ता की पहचान की आवश्यकता है।

बिल्कुल एक बार: सीमित परिस्थितियों में प्राप्त करने योग्य (काफ्का TX + पहचान निर्माता + सुसंगत सिंक; RabbitMQ - deduplication table/idempotent कुंजियों के माध्यम से)।

आदेश: RabbitMQ - कतार आदेश (रेट्रास/बहु-उपभोक्ताओं के साथ उल्लंघन किया जा सकता है); पार्टी में काफ्का - क्रम, कुंजी विभाजन सेट करता है।

डोमेन अपरिवर्तनीय: धन/शेष - पत्रिकाओं/सागा और पहचानने वाली टीमों के माध्यम से; LWW पर भरोसा न करें।

3) एकीकरण पैटर्न

आउटबॉक्स/इनबॉक्स: डेटाबेस में घटना की परमाणु रिकॉर्डिंग → कतार (आउटबॉक्स) के लिए प्रकाशन और प्रसंस्करण लॉग (इनबॉक्स) के साथ अज्ञात खपत।

DLQ (मृत अक्षर): N प्रयास/त्रुटियों के बाद - DLQ + अलर्ट में।

पुनरावृत्ति/देरी: RabbitMQ - TTL + मृत-अक्षर विनिमय; काफ्का - बैकऑफ के साथ पुनः प्रयास विषय।

निवेदन/जवाब: RabbitMQ - 'उत्तर _ to' + 'सहसंबंध _ id'; काफ्का - शायद ही कभी, केवल विशेष पैटर्न के साथ।

मुआवजे: घटनाओं पर सागा; प्रत्येक ऑपरेशन में एक व्युत्क

4) कुंजी और टोपोलॉजी डिजाइन

RabbitMQ

एक्सचेंज: 'डायरेक्ट', 'टॉपिक', 'फैनआउट', 'हेडर'।

रूटिंग कुंजी: कतार हिट (ओं) को निर्दिष्ट करता है। प्राथमिकता के लिए - अलग कतारें।

QoS: 'प्रीफेच' (उदा। 50-300) संतुलन दर/विलंबता।

कोरम कतारें: बेड़ा पर दोहराई गई कतारें; प्रतिस्थापन क्लासिक प्रतिबिंबित।

धाराएँ: उच्च-थ्रूपुट/रीप्ले के लिए ऑफसेट (काफ्का जैसी) के साथ धारा।

काफ्का

विषय - विभाजन: लक्ष्य थ्रूपुट और समानतावाद पर '# विभाजन' की योजना बनाएं (पिछड़ेसंगत वृद्धि में कमी की तुलना में आसान है)।

कुंजी: एक कुंजी के सभी रिकॉर्ड - एक भाग में (कुंजी द्वारा क्रम की गारंटी)।

प्रतिकृति कारक: उत्पादक विषयों के लिए 3, 'min. insync। विश्वसनीयता के लिए प्रतिकृतियाँ = 2 '+' अक्स = सभी '।

प्रतिधारण: समय/आकार द्वारा; संघनन - विलोपन के लिए कुंजी + समाधि पत्थर द्वारा अंतिम मानों को संग्रहीत करता है।

5) रेट्राई, डीएलक्यू, पहचान

RabbitMQ

दोहराता है: बैकऑफ के साथ प्रति-संदेश TTL + DLX (मृत-अक्षर विनिमय) (उदाहरण के लिए, 1m → 5m → 15m)।

पहचान: 'सहसंबंध _ id '/' संदेश-आईडी' + संसाधित संदेश तालिका (TTL) या नियतात्मक आदेश.

पुष्टि: मैनुअल 'बेसिक। ack 'सफल लेनदेन के बाद;' बुनियादी। nack (requeue = गलत) 'в DLQ।

काफ्का

दोहराव: व्यक्तिगत पुनरावृत्ति विषय; सफल दुष्प्रभाव के बाद उपभोक्ता ऑफसेट करता है।

वास्तव में एक बार प्रसंस्करण (ईओएस): निर्माता सक्षम। पहचान = सही ', लेन-देन उत्पादक/उपभोक्ता, उपभोक्ता पर' पढ़ें _ प्रतिबद्ध '; सिंक (उदाहरण के लिए, Kafka→Kafka या Kafka→DB एक लेनदेन के माध्यम से) - बड़े करीने से तुल्यकालित।

डेडअप: बेस साइड पर कुंजी/पहचान कुंजी द्वारा, या संपीड़ित विषय के माध्यम से।

6) प्रदर्शन और आयाम

लिटिल का नियम: 'L = ć × W'

वोर्कर के लिए: आवश्यक ओवरलैपिंग 'N ≈ arrival_rate × avg_processing_time × स्टॉक (1। 2–1. 5)`.

RabbitMQ प्रीफेच: 'प्रीफेच = 100' के साथ शुरू करें और p99/इन-फ्लाइट टाइम को मापें।

काफ्का विभाजन: वांछित उपभोक्ता समानता और थ्रूपुट लक्ष्य से गणना (उदाहरण के लिए, 1 बैच SSD/10GbE पर 5-20 MB/s स्थिर है)।

7) अवलोकन और अलर्ट

सामान्य:
  • लैग/बैकलॉग (संदेश/बाइट्स), संदेशों की आयु (p95/p99), प्रसंस्करण की त्रुटि-दर, डीएलक्यू-दर।
  • समय "publikatsiya→obrabotka" (अंत-से-अंत)।
  • निर्भरता का नक्शा: निर्माता → दलाल → उपभोक्ता।
RabbitMQ:
  • कनेक्शन, चैनल, नॉन-एक्केड संदेश, 'मेमोरी _ अलार्म', 'डिस्क _ फ्री _ लिमिट', 'कतार लंबाई' p95.
  • कोरम पर रिपोर्ट (नेता, रफ लॉग, 'कोरम पर्याप्त नहीं' याद करता है)।
काफ्का:
  • अंडर-दोहराए गए विभाजन, आईएसआर सिकुड़ ता/विस्तार, नियंत्रक परिवर्तन।
  • निर्माता त्रुटियां (टाइमआउट, 'अनुरोध विलंबता'), उपभोक्ता अंतराल प्रति समूह/विभाजन।
  • ब्रोकर I/O, पेज कैश हिट, GC, ZooKeeper/KRaft स्वास्थ्य।

8) सुरक्षा और बहु-किरायेदारी

TLS इन-ट्रांजिट एन्क्रिप्शन, प्रमाणीकरण (SASL/PLAIN/SCRAM/OAuth, mTLS)।

प्राधिकरण: vhost/amments (RabbitMQ), ACL को विषय/समूह (काफ्का)।

कोटा: कनेक्शन, चैनल, कतार आकार/विषय, प्रकाशन/पढ़ने की गति के लिए।

वातावरण द्वारा अलगाव (dev/stage/prod) और namespace/vhost द्वारा।

9) ऑपरेशन और ट्यूनिंग

RabbitMQ

नोड्स के लिए पोस्ट एक्सचेंज/कतारें (सीपीयू/आईओ राजधानी)।

बड़े बफ़र्स के लिए आलसी कतारें (डिस्क को संदेश); बिना शार्डिंग के "गर्म" कतारों से बचें।

एचए के लिए कोरम कतारें; प्लान रफ लॉग आकार और डिस्क।

टीटीएल/लंबाई-सीमा नीतियां, केवल वास्तविक आवश्यकता (महंगी) के लिए प्राथमिकता कतारें।

DLQ/TTL नीति उदाहरण (विचार):
bash rabbitmqctl set_policy DLX "^task\." \
'{"dead-letter-exchange":"dlx","message-ttl":60000,"max-length":100000}' --apply-to queues

काफ्का

एसएसडी/एनवीएमई, तेज नेटवर्क; ओएस ट्यूनिंग (स्वैपनेस कम, फ़ाइल सीमा)।

'aks = सभी', 'linger। ms '(कसाई),' संपीड़न। बैंडविड्थ के लिए टाइप = zstd '/lz4।

उपभोक्ता विकल्प: 'अधिकतम। सर्वेक्षण। अंतराल। ms ',' अधिकतम। सर्वेक्षण। रिकॉर्ड्स ',' प्राप्त करें। min. बाइट्स '।

प्रतिधारण और संघनन - भंडारण संतुलन/पुनरावृत्ति।

विश्वसनीय प्रकाशन का उदाहरण (जावा, विचार):
java props. put("acks","all");
props. put("enable. idempotence", "true");
props. put("max. in. flight. requests. per. connection","1");
props. put("retries","10");

10) एकीकरण और पारिस्थितिकी तंत्र

काफ्का कनेक्ट (सिंक/स्रोत), स्कीमा रजिस्ट्री (एवरो/जेसन/प्रोटोबुफ) और इंटरऑपरेबिलिटी ('बैकवर्ड/फॉरवर्ड/फुल')।

काफ्का स्ट्रीम/ksqlDB: स्टेटफुल ऑपरेशन, विंडो, एग्रीगेट्स।

RabbitMQ फावड़ा/महासंघ: समूहों/केंद्रों के बीच स्थानांतरण।

K8s ऑपरेटर: स्ट्रिमज़ी (काफ्का), रैबिटएमक्यू क्लस्टर ऑपरेटर; GitOps घोषणापत्र।

11) कार्यान्वयन चेकलिस्ट (0-45 दिन)

0-10 दिन

उपयोग-मामलों को परिभाषित करें: कमांड/कार्य (RabbitMQ), घटनाओं/ऑडिट (काफ्का)।

कुंजी चुनें ('रूटिंग कुंजी '/' पार्टिशन कुंजी'), SLO "publikatsiya→obrabotka" सेट करें।

बुनियादी सुरक्षा नीतियां (टीएलएस, एसीएल), कोटा, डीएलक्यू/टीटीएल।

11-25 दिन

आउटबॉक्स/इनबॉक्स, आइडेम्पोटेंसी और डेडअप लागू करें।

बैकऑफ के साथ रिट्रीस सेट करें (खरगोश: TTL + DLX; काफ्का: रीट्री टॉपिक्स)।

डैशबोर्ड: लैग, एज, डीएलक्यू-रेट, एंड-टू-एंड लेटेंसी; अलर्ट।

26-45 दिन

ट्यूनिंग बैंडविड्थ: प्रीफेच/एक्स (खरगोश); विभाजन/acks/बैच (काफ्का)।

डीआर प्रक्रियाएं (दर्पण/प्रतिकृति), नोड विफलता परीक्षण।

दस्तावेज़ घटना अनुबंध (स्कीमा) और इंटरऑपरेबिलिटी नीतियां।

12) एंटी-पैटर्न

सभी कार्यों के लिए एक "सार्वभौमिक" उपकरण।

DLQ/TTL की अनुपस्थिति: शाश्वत जहर (जहर संदेश)।

असीमित 'प्रीफेच' - उपभोक्ता भुखमरी, p99 वृद्धि।

कुंजियों के बिना काफ्का → डिफ़ॉल्ट रूप से आदेश/गर्म पार्टियों का नुकसान।

"बिल्कुल एक बार", बिना किसी वास्तविक आवश्यकता/अनुशासन के, सुरक्षा की झूठी भावना है।

TLS/ACL के बिना कोड में रहस्य/लॉगिन।

रजिस्ट्री और पलायन के बिना संदेशों की योजनाओं/संस्करणों का हार्डकोड।

13) परिपक्वता मैट्रिक्स

लैग/आयु एसएलओ समय का ≥ 99% प्रदर्शन किया जाता है; नियंत्रण में DLQ-दर।

आइडेम्पोटेंसी में 100% महत्वपूर्ण रास्ते शामिल हैं; आउटबॉक्स/इनबॉक्स लागू किया गया।

प्रतिधारण/संपीड़न प्रलेखित हैं, रिप्ले उपभोक्ताओं को नहीं तोड़ ता है।

आईएसआर/यूआरपी (काफ्का) और रफ/डिस्क लिमिट (खरगोश) पर अलर्ट स्थापित किए गए हैं।

इवेंट कॉन्ट्रैक्ट को वर्शन किया जाता है (स्कीमा रजिस्ट्री), CI में संगतता का परीक्षण किया जाता है।

नियमित खेल-दिन: नोड/ब्रोकर/AZ विफलता, वसूली की जाँच।

14) विन्यास के उदाहरण (सारांश)

RabbitMQ: उपसर्ग और पुष्टि (स्यूडोकोड):
python channel. basic_qos(prefetch_count=200)
for msg in consume("tasks"):
try:
handle(msg)
channel. basic_ack(msg. delivery_tag)
except Transient:
channel. basic_nack(msg. delivery_tag, request = False) # will go to DLQ
काफ्का उपभोक्ता (विचार):
java props. put("enable. auto. commit","false");
props. put("isolation. level","read_committed"); // при EOS
//...
poll -> process(idempotent) -> commitSync()

15) निष्कर्ष

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

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।