GH GambleHub

संदेश कतारें: 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

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

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

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

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

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

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