قوائم انتظار الرسائل: RabbitMQ، كافكا
قوائم انتظار الرسائل: RabbitMQ، كافكا
1) متى تختار
RabbitMQ (AMQP 0-9-1/1. 0، قوائم الانتظار الكلاسيكية، قوائم انتظار النصاب، التدفقات)
مناسب لـ: RPC/أوامر، سير العمل، المهام القصيرة، توجيه fanout/time، تأكيدات مرنة، التحكم في الأولوية.
الإيجابيات: دلالات التوجيه الغنية (التبادلات)، "أساسي. qos' (مقدمة)، لكل رسالة TTL/تأخير، أنماط RPC المريحة (الرد على)، بداية سهلة.
السلبيات: التاريخ مخزن في طابور، مقياس أفقيًا عبر قوائم الانتظار/الشظايا ؛ إنتاجية عالية التكلفة مع تدفقات كبيرة جدًا.
أباتشي كافكا (سجل الأحداث، الحفلات، مجموعات المستهلكين)
مناسب لـ: تدفقات الأحداث، التدقيق، مصادر الأحداث، ETL/integrations (Connect)، RPS/MBps عالية، إعادة/إعادة معالجة، معالجة التدفق (Streams/ksqlDB).
الإيجابيات: مجلة طويلة المدى، تحجيم من قبل الأطراف، إعادة ثابتة، ضغط رئيسي.
السلبيات: نموذج Pull + Parts - ليس لـ RPC صغير ؛ النظام داخل الحزب فقط ؛ إدارة المخطط/قابلية التشغيل البيني هي مسؤولية الفريق.
2) دلالات التسليم والثوابت
على الأكثر مرة واحدة: لا توجد عمليات إعادة طباعة ؛ بسرعة، خطر الخسارة.
مرة واحدة على الأقل: مع التراجعات ؛ تتطلب حماقة المستهلك.
مرة واحدة بالضبط: يمكن تحقيقه في ظروف محدودة (Kafka TX + idempotent product + conservated sink; RabbitMQ - من خلال جدول التفريغ/المفاتيح الخفية).
الأمر: RabbitMQ - أمر قائمة الانتظار (يمكن انتهاكه مع retras/multi-Consumers) ؛ كافكا - اطلب في الحزب، المفتاح يحدد التقسيم.
ثوابت المجال: الأموال/الأرصدة - من خلال المجلات/الملاحم والأفرقة الحمقاء ؛ لا تعتمد على LWW.
3) أنماط التكامل
Outbox/InBox: التسجيل الذري للحدث في قاعدة البيانات → النشر إلى قائمة الانتظار (out box) والاستهلاك غير اللائق مع سجل المعالجة (inbox).
DLQ (حروف ميتة): بعد محاولات/أخطاء N - في تنبيه DLQ +.
إعادة المحاولة/التأخير: RabbitMQ - TTL + تبادل الحروف الميتة ؛ كافكا - إعادة تجربة الموضوعات مع التراجع.
الطلب/الرد: RabbitMQ - 'الرد _ على' + 'الارتباط _ id' ؛ كافكا - نادرًا، فقط بأنماط خاصة.
التعويضات: ملحمة على الأحداث ؛ كل عملية لها معكوس.
4) تصميم المفتاح والطوبولوجيا
أرنب MQ
التبادلات: "مباشرة"، "موضوع"، "fanout'،" رؤوس ".
مفتاح التوجيه: يحدد ضربة (ضربات) قائمة الانتظار. لتحديد الأولويات - قوائم انتظار منفصلة.
QoS: 'prettch' (على سبيل المثال 50-300) معدل/زمن انتقال الأرصدة.
قوائم انتظار النصاب: قوائم انتظار مكررة على الطوافة ؛ عكس الاستبدال الكلاسيكي.
التدفقات: تدفق مع تعويضات (مثل كافكا) للإنتاج العالي/إعادة التشغيل.
كافكا
أقسام → الموضوع: تخطيط «# أقسام» على الإنتاجية المستهدفة والتوازي (الزيادة المتوافقة مع الخلف أسهل من الانخفاض).
المفتاح: جميع سجلات مفتاح واحد - في جزء واحد (ضمان النظام حسب المفتاح).
عامل التكرار: 3 للمواضيع الإنتاجية، 'min. insync. النسخ المتماثلة = 2 '+' acks = all' للموثوقية.
الاحتفاظ: حسب الوقت/الحجم ؛ ضغط - يخزن القيم الأخيرة حسب شواهد المفتاح + للحذف.
5) Retrai، DLQ، الخصوصية
أرنب MQ
تكرر: لكل رسالة TTL + DLX (تبادل الحروف الميتة) مع التراجع (على سبيل المثال، 1 م → 5 م → 15 م).
الخصوصية: 'الارتباط _ id '/' message-id' + جدول الرسائل المعالجة (TTL) أو الأوامر الحتمية.
التأكيدات: يدوي. ' الأساسية. nack (طلب = خطأ) 'в DLQ.
كافكا
التكرارات: مواضيع فردية لإعادة المحاكمات ؛ يلتزم المستهلك بالتعويض بعد الآثار الجانبية الناجحة.
المعالجة مرة واحدة بالضبط (EOS): تمكين المنتج. ideputence = true ', transactional productor/consumer,' read _ committed 'on Consumer; (على سبيل المثال، Kafka→Kafka أو Kafka→DB من خلال معاملة) - تزامن بدقة.
Dedup: عن طريق المفتاح/المفتاح الخفي على الجانب الأساسي، أو عن طريق الموضوع المضغوط.
6) الأداء والبعد
قانون ليتل: 'L = λ × W'
بالنسبة للدوامة: مطلوب تداخل 'N المخزون (1. 2–1. 5)`.
تمهيد RabbitMQ: ابدأ بـ «prefetch = 100» وقياس p99/وقت الرحلة.
أقسام كافكا: الحساب من التوازي الاستهلاكي المطلوب وهدف الإنتاجية (على سبيل المثال، الدفعة 1 مستقرة 5-20 ميجابايت/ثانية على SSD/10 جيجابايت).
7) إمكانية الرصد والتنبيهات
العام:- Lag/Backlog (الرسائل/البايت)، عمر الرسائل (p95/p99)، معدل الخطأ في المعالجة، معدل DLQ.
- الوقت «publikatsiya→obrabotka» (من طرف إلى طرف).
- خريطة التبعية: المنتج → الوسيط → المستهلك.
- اتصالات، قنوات، رسائل غير مربوطة، «memory _ alarm'،» disk _ free _ limit'، «طول قائمة الانتظار» p95.
- تقارير عن Quorum (القائد، Raft log، يفتقد «النصاب ليس كافيًا»).
- أقسام غير مكررة، تقلص/توسيع ISR، تغييرات وحدة التحكم.
- أخطاء المنتج (المهلة، «وقت الطلب»)، تأخر المستهلك لكل مجموعة/تقسيم.
- الوسيط I/O، ضرب ذاكرة التخزين المؤقت للصفحة، GC، ZooKeeper/KRaft health.
8) السلامة وتعدد الحيازات
TLS-transit encryption, authentification (SASL/PLAIN/SCRAM/OAuth, mTLS).
الإذن: vhost/الأذونات (RabbitMQ)، ACL للمواضيع/المجموعات (كافكا).
الحصص: للاتصالات والقنوات وحجم قائمة الانتظار/الموضوع وسرعة النشر/القراءة.
العزل حسب البيئات (dev/stage/prod) وبحسب مساحة الاسم/vhost.
9) التشغيل والضبط
أرنب MQ
تبادل البريد/قوائم الانتظار إلى العقد (CPU/IO capital).
قوائم الانتظار الكسولة (رسائل إلى قرص) للمستودعات الكبيرة ؛ تجنب قوائم الانتظار «الساخنة» دون قشرها.
طوابير النصاب القانوني لـ HA ؛ خطط لحجم سجل الطوافة والقرص.
TTL/سياسات الحد الأقصى للطول، طوابير الأولوية فقط للحاجة الحقيقية (باهظة الثمن).
bash rabbitmqctl set_policy DLX "^task\." \
'{"dead-letter-exchange":"dlx","message-ttl":60000,"max-length":100000}' --apply-to queues
كافكا
SSD/NVMe، شبكات سريعة ؛ ضبط نظام التشغيل (التبادل المنخفض، حدود الملفات).
«acks = all'،» باقٍ. الآنسة «(الجزخ)،» الضغط. النوع = zstd'/lz4 لعرض النطاق الترددي.
خيارات المستهلك: 'الحد الأقصى. استطلاع. الفاصل الزمني. السيدة '،' ماكس. استطلاع. السجلات '،' جلب. min. bytes '.
الاحتفاظ والضغط - رصيد التخزين/إعادة التشغيل.
java props. put("acks","all");
props. put("enable. idempotence", "true");
props. put("max. in. flight. requests. per. connection","1");
props. put("retries","10");
10) التكامل والنظام الإيكولوجي
Kafka Connect (Sinks/Sources)، Schema Registry (Avro/JSON/Protobuf) وقابلية التشغيل البيني ('BACKWARD/FORWARD/FULL').
Kafka Streams/ksqlDB: عمليات مكثفة، نوافذ، مجمعات.
RabbitMQ Shovel/Federation: transfer between clusters/centres.
المشغلون K8s: Strimzi (كافكا)، RabbitMQ Cluster Operator ؛ بيانات GitOps.
11) قائمة التنفيذ المرجعية (0-45 يومًا)
0-10 أيام
تحديد حالات الاستخدام: الأوامر/المهام (RabbitMQ)، الأحداث/عمليات التدقيق (كافكا).
حدد المفاتيح («مفتاح التوجيه »/« مفتاح التقسيم»)، ضبط SLO «publikatsiya→obrabotka».
السياسات الأمنية الأساسية (TLS، ACL)، الحصص، DLQ/TTL.
11-25 يومًا
تنفيذ outbox/inbox، الخصوصية والوفاة.
قم بإعداد ملاذات مع التراجع (Rabbit: TTL + DLX ؛ كافكا: إعادة تجربة المواضيع).
لوحات القيادة: التأخر والعمر ومعدل DLQ والوقت من البداية إلى النهاية ؛ تنبيهات.
26-45 يومًا
عرض النطاق الترددي للضبط: prefetch/acks (Rabbit) ؛ (كافكا).
إجراءات DR (انعكاس/تكرار)، اختبارات فشل العقدة.
توثيق عقود الأحداث (المخططات) وسياسات التشغيل البيني.
12) الأنماط المضادة
أداة «عالمية» واحدة لجميع المهام.
غياب DLQ/TTL: السموم الأبدية (الرسائل السامة).
«بريفتش» غير محدود → جوع المستهلك، نمو p99.
كافكا بدون مفاتيح → فقدان النظام/الأطراف الساخنة افتراضيًا.
«مرة واحدة بالضبط»، بدون حاجة/انضباط حقيقي، هو شعور زائف بالأمان.
الأسرار/تسجيل الدخول في الرمز، بدون TLS/ACL.
الرمز الوصفي للمخططات/نسخ الرسائل بدون قلم المحكمة والهجرات.
13) مقاييس النضج
يتم تنفيذ Lag/age SLO ≥ 99٪ من الوقت ؛ معدل DLQ تحت السيطرة.
يغطي الفراغ 100٪ من المسارات الحرجة ؛ تم تنفيذ outbox/inbox.
يتم توثيق الاحتفاظ/الضغط، والإعادة لا تكسر المستهلكين.
تم إعداد تنبيهات حول حدود ISR/URP (كافكا) و Raft/disk (Rabbit).
يتم التحقق من عقود الأحداث (Schema Registry)، ويتم اختبار التوافق في CI.
أيام اللعب العادية: عقدة/سمسار/فشل AZ، فحص الاسترداد.
14) أمثلة على التكوينات (موجز)
RabbitMQ: البادئة والتأكيدات (cseudocode):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 فئات مختلفة من المشكلات: الأوامر/المهام والتوجيه الغني مقابل سجل الأحداث طويل الأجل والبث القابل للتطوير. النجاح - في دلالات التسليم الصحيحة، وانضباط الغباء، والمفتاح المدروس، وإعادة التصوير/DLQ، وإمكانية الملاحظة والأمن الصارم. قم ببناء الممارسات الهندسية حول قوائم الانتظار - صندوق الخروج/البريد الوارد، والمخططات، وسياسات GitOps - ويصبح تكاملك قابلاً للتنبؤ وقابلاً للتطوير ومستدامًا.