سماسرة الرسائل
1) لماذا وسطاء الرسائل
الوسيط يوحد المنتجين والمستهلكين حسب الوقت/السرعة/الموثوقية:- ذروة التخزين المؤقت والتنعيم، والظهري.
- اقرأ/اكتب مقياس بشكل مستقل.
- إمكانية ملاحظة الأحداث وإعادة تشغيلها.
- الأنماط المعمارية: مدفوعة بالحدث، CQRS، مصادر الأحداث، outbox/inbox.
2) النماذج والشروط الأساسية
2. 1 كافكا (نموذج سجل)
الموضوع → الأطراف (الجذوع المطلوبة) → تعويضات من المستهلكين.
مجموعة المستهلكين: اقرأ التوازي، التوازن الحزبي.
الاحتفاظ حسب الوقت/الحجم ؛ ضغط رئيسي.
الدلالات: الحد الأدنى - مرة واحدة على الأقل، مع الإعدادات - بشكل فعال مرة واحدة بالضبط (المنتجون الأغبياء + المعاملات).
الأمر: مضمون داخل الحزب.
2. 2 NATS (مواضيع، زمن انتقال منخفض)
الموضوع (الموضوع) مع التسلسل الهرمي وبطاقات البدل ('foo. '،' foo. >`).
الأوضاع: حانة/فرعية، قوائم انتظار المجموعات (مروحة مع توزيع العمل)، طلب الرد (سريع RPC).
Core NATS - زمن انتقال سريع الزوال ومنخفض للغاية ؛ JetStream - الثبات/الاحتفاظ/التكرار.
النظام: بذل قصارى الجهود، وعدم وجود ضمان عالمي قوي ؛ مع JetStream - الطلب على البث، ولكن إعادة الترتيب النادرة في حالة الفشل ممكنة.
3) دلالات التسليم والاتساق
الغباء والتفريغ هما مسؤولية التطبيق/الكدمة، حتى عندما «مرة واحدة بالضبط» في كافكا.
4) الطلب والتقسيم والمفاتيح
كافكا
يحدد اختيار مفتاح الرسالة الحزب → محلي قوي.
Ключи: 'مجموع _ معرف'، 'مستأجر _ معرف'، 'طلب _ معرف'. تجنب المفاتيح الساخنة.
التوازن: N parts ≈ قراءة مستوى التوازي.
NATS
في Core، تقوم مجموعة قائمة الانتظار بالتوازن.
يتم خلط تيار JetStream بواسطة الموضوعات ؛ التركيز على المروحة الواسعة/المروحة مع زمن انتقال منخفض.
5) الاحتفاظ وإعادة التشغيل والضغط
كافكا
الاحتفاظ: 'الاحتفاظ. ms/bytes '.
الدمج: يخزن «القيمة الأخيرة حسب المفتاح» (مناسب للقطات/المخابئ/الملاحم).
إعادة التشغيل: يمكن لأي مستهلك «إعادة» التعويضات.
جيت ستريم
التدفقات: الملفات/المذكرات الخلفية، سياسة التخزين حسب الوقت/البايت/عدد الرسائل.
المستهلكون: سحب/دفع، متين/سريع الزوال، مرشح حسب البادئات.
إعادة التشغيل: إعادة التسليم أو القراءة من البداية/التعويض الشبيه (التسلسل).
6) المعاملات والصندوق الخارجي والاتساق
كافكا
المنتج اللطيف ('enable. :: الحماية من الازدواجية.
المعاملات: تسجيل ذري لعدة دفعات + موازنة المستهلك → نمط القراءة وعملية الكتابة بدون «ثقوب».
صندوق المعاملات الخارجي: سجل لحدث تجاري وخط خارجي في صفقة قاعدة بيانات واحدة، ينشره العامل في كافكا.
NATS
لا توجد معاملات «عبر التيار» كما هو الحال في كافكا ؛ استخدم صندوق الخروج/البريد الوارد والمستهلكين الأحمق (المفاتيح، المتجر).
7) RPC والطلب - الرد
كافكا غير مريح لـ RPC (ارتفاع النفقات العامة، الطلب/الإجابات أكثر صعوبة). استخدم أوامر/أحداث غير متزامنة.
NATS: مثالي للرد على الطلب (مللي ثانية، ارتباط، مهلة).
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)
8) التشغيل والطوبولوجيا
8. 1 كافكا
المجموعة: الوسطاء + ZooKeeper (قبل الإصدارات القديمة) أو KRaft (بيانات وصفية جديدة).
النسخ المتماثل - المنطقة RF≥3، ISR/المراقبين
متعدد المناطق: MirrorMaker 2/Cluster Linking ؛ الأصول والخصوم والأصول مع سياسات التضارب.
سعة القرص/الشبكة: تُقرأ من «خشنة الاحتفاظ × × نسخ طبق الأصل».
8. 2 ناتس
العنقود: العديد من العقد، المجموعة الفائقة (التوزيع الجغرافي)، النقاط الورقية للأجهزة الطرفية/الحافة.
JetStream: وضع التيارات بواسطة مجموعات العقدة (وضع)، التكرار (R = 1. 5).
WAN: زمن انتقال منخفض بشكل متوقع، اتحاد سهل.
9) السلامة
كافكا
TLS (mTLS)، SASL: SCRAM، OAuthBearer.
الرباط الصليبي الأمامي بشأن المواضيع/المجموعات/المعاملات.
التشفير «في الراحة» (OS/disks) + سياسات الشبكة.
NATS
هويات nkey/JWT، وحسابات المشغل، و ACL لكل موضوع.
mTLS بين العقد والعملاء.
عزل المستأجر (الحسابات) + الحدود.
10) إمكانية الرصد ومقاييس الأداء
كافكا
Брокер: «BytesIn/Out'،» RequestQueue «،» UnderReplicatedPartions'، إحصائيات GC/FS.
الموضوع/الجزء: "logEndOffset'، تأخر المستهلك (حرج).
المنتج/المستهلك: retrai، 'batch. حجم '،' باقية. السيدة '،' جلب. القليل من الأخطاء
الأدوات: JMX، Cruise Control (إعادة التوازن)، Schema Registry.
NATS/JetStream
الخادم: conn/msgs/sec، RTT، CPU/mem، اكتشاف المستهلك البطيء.
JetStream: لكل تيار/مستهلك - تأخر، إعادة التسليم، آكس، بايت التخزين.
المراقبة: نقطة النهاية المدمجة، nsc/adm-CLI، لوحات القيادة.
11) الأداء والضبط
كافكا
الجزار الكبيرة و 'باقية. ms 'provive الإنتاجية والضغط p99.
الضغط (lz4/zstd) يحفظ الشبكة/القرص.
أرقام التقسيم حسب عدد المستهلكين/النوى، ولكنها لا تنفق فوق النفقات.
محركات الأقراص: تفضل NVMe، XFS/EXT4 مع «noatime».
NATS
الرسائل الصغيرة، والعديد من الاتصالات هي القاعدة ؛ حافظ على مجموعات الطابور «واسعة».
JetStream: ضبط «max _ ack _ about»، سحب مقابل دفع، حجم الدفعات.
الضغط الخلفي: «FlowControl'،» IdleHeartbeat'، حدود جانب الخادم.
12) أنماط التكامل
Outbox/Inbox (في كل من Kafka و NATS).
SAGA: تنظيم الحدث ؛ الجد بواسطة «saga _ id + step».
Change Data Capture (CDC): Debezium → Kafka; في NATS - نمط «الناشر من قاعدة البيانات المشغلات/السجلات».
معالجة التيار: Kafka Streams/Flink/Spark ؛ في NATS - معالجات/ميزات الطرف الثالث، مستهلكي JetStream.
قائمة انتظار Dead Letter (DLQ) وسياسات إعادة التجربة (التراجع الأسي + jitter).
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) اختيار كافكا ضد ناتس: دليل سريع
نحن بحاجة إلى إعادة التشغيل، والاحتفاظ على المدى الطويل، والضغط، وعمليات التيار الثقيل → كافكا.
تحتاج إلى RPC سريع، مروحة/مروحة مع microlatency، تشغيل بسيط، edge/IoT → NATS (Core).
نحن بحاجة إلى المثابرة + المروحة، ولكن بدون منصة «تسجيل» ثقيلة → NATS JetStream.
المفتاح الصارم وأمر المعاملات → كافكا.
15) تخطيط القدرات (مبسط)
كافكا
1. الإنتاجية: أقراص «inbound _ MBps RF 86400».
2. الدفعات: «الهدف _ العملة المتزامنة» × الأسهم 1. 5-2 ×.
3. الشبكة: p99 + تكرار + ضغط المنتج.
NATS/JetStream
1. رسائل/ثانية ومتوسط إنتاجية →.
2. الاحتفاظ × النسخ المتماثلة → التخزين.
3. حدود المستهلكين (معلقة، إعادة التسليم)، وحدة المعالجة المركزية للتسلسل.
16) التشغيل الآمن: قائمة مرجعية
- تمكين TLS/mTLS، وتدوير الأسرار.
- ACL/الحسابات/الحصص (لكل مستأجر).
- الخصوصية على المستهلكين، DLQ، والخلوات الجيتر.
- رصد التأخر/الإنتاجية/الخطأ ؛ تنبيهات حول URP (كافكا)، عاصفة إعادة التسليم (NATS).
- لوحات القيادة السعة: الفواصل، التخزين، ص 99.
- اختبارات فشل العقدة/المنطقة، أيام اللعبة، إعادة التشغيل/الردم.
- تم توثيق مفاتيح Schema Registry/JSON Schema.
- يتم مواءمة سياسات الاحتفاظ/الضغط/TTL مع الامتثال.
- يتم تحديث نسخ الوسيط/العملاء بانتظام ؛ تم التحقق من توافق بروتوكول الأسلاك.
17) الأنماط المضادة
المفتاح الساخن (جميع الأحداث من نفس الهوية) → تيار واحد «يغلي». شاردي/عازل.
التراجع دون الغباء → تأثيرات مزدوجة.
رسائل ضخمة (MB-tens) → تجزئة/توقف GC. تخزين الحمولة في الجسم، إرسال الروابط.
خلط RPC والبث في كافكا → دورة حياة/طلب معقد.
JetStream باعتباره «DWH طويل الأجل» → خارج التسمية ؛ يخزن لفترة طويلة في سرير الكائن/العمود.
لا توجد رسائل DLQ → «سامة» تدور إلى ما لا نهاية.
الاحتفاظ المنسي → الأقراص ممتلئة، توقف عنقودي.
18) الأسئلة الشائعة
س: هل يمكنني القيام «مرة واحدة بالضبط» في نهاية خط الأنابيب ؟
ج: من الناحية العملية - نعم فعليًا: كافكا (منتج خفي + معاملات) وأحواض خفية (مفتاح، مزعج). في NATS - من خلال الخصوصية/التخلص في التطبيق.
س: ماذا تختار لمليون RPCs صغيرة/ثانية ؟
ج: NATS Core: Microlatency، الرد على الطلب، اتصالات الإضاءة ومجموعات الانتظار.
س: هل تحتاج إلى ضغط ولقطات من الثروة ؟
ج: تنظيف كافكا с. policy = compact ', key = colgate/resource.
س: كيف تتعامل مع التأخر ؟
ج: زيادة عدد الدفعات/العمال، وتقليص وقت المعالجة والدفعة والسبقة، وتحسين التصحر، وتعزيز السماسرة/محركات الأقراص رأسياً.
س: متعدد المناطق و DR ؟
ج: كافكا - MirrorMaker 2/Cluster Linking، الأصول والخصوم مع RPO≈sekundy. NATS - supercluster/leafnodes ؛ تعكس JetStream/النسخ المتماثلة حسب المنطقة.
19) المجاميع
تغلق كافكا و NATS أوضاعًا مختلفة: كافكا - سجلات الأحداث الدائمة، والإنتاجية العالية، والمعاملات، وإعادة التشغيل ؛ NATS هي حافلة خفيفة للغاية لوقت الوصول المنخفض و RPC ومروحة بسيطة، مع JetStream للمثابرة. اختر اختيارك من دلالات التسليم والطلب والاحتفاظ بالوقت وتكاليف التشغيل. مفاتيح/حفلات التصميم والاحتفاظ و DLQ وقابلية الملاحظة - وستكون بنية الحدث الخاصة بك قابلة للتنبؤ وقابلة للتطوير وموثوقة.