GH GambleHub

صف های پیام: RabbitMQ، کافکا

صف های پیام: RabbitMQ، کافکا

1) هنگامی که برای انتخاب

RabbitMQ (AMQP 0-9-1/1) 0, صف کلاسیک, صف حد نصاب, جریان)

مناسب برای: RPC/دستورات، گردش کار، وظایف کوتاه، مسیریابی fanout/موضوع، تایید انعطاف پذیر، کنترل اولویت.
مزایا: rich routing semantics (exchanges), 'basic. qos '(prefetch)، هر پیام TTL/تاخیر، RPC مناسب (پاسخ به) الگوهای، شروع آسان است.
معایب: تاریخچه ذخیره شده در صف، مقیاس به صورت افقی در سراسر صف/قطعات ؛ هزینه بالا با جریان بسیار بزرگ.

آپاچی کافکا (ثبت رویداد، احزاب، گروه های مصرف کننده)

مناسب برای: جریان رویداد، حسابرسی، منابع رویداد، ETL/ادغام (اتصال)، RPS/MBps بالا، پخش/پردازش مجدد، پردازش جریان (Streams/ksqlDB).
مزایا: مجله بلند مدت، مقیاس بندی توسط احزاب، پخش پایدار، تراکم کلیدی.
منفی: کشیدن + مدل احزاب - نه برای RPC کوچک ؛ نظم فقط در داخل حزب ؛ مدیریت طرح/قابلیت همکاری مسئولیت تیم است.

💡 تمرین: دستورات/وظایف → RabbitMQ, events/audit/ETL → کافکا. در سیستم های بزرگ، هر دو همزیستی می کنند.

2) معانی تحویل و ناوردا

حداکثر یک بار: بدون بازپرداخت ؛ سریع، خطر از دست دادن.
حداقل یک بار: با عقب نشینی ؛ نیاز به idemotency مصرف کننده.
دقیقا یک بار: قابل دستیابی در شرایط محدود (Kafka TX + تولید کننده idempotent + سینک سازگار ؛ RabbitMQ - از طریق جدول deduplication/کلیدهای idempotent).
سفارش: RabbitMQ - سفارش صف (ممکن است با retras/چند مصرف کننده نقض شود) ؛ کافکا - نظم در حزب، کلید پارتیشن بندی را تنظیم می کند.

Invariants دامنه: پول/تعادل - از طریق مجلات/sagas و تیم های idempointent ؛ به LWW اعتماد نکنید.

3) الگوهای ادغام

Outbox/InBox: ثبت اتمی رویداد در پایگاه داده → انتشار در صف (صندوق پستی) و مصرف بی نظیر با ورود به سیستم پردازش (صندوق ورودی).
DLQ (حروف مرده): پس از N تلاش/خطا - در DLQ + هشدار.
تلاش مجدد/تاخیر: RabbitMQ - TTL + تبادل نامه مرده ؛ کافکا - سعی کنید موضوعات با عقب نشینی.
درخواست/پاسخ: RabbitMQ - 'پاسخ _ به' + 'همبستگی _ id'; کافکا - به ندرت، فقط با الگوهای خاص.
جبران خسارت: sagas بیش از حوادث ؛ هر عملیات یک معکوس دارد.

4) طراحی کلید و توپولوژی

RabbitMQ

مبادلات: «مستقیم»، «موضوع»، «fanout»، «هدر».
کلید مسیریابی: صف hit (s) را مشخص می کند. برای اولویت بندی - صف های جداگانه.
QoS: 'prefetch' (به عنوان مثال 50-300) نرخ تعادل/تاخیر.
Quorum صف: صف های تکراری در قایق ؛ جایگزین کلاسیک منعکس شده است.
جریان: جریان با آفست (کافکا مانند) برای توان بالا/پخش.

کافکا

پارتیشن ها: برنامه ریزی «# پارتیشن ها» در توان هدف و موازی سازی (افزایش سازگار با عقب آسان تر از کاهش است).
کلید: تمام سوابق یک کلید - در یک بخش (تضمین سفارش توسط کلید).
عامل تکرار: 3 برای موضوعات تولیدی، حداقل insync. replicas = 2 '+' acks = all 'برای قابلیت اطمینان.
نگهداری: با زمان/اندازه ؛ تراکم - آخرین مقادیر را با کلید + سنگ قبر برای حذف ذخیره می کند.

5) Retrai، DLQ، idempotency

RabbitMQ

تکرار: هر پیام TTL + DLX (تبادل نامه مرده) با بازپرداخت (به عنوان مثال، 1m → 5m → 15m).
Idempotence: 'correlation _ id '/' message-id' + جدول پیام پردازش شده (TTL) یا دستورات قطعی.
تأییدها: manual 'basic. ACK پس از معامله موفق ؛ اساسی است. 'nack (requeue = false)' в DLQ.

کافکا

تکرار: موضوعات تکراری فردی ؛ مصرف کننده پس از اثر جانبی موفقیت آمیز جبران می شود.
پردازش دقیق یک بار (EOS): تولید کننده "را فعال کنید. idempotence = درست '، تولید کننده/مصرف کننده معامله،' خوانده شده _ متعهد 'در مصرف کننده ؛ سینک (به عنوان مثال، Kafka → Kafka یا Kafka → DB از طریق یک معامله) - همگام سازی منظم.
Dedup: با کلید/کلید idempotent در سمت پایه، و یا از طریق موضوع فشرده شده است.

6) عملکرد و ابعاد

قانون لیتل: L = λ × W

برای گرداب: مورد نیاز همپوشانی 'N سهام (1. 2–1. 5)`.
RabbitMQ prefetch: با «prefetch = 100» شروع کنید و زمان پرواز را اندازه گیری کنید.
پارتیشن کافکا: محاسبه از موازی مصرف کننده مورد نظر و هدف توان (به عنوان مثال، 1 دسته پایدار است 5-20 MB/s در SSD/10GbE).

7) قابلیت مشاهده و هشدار

عمومی:
  • تاخیر/عقب ماندگی (پیام ها/بایت ها)، سن پیام ها (p95/p99)، نرخ خطای پردازش، نرخ DLQ.
  • زمان «publikatsiya → obrabotka» (پایان به پایان).
  • نقشه وابستگی: تولید کننده → کارگزار → مصرف کننده.
RabbitMQ:
  • اتصالات، کانال ها، پیام های غیر فعال، «memory _ alarm»، «disk _ free _ limit»، «طول صف» p95.
  • گزارش ها در Quorum (رهبر، ورود به سیستم قایق، از دست رفته «quorum کافی نیست»).
کافکا:
  • پارتیشن های تحت تکرار، ISR کوچک/گسترش، تغییرات کنترل کننده.
  • خطاهای تولید کننده (timeouts، «درخواست تاخیر»)، تاخیر مصرف کننده در هر گروه/پارتیشن.
  • کارگزار I/O، صفحه کش ضربه، GC، ZooKeeper/سلامت KRaft.

8) ایمنی و چند اجاره ای

TLS رمزگذاری در حمل و نقل، احراز هویت (SASL/PLAIN/SCRAM/OAuth، mTLS).
مجوز: vhost/permissions (RabbitMQ), ACL به موضوعات/گروه ها (کافکا).
سهمیه ها: برای اتصالات، کانال ها، اندازه صف/موضوع، سرعت انتشار/خواندن.
جداسازی توسط محیط (dev/stage/prod) و namespace/vhost.

9) عملیات و تنظیم

RabbitMQ

تبادل پست/صف به گره (CPU/IO سرمایه).
صف های تنبل (پیام به دیسک) برای بافر بزرگ ؛ اجتناب از صف های «داغ» بدون sharding.
Quorum صف برای HA ؛ طرح قایق اندازه ورود به سیستم و دیسک.
سیاست های TTL/length-limit، صف های اولویت فقط برای نیاز واقعی (گران).

مثال سیاست DLQ/TTL (ایده):
bash rabbitmqctl set_policy DLX "^task\." \
'{"dead-letter-exchange":"dlx","message-ttl":60000,"max-length":100000}' --apply-to queues

کافکا

SSD/NVMe، شبکه های سریع ؛ تنظیم سیستم عامل (swappiness کم، محدودیت فایل).
'clacks = all'، 'linger'. ms '(butching)،' فشرده سازی. نوع = zstd '/lz4 برای پهنای باند.
گزینه های مصرف کننده: "حداکثر نظرسنجی. فاصله زمانی. «خانم»، «مکس». نظرسنجی. سوابق، آوردن. حداقل بایت.
حفظ و تراکم - تعادل ذخیره سازی/پخش.

مثال انتشار قابل اعتماد (جاوا، ایده ها):
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 (سینک/منابع)، رجیستری طرح (Avro/JSON/Protobuf) و قابلیت همکاری ('BACKWARD/FORWARD/FULL').
جریانهای کافکا/ksqlDB: عملیات stateful، پنجره ها، aggregates.
RabbitMQ بیل/فدراسیون: انتقال بین خوشه/مراکز.
اپراتورهای K8s: Strimzi (کافکا)، اپراتور خوشه RabbitMQ ؛ بیانیه های GitOps.

11) چک لیست پیاده سازی (0-45 روز)

0-10 روز

موارد استفاده را تعریف کنید: دستورات/وظایف (RabbitMQ)، رویدادها/ممیزی ها (Kafka).
کلیدها را انتخاب کنید («کلید مسیریابی »/« کلید پارتیشن»)، SLO «publikatsiya → obrabotka» را تنظیم کنید.
سیاست های امنیتی پایه (TLS، ACL)، سهمیه ها، DLQ/TTL.

11-25 روز

پیاده سازی صندوق خروجی/صندوق ورودی، idempotency و deadup.
تنظیم عقب نشینی با عقب نشینی (خرگوش: TTL + DLX ؛ کافکا: موضوعات را دوباره امتحان کنید).

داشبورد: تاخیر، سن، نرخ DLQ، تاخیر پایان به پایان ؛ هشدار ها

26-45 روز

تنظیم پهنای باند: prefetch/acks (خرگوش) ؛ پارتیشن/acks/batch (کافکا).
روش DR (معکوس/تکرار)، آزمون شکست گره.
قراردادهای رویداد سند (طرح) و سیاست های قابلیت همکاری.

12) ضد الگوهای

یک ابزار «جهانی» برای همه وظایف.
عدم وجود DLQ/TTL: سموم ابدی (پیام های سمی).
«prefetch» نامحدود → گرسنگی مصرف کننده، رشد p99.
کافکا بدون کلید → از دست دادن سفارش/احزاب داغ به طور پیش فرض.
«دقیقا یک بار»، بدون نیاز واقعی/نظم و انضباط، احساس امنیت کاذب است.
اسرار/ورود به سیستم در کد، بدون TLS/ACL.
سخت افزار از طرح ها/نسخه های پیام بدون رجیستری و مهاجرت.

13) معیارهای بلوغ

SLO تاخیر/سن ≥ 99٪ از زمان انجام می شود ؛ نرخ DLQ تحت کنترل

Idempotency 100٪ از مسیرهای بحرانی را پوشش می دهد ؛ صندوق خروجی/صندوق ورودی اجرا شده است.
نگهداری/تراکم مستند شده است، پخش دوباره مصرف کنندگان را شکست نمی دهد.
هشدارها در ISR/URP (کافکا) و محدودیت های قایق/دیسک (خرگوش) تنظیم می شوند.
قراردادهای رویداد versioned (طرح رجیستری)، سازگاری در 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 کلاس های مختلفی از مشکلات را حل می کنند: دستورات/وظایف و مسیریابی غنی در برابر ورود رویداد طولانی مدت و جریان مقیاس پذیر. موفقیت - در معانی صحیح تحویل، نظم و انضباط از idemotence، کلید متفکر، retrays/DLQ، قابلیت مشاهده و امنیت دقیق. شیوه های مهندسی را در اطراف صف ها - صندوق ورودی/صندوق ورودی، طرح ها و سیاست های GitOps ایجاد کنید - و ادغام شما قابل پیش بینی، مقیاس پذیر و پایدار می شود.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

Telegram
@Gamble_GC
شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.