संदेश दलाल
1) संदेश दलालों क्यों
ब्रोकर उत्पादकों और उपभोक्ताओं को समय/गति/विश्वसनीयता से जोड़ ता है:- पीक बफरिंग और स्मूथिंग, बैकप्रेशर।
- स्वतंत्र रूप से स्केलिंग पढ़ें/लिखें
- घटनाओं की अवलोकन और पुनरावृत्ति।
- आर्किटेक्चरल पैटर्न: इवेंट-चालित, CQRS, इवेंट सोर्सिंग, आउटबॉक्स/इनबॉक्स।
2) बुनियादी मॉडल और शर्तें
2. 1 काफ्का (लॉग मॉडल)
विषय - पार्टियां (आदेशित लॉग) उपभोक्ताओं से ऑफसेट।
उपभोक्ता समूह: समानतावाद, पार्टी संतुलन पढ़ें।
समय/मात्रा द्वारा प्रतिधारण; कुंजी संपीड़न।
शब्दार्थ: न्यूनतम - कम से कम-एक बार, सेटिंग्स के साथ - प्रभावी रूप से एक बार (अज्ञात उत्पादक + लेनदेन)।
आदेश: पार्टी के भीतर गारंटी।
2. 2 NATS (विषय, कम विलंबता)
पदानुक्रम और वाइल्डकार्ड के साथ विषय (विषय) ('फू। ',' फू। >`).
मोड: पब/उप, कतार-समूह (कार्य वितरण के साथ प्रशंसक-आउट), अनुरोध-उत्तर (तेज आरपीसी)।
कोर एनएटीएस - पंचांग, अल्ट्रा-कम विलंबता; जेटस्ट्रीम - दृढ़ ता/प्रतिधारण/पुनरावृत्ति।
आदेश: सर्वोत्तम प्रयास, कोई मजबूत वैश्विक गारं जेटस्ट्रीम के साथ - धारा पर आदेश, लेकिन विफलताओं के मामले में दुर्लभ पुनर्व्यवस्था संभव है।
3) वितरण शब्दार्थ और स्थिरता
काफ्का में "बिल्कुल एक बार" होने पर भी मूर्खता और कमी आवेदन/चोट की जिम्मेदारी है।
4) आदेश, विभाजन और कुंजियाँ
काफ्का
संदेश कुंजी की पसंद पार्टी को निर्धारित करती है - मजबूत स्थानीय आदे
Ключи: 'एग्रीगेट _ आईडी', 'टेनेंट _ आईडी', 'ऑर्डर _ आईडी'। गर्म कुंजी से बचें।
संतुलन: एन पार्टियां - समानतावाद स्तर पढ़ ना।
NATS
कोर में, कतार-समूह संतुलन करता है।
जेटस्ट्रीम विषयों द्वारा फेरबदल किया गया है; कम विलंबता के साथ व्यापक फैन आउट/पंखे पर जोर।
5) प्रतिधारण, फिर से खेलना और संघनन
काफ्का
प्रतिधारण: 'प्रतिधारण। ms/बाइट्स '।
संघनन: "कुंजी द्वारा अंतिम मान संग्रहीत करें" (स्नैपशॉट/कैश/सागा के लिए उपयुक्त)।
रीप्ले: कोई भी घाघ ऑफसेट "रिवाइंड" कर सकता है।
जेटस्ट्रीम
धाराएँ: फ़ाइल/ज्ञापन बैकेंड, भंडारण नीति समय/बाइट/संदेशों की संख्या।
उपभोक्ता: पुल/पुश, टिकाऊ/पंचांग, विषय उपसर्गों द्वारा फिल्टर।
रीप्ले: पुनर्वितरण या शुरुआत/ऑफसेट-जैसे (अनुक्रम) से पढ़ ना।
6) लेनदेन, आउटबॉक्स और स्थिरता
काफ्का
पहचान निर्माता ('सक्षम। पहचान = सही '): डुप्लिकेट से सुरक्षा।
लेनदेन: कई बैचों की परमाणु रिकॉर्डिंग + उपभोक्ता-ऑफसेट - "छेद" के बिना पढ़ ने-प्रक्रिया-लेखन पैटर्न।
लेन-देन आउटबॉक्स: एक व्यावसायिक घटना का रिकॉर्ड और एक डेटाबेस लेनदेन में एक आउटबॉक्स लाइन, कार्यकर्ता काफ्का में प्रकाशित होता है।
NATS
काफ्का में कोई "क्रॉस-स्ट्रीम" लेनदेन नहीं हैं; आउटबॉक्स/इनबॉक्स और आइडेम्पोटेंट उपभोक्ता (कुंजी, डेडस्टोर) का उपयोग करें।
7) आरपीसी और अनुरोध-प्रतिक्रिया
काफ्का आरपीसी (उच्च ओवरहेड, ऑर्डर/जवाब अधिक कठिन हैं) के लिए असुविधाजनक है। अतुल्यकालिक कमांड/घटनाओं का उपयोग करें।
NATS: अनुरोध-उत्तर (मिलीसेकंड, सहसंबंध, टाइमआउट) के लिए आदर्श।
उदाहरण (जाओ, NATS अनुरोध-उत्तर):go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)
8) ऑपरेशन और टोपोलॉजी
8. 1 काफ्का
क्लस्टर: दलाल + ज़ूकीपर (पुराने संस्करणों से पहले) या KRaft (नया मेटाडेटा)।
प्रतिकृति - जोन RF≥3, आईएसआर/नियंत्रक
बहु-क्षेत्र: मिररमेकर 2/Cluster लिंकिंग; संघर्ष-नीतियों के साथ परिसंपत्ति-देयता/संपत्ति-संपत्ति।
डिस्क/नेटवर्क क्षमता: 'थ्रोपुट × रिटेंशन × प्रतिकृतियों' से पढ़ें।
8. 2 NATS
क्लस्टर: कई नोड्स, सुपर-क्लस्टर (भू-वितरण), परिधीय/किनारे के लिए लीफनोड्स।
जेटस्ट्रीम: नोड सेट (प्लेसमेंट), प्रतिकृति (आर = 1) द्वारा धाराओं का प्लेसमेंट। 5).
वान: अनुमानित रूप से कम विलंबता, आसान महासंघ।
9) सुरक्षा
काफ्का
TLS (mTLS), SASL: SCRAM, OAuthBearer।
विषयों/समूहों/लेनदेन पर एसीएल।
एन्क्रिप्शन "आराम पर" (OS/disks) + नेटवर्क नीतियाँ।
NATS
nkey/JWT पहचान, ऑपरेटर-खाते, प्रति-विषय ACL।
नोड्स और क्लाइंट के बीच mTLS।
किरायेदार अलगाव (खाते) + सीमा।
10) अवलोकन और प्रदर्शन मैट्रिक्स
काफ्का
: 'BytesIn/Out', ' Queue', 'अंडररेप्लिकेटेड पार्टिशन्स', GC/FS आँकड़े।
विषय/भाग: 'logEndOfset', उपभोक्ता अंतराल (महत्वपूर्ण)।
निर्माता/घाघ: रेट्राई, 'बैच। आकार ',' linger। ms ',' लाना। min. बाइट्स ', त्रुटियां।
उपकरण: जेएमएक्स, क्रूज़ कंट्रोल (फिर से संतुलन), स्कीमा रजिस्ट्री।
NATS/JetStream
सर्वर: conn/msgs/sec, RTT, CPU/mem, धीमी उपभोक्ता पहचान।
जेटस्ट्रीम: प्रति धारा/उपभोक्ता - अंतराल, पुनर्वितरण, एक्क, भंडारण बाइट्स।
निगरानी: अंतर्निहित समापन बिंदु, nsc/adm-CLI, डैशबोर्ड।
11) प्रदर्शन और ट्यूनिंग
काफ्का
बड़े कसाई और 'linger। mimprove थ्रूपुट और संपीड़ित p99।
संपीड़न (lz4/zstd) संजाल/डिस्क सहेजता है।
संख्या। उपभोक्ताओं/कोर की संख्या द्वारा विभाजन, लेकिन ओवरहेड नहीं।
ड्राइव: NVMe को पसंद किया गया, XFS/EXT4 'नोटिमे' के साथ।
NATS
छोटे संदेश, कई कनेक्शन आदर्श हैं; कतार समूहों को "चौड़ा" रखें।
जेटस्ट्रीम: ट्यून 'max _ ack _ लंबित', पुल बनाम पुश, बैचों का आकार।
Backpressure: 'FlowControl', 'IdleHeartbeat', सर्वर-साइड लिमिट।
12) एकीकरण पैटर्न
आउटबॉक्स/इनबॉक्स (काफ्का और एनएटीएस दोनों में)।
SAGA: घटना ऑर्केस्ट्रेशन; दादाजी 'saga _ id + stept' द्वारा।
डेटा कैप्चर बदलें (सीडीसी): डेबेज़ियम → काफ्का; NATS में - "डेटाबेस ट्रिगर/लॉग्स से प्रकाशक" पैटर्न।
स्ट्रीम प्रोसेसिंग: काफ्का स्ट्रीम/फ्लिंक/स्पार्क; NATS में - थर्ड-पार्टी प्रोसेसर/फीचर्स, JetStream उपभोक्ता।
डेड लेटर क्यू (DLQ) और रीट्री पॉलिसी (घातीय बैकऑफ + जिटर)।
13) कॉन्फ़िगरेशन उदाहरण
13. 1 काफ्का: एक विषय और निर्माता बनाना
bash kafka-topics. sh --create --topic orders \
--partitions 12 --replication-factor 3 \
--config cleanup. policy=delete \
--config retention. ms=604800000 # 7d
properties producer. properties bootstrap. servers=broker:9092 acks=all enable. idempotence=true batch. size=65536 linger. ms=10 compression. type=zstd
13. 2 काफ्का धाराएँ: पहचान मशीनिंग (स्केच)
java builder. <String, Order>stream("orders")
.groupByKey()
.aggregate(/... /)
.toStream()
.to("orders-agg");
13. 3 NATS JetStream: स्ट्रीम + उपभोक्ता (nats CLI)
bash nats stream add ORDERS --subjects "orders. " --retention limits \
--storage file --max-bytes 100GB --replicas 3 --discard old
nats consumer add ORDERS ORDERS-WORKERS --filter "orders. created" \
--deliver pull --ack explicit --max-deliver 6 --backoff "1s,5s,30s,2m"
13. 4 NATS अनुरोध-जवाब (जाओ)
go nc, _:= nats. Connect("tls://nats:4222", nats. Secure(tlsConf))
sub, _:= nc. QueueSubscribe("calc. sum", "workers", func(m nats. Msg) {
//... process...
m. Respond([]byte("42"))
})
14) काफ्का बनाम एनएटीएस पिक: एक त्वरित गाइड
हमें रिप्ले, दीर्घकालिक प्रतिधारण, संपीड़न, भारी धारा प्रक्रियाओं की आवश्यकता है - काफ्का।
माइक्रोलैटेंसी, सिंपल ऑपरेशन, एज/आईओटी → एनएटीएस (कोर) के साथ फास्ट आरपीसी, फैन-आउट/फैन-इन की जरूरत है।
हमें दृढ़ ता + फैन-आउट की आवश्यकता है, लेकिन भारी "लॉग" प्लेटफॉर्म - NATS JetStream के बिना।
सख्त कुंजी और लेनदेन आदेश → काफ्का।
15) क्षमता योजना (सरलीकृत)
काफ्का
1. थ्रूपुट: 'इनबाउंड _ MBps × RF × × 86400' डिस्क।
2. बैच: 'लक्ष्य _ संगोष्ठी' × स्टॉक 1। 5-2 ×।
3. नेटवर्क: p99 + प्रतिकृति + निर्माता संपीड़न।
NATS/JetStream
1. संदेश/सेकंड और औसत → थ्रूपुट।
2. प्रतिधारण × प्रतिकृति → भंडारण।
3. क्रमबद्धता के लिए उपभोक्ता सीमा (ack-लंबित, पुनर्वितरण), CPU।
16) सुरक्षित ऑपरेशन: चेकलिस्ट
- टीएलएस/एमटीएलएस सक्षम, रहस्य घुमाया गया।
- एसीएल/खाते/कोटा (प्रति-किरायेदार)।
- उपभोक्ताओं, डीएलक्यू और जिटर रिट्रीट पर पहचान।
- लैग/थ्रूपुट/त्रुटि निगरानी; URP (काफ्का) पर अलर्ट, पुनर्वितरण तूफान (NATS)।
- क्षमता डैशबोर्ड: विभाजन, भंडारण, p99।
- नोड/ज़ोन विफलता परीक्षण, खेल-दिन, रीप्ले/बैकफिल।
- स्कीमा रजिस्ट्री/JSON स्कीमा कुंजियाँ प्रलेखित हैं।
- प्रतिधारण/संपीड़न/टीटीएल नीतियां अनुपालन के साथ संरेखित हैं।
- ब्रोकर/क्लाइंट संस्करण नियमित रूप से अपडेट किए जाते हैं; तार प्रोटोकॉल संगतता सत्यापित।
17) एंटी-पैटर्न
हॉट की (एक ही आईडी की सभी घटनाएं) → एक "उबलती" धारा। शर्दी/बफर।
बिना पहचान के पीछे हटता है - दोहरा प्रभाव।
विशाल संदेश (एमबी-दसियों) → जीसी विखंडन/ठहराव। वस्तु में नीतभार भंडारित करें, लिंक भेजें।
आरपीसी को मिलाना और काफ्का में स्ट्रीमिंग - एक जटिल जीवन चक्र/क्रम।
जेटस्ट्रीम "दीर्घकालिक DWH" → ऑफ-लेबल के रूप में; वस्तु/स्तंभ बेड में लंबे समय तक स्टोर करें।
कोई DLQ → "जहरीला" संदेश अंतहीन रूप से बिताते हैं।
भूल गए प्रतिधारण - डिस्क भरे हुए हैं, क्लस्टर स्टॉप।
18) एफएक्यू
प्रश्न: क्या मैं पाइपलाइन के अंत में "बिल्कुल एक बार" कर सकता हूं?
A: व्यवहार में - प्रभावी रूप से हाँ: काफ्का (आइडेम्पोटेंट प्रोड्यूसर + लेनदेन) और आइडेम्पोटेंट सिंक (कुंजी, अपसर्ट)। एनएटीएस में - आवेदन में निष्क्रियता/कमी के माध्यम से।
प्रश्न: एक मिलियन छोटे आरपीसी/सेकंड के लिए क्या चुनना है?
A: NATS कोर: माइक्रोलैटेंसी, अनुरोध-उत्तर, हल्के कनेक्शन और कतार-समूह।
प्रश्न: भाग्य के संघनन और स्नैपशॉट की आवश्यकता है?
A: काफ्का с 'सफाई। नीति = कॉम्पैक्ट ', कुंजी = कुल/संसाधन।
प्रश्न: अंतराल से कैसे निपटें?
A: बैचों/श्रमिकों की संख्या बढ़ाएं, प्रसंस्करण समय, बैच और प्रीफेच को कम करें, रेगिस्तान का अनुकूलन करें, लंबवत रूप से दलालों/ड्राइव को मजबूत करें।
प्रश्न: बहु-क्षेत्र और डीआर?
A: काफ्का - मिररमेकर 2/Cluster लिंकिंग, संपत्ति-दायित्व के साथ RPO≈sekundy। NATS - सुपरक्लस्टर/लीफनोड्स; ज़ोन द्वारा जेटस्ट्रीम मिररिंग/प्रतिकृतियाँ।
19) कुल
काफ्का और एनएटीएस विभिन्न मोड बंद करते हैं: काफ्का - टिकाऊ घटना लॉग, उच्च थ्रूपुट, लेन-देन और रीप्ले; NATS कम विलंबता, RPC और सरल प्रशंसक-आउट के लिए एक अल्ट्रालाइट बस है, जिसमें दृढ़ ता के लिए JetStream है। डिलीवरी शब्दार्थ, आदेश और प्रतिधारण, विलंबता और परिचालन लागत से अपनी पसंद बनाएं। डिजाइन कुंजी/पार्टियां, प्रतिधारण, डीएलक्यू और अवलोकन - और आपकी घटना वास्तुकला पूर्वानुमानित, स्केलेबल और विश्वसनीय होगी।