GH GambleHub

Xabar navbatlari: RabbitMQ, Kafka

Xabar navbatlari: RabbitMQ, Kafka

1) Qachon nimani tanlash

RabbitMQ (AMQP 0-9-1 / 1. 0, klassik navbatlar, Quorum Queues, Streams)

Quyidagilar uchun mos keladi: RPC/buyruqlar, workflow, qisqa vazifalar, fanout/topic marshrutlash, moslashuvchan tasdiqlash, ustuvorliklarni boshqarish.
Ijobiy tomonlari: marshrutlashning boy semantikasi (exchanges),’basic. qos’(prefetch), per-message TTL/delay, qulay RPC (reply-to) patternlari, oson ishga tushirish.
Kamchiliklar: tarix navbatda saqlanadi, navbatlar/shardlar bo’yicha gorizontal masshtablash; juda katta oqimlarda yuqori Throughput-qiymat.

Apache Kafka (voqealar jurnali, partiyalar, consumer groups)

Quyidagilar uchun mos keladi: voqealar oqimi, audit, event sourcing, ETL/integratsiyalar (Connect), yuqori RPS/MBps, replay/re-protsessing, strim-protsessing (Streams/ksqlDB).
Afzalliklari: uzoq muddatli jurnal, partitsiyalar bo’yicha kattalashtirish, barqaror reple, kalitlarni ixcham qilish.
Minuslar: «pull + partiya» modeli - kichik RPC uchun emas; tartib faqat partiya doirasida; sxemalarni/muvofiqlikni boshqarish - jamoaning majburiyati.

💡 Amaliyot: buyruqlar/taskalar → RabbitMQ, voqealar/audit/ETL → Kafka. Katta tizimlarda ikkalasi ham birga mavjud.

2) Yetkazib berish semantikalari va invariantlar

At-most-once: retrajsiz; tez, yo’qotish xavfi.
At-least-once: retralar bilan; iste’molchining idempotentligini talab qiladi.
Exactly-once: cheklangan sharoitlarda erishish mumkin (Kafka TX + idempotent prodyuser + kelishilgan sink; RabbitMQ - dedup jadvali/idempotent kalitlari orqali).
Tartib: RabbitMQ - navbat tartibi (retralar/ko’p konsumerlarda buzilishi mumkin); Kafka - partiyada tartib, partiyalashning kalitidir.

Domen invariantlari: pul/balanslar - jurnallar/dostonlar va idempotent buyruqlar orqali; LWWga tayanmang.

3) Integratsiya patternlari

Outbox/InBox: hodisani DB → ga atomik yozib qo’yish (outbox) va empotent iste’mol qilish (inbox).
DLQ (o’lik xatlar): N urinishlar/xatolardan keyin - DLQ + alertga.
Retry/Delay: RabbitMQ — TTL + dead-letter exchange; Kafka - backoff bilan retry-topiklar.
Request/Reply: RabbitMQ — `reply_to` + `correlation_id`; Kafka - kamdan-kam hollarda, faqat maxsus patternlar bilan.
Kompensatsiyalar: voqealar ustidagi dostonlar; har bir operatsiya teskari bo’ladi.

4) Kalitlar va topologiyalarni loyihalash

RabbitMQ

Exchanges: `direct`, `topic`, `fanout`, `headers`.
Routing key: navbat (lar) ni aniqlaydi. Ustuvorlik uchun - alohida navbatlar.
QoS:’prefetch’(masalan, 50-300) tezlik/latentlikni muvozanatlaydi.
Quorum Queues: Raft uchun takrorlanadigan navbatlar; mirrored classic almashtirish.
Streams: high-throughput/replay uchun ofset oqimi (Kafka kabi).

Kafka

Topic → partitions:’#partitions’ni maqsadli throughput va parallelizm bo’yicha rejalashtiring.
Key: bitta kalitning barcha yozuvlari bitta partiyada (kalit tartibining kafolati).
Replication factor: 3 uchun samarali mavzular,’min. insync. replicas = 2’+’acks = all’ishonchlilik uchun.
Retention: vaqt/oʻlcham boʻyicha; compaction - oʻchirish uchun + tombstones kaliti boʻyicha oxirgi qiymatlarni saqlaydi.

5) Retrai, DLQ, idempotentlik

RabbitMQ

Takrorlash: per-message TTL + DLX (dead-letter exchange) bilan backoff (masalan, 1m → 5m → 15m).
Idempotentlik:’correlation _ id ’/’ message-id’+ qayta ishlangan xabarlar jadvali (TTL) yoki determinizatsiya qilingan buyruqlar.
Tasdiqlash: manual’basic. ack’muvaffaqiyatli tranzaksiyadan keyin;’basic. nack(requeue=false)` в DLQ.

Kafka

Takrorlar: alohida retry-topiklar; consumer muvaffaqiyatli side-effect.
Exactly-once processing (EOS): Producer `enable. idempotence = true’, tranzaksion producer/consumer,’read _ committed’iste’molchida; sink (masalan, Kafka → Kafka yoki Kafka → DB tranzaksiya orqali) - ehtiyotkorlik bilan sinxronlashtirish.
Dedup: baza tomonida yoki compacted topic orqali.

6) Unumdorlik va o’lchash

Littl qonuni: ’L = λ × W ’

Vorkerlar uchun: talab etiladigan parallellik’N zaxirasi (1. 2–1. 5)`.
RabbitMQ prefetch:’prefetch = 100’bilan boshlang va p99/in-flight vaqtini o’lchang.
Kafka partitions: istalgan consumer-parallelizm va throughput maqsadlari hisobi (masalan, SSD/10GbE uchun 1 partiya barqaror 5-20 MB/s).

7) Kuzatish va alertlar

Umumiy:
  • Lag/Backlog (xabarlar/bayt), age xabarlar (p95/p99), error-rate ishlanmalar, DLQ-rate.
  • «Nashr → qayta ishlash» (end-to-end) vaqti.
  • Qaramlik xaritasi: prodyuser → broker → konsumer.
RabbitMQ:
  • Ulanishlar, kanallar,’memory _ alarm’,’disk _ free _ limit’,’queue length’p95.
  • Quorum bo’yicha hisobotlar (leader, Raft log, xatolar’quorum not enough’).
Kafka:
  • Under-replicated partitions, ISR shrink/expand, controller changes.
  • Producer errors (timeouts, `request latency`), consumer lag per group/partition.
  • Broker I/O, page cache hit, GC, ZooKeeper/KRaft health.

8) Xavfsizlik va ko’p tenantlik

TLS in-transit shifrlash, autentifikatsiya (SASL/PLAIN/SCRAM/OAuth, mTLS).
Avtorizatsiya: vhost/permissions (RabbitMQ), topiklar/guruhlar uchun ACL (Kafka).
Kvotalar: ulanishlar, kanallar, navbat/topika hajmi, nashr etish/o’qish tezligi.
Chorshanba (dev/stage/prod) va namespace/vhost bo’yicha izolyatsiya.

9) Ekspluatatsiya va tyuning

RabbitMQ

Uzellarga (CPU/IO kapatsiteti) exchanges/queues tarqating.
Katta buferlar uchun Lazy queues (disk xabarlari); shardingsiz «issiq» navbatlardan qoching.
HA uchun Quorum Queues; Raft jurnali va disk oʻlchamini rejalashtiring.
TTL/length-limit, priority navbat siyosati faqat real ehtiyojda (qimmat).

DLQ/TTL siyosatining namunasi (g’oya):
bash rabbitmqctl set_policy DLX "^task\." \
'{"dead-letter-exchange":"dlx","message-ttl":60000,"max-length":100000}' --apply-to queues

Kafka

SSD/NVMe, tezkor tarmoqlar; OS-tyuning (past swappiness, fayl limitlari).
`acks=all`, `linger. ms’(batching),’compression. type = zstd ’/lz4 uchun.
Isteʼmolchi parametrlari:’max. poll. interval. ms`, `max. poll. records`, `fetch. min. bytes`.
Retention va compaction - saqlash/replay balansi.

Ishonchli nashr namunasi (Java, gʻoyalar):
java props. put("acks","all");
props. put("enable. idempotence", "true");
props. put("max. in. flight. requests. per. connection","1");
props. put("retries","10");

10) Integratsiya va ekotizim

Kafka Connect (Sinks/Sources), Schema Registry (Euro/JSON/Protobuf) va muvofiqlik (’BACKWARD/FORWARD/FULL’).
Kafka Streams/ksqlDB: stateful operatsiyalari, oynalar, agregatlar.
RabbitMQ Shovel/Federation: klaster/markazlar orasiga koʻchirish.
K8s operatorlari: Strimzi (Kafka), RabbitMQ Cluster Operator; GitOps manifestlari.

11) Joriy etish chek-varaqasi (0-45 kun)

0-10 kun

Use-case’larni aniqlash: buyruqlar/taskalar (RabbitMQ), voqealar/audit (Kafka).
Kalitlarni tanlash (’routing key ’/’ partition key’), «nashr → qayta ishlash» SLOni oʻrnatish.
Asosiy xavfsizlik siyosati (TLS, ACL), kvotalar, DLQ/TTL.

11-25 kun

outbox/inbox, idempotentlik va dedupni joriy etish.
Backoff (Rabbit: TTL + DLX; Kafka: retry topics).
Dashbordlar: lag, age, DLQ-rate, end-to-end latency; alertlar.

26-45 kun

Tyuning: prefetch/acks (Rabbit); partitions/acks/batch (Kafka).
DR-protseduralar (ko’zgu/replikatsiya), uzellarni ishdan chiqarish testlari.
Voqealar kontraktlarini (sxemalarini) va muvofiqlik siyosatini hujjatlashtirish.

12) Anti-patternlar

Barcha vazifalar uchun bitta «universal» vosita.
DLQ/TTL yo’qligi: abadiy zaharlovchilar (poison messages).
Cheksiz’prefetch’→ iste’molchilarning ochligi, o’sish p99.
Kafka kalitsiz → tartibini yoʻqotish/andoza issiq partiyalar.
«Exactly-once» haqiqiy ehtiyojsiz/intizomsiz - soxta xavfsizlik hissi.
Koddagi sirlar/loginlar, TLS/ACLsiz.
Registry va migratsiyasiz xardkod sxemalari/xabarlarning versiyalari.

13) Etuklik metrikasi

Lag/age SLO 99% ≥ bajariladi; DLQ-rate nazorat ostida.
Idempotentlik kritik yo’llarning 100 foizini qoplaydi; outbox/inbox joriy etildi.
Retention/compaction hujjatlashtirilgan.
ISR/URP (Kafka) va Raft/disk limitlari (Rabbit) uchun alertlar sozlangan.
Voqealar kontraktlari versionatsiya qilinadi (Schema Registry), muvofiqlik CI da sinovdan o’tkaziladi.
Muntazam game-days: uzel/broker/AZ nosozligi, tiklanishni tekshirish.

14) Konfiguratsiya namunalari (ma’lumot)

RabbitMQ: prefetch va tasdiqlash (pseudocode):
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
Kafka Consumer (g’oyalar):
java props. put("enable. auto. commit","false");
props. put("isolation. level","read_committed"); // при EOS
//...
poll -> process(idempotent) -> commitSync()

15) Xulosa

RabbitMQ va Kafka turli xil vazifalarni hal qiladi: buyruqlar/taskalar va uzoq muddatli voqealar jurnali va ko’paytiriladigan strimingga qarshi boy marshrut. Muvaffaqiyat - to’g’ri yetkazib berish semantikalari, idempotentlik intizomi, puxta o’ylangan kalitlash, retrajlar/DLQ, kuzatuv va qat’iy xavfsizlikda. Navbatlar atrofida muhandislik amaliyotini - outbox/inbox, sxemalar va GitOps siyosatini yarating - va sizning integratsiyangiz oldindan aytib bo’ladigan, ko’paytiriladigan va barqaror bo’ladi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.