GH GambleHub

Mesaj növbələri: Kafka və RabbitMQ

Mesaj növbələri: Kafka, RabbitMQ

(Bölmə: Texnologiya və Infrastruktur)

Qısa xülasə

Mesaj növbələri - iGaming-də hadisə yönümlü arxitekturanın (EDA) təməlidir. Onlar bahis mikroservisləri, ödənişlər, antifrod, CRM, notifikasiya və analitikləri birləşdirirlər. Praktikada ən çox iki sinif həllər var:
  • Apache Kafka - paylanmış hadisə jurnalı (log), axın emalı, replikasiya və partisiyalar vasitəsilə üfüqi skeylinqə yönəlib.
  • RabbitMQ çevik marşrutlaşdırma (exchanges/bindings), prioritetlər, TTL, təsdiqlər və klassik növbə tapşırıqları ilə AMQP növbə brokeridir.

Hər iki alət yetkin, lakin müxtəlif problemləri həll edir: Kafka - ölçülə bilən axınlar və analitiklər üçün, RabbitMQ - tapşırıqların operativ orkestri, RPC və müxtəlif marşrutlaşdırma üçün.

Harada iGaming uyğun

Kafka - seçmək zaman:
  • Yüksək TPS hadisələrinə (bahislər, oyun hadisələri, telemetriya) və partiyalar vasitəsilə üfüqi skeylə ehtiyacınız var.
  • Aqreqatlar üçün soyuq/isti re-konsum (lent məlumatlarının təkrar oxunması), retenşn və kompakşn (balans, oyunçu vəziyyəti) vacibdir.
  • realtime aqreqatları üçün axın prosesləri (Kafka Streams/ksqlDB/Flink) lazımdır: turnirin liderləri, məsuliyyətli oyunun limitləri, antifrod siqnalları.
RabbitMQ - seçmək zaman:
  • Klassik vəzifə növbələri lazımdır: KYC-yoxlama, gecikmiş/təkrar ödənişlər, e-mail/SMS/push, PSP-yə webhooks.
  • Çevik marşrutlaşdırma (topic/direct/fanout), prioritetlər, TTL, delay, dead-letter və RPC nümunələri.
  • Ciddi per-consumer məhdudiyyətləri (prefetch/QoS), sadə yük nəzarəti və sürətli retrajlar tələb olunur.

Tez-tez nəticə: Hadisə və analitika üçün Kafka + Orkestr və inteqrasiya üçün RabbitMQ.

Data modeli və marşrutlaşdırma

Kafka

Topiklər → partiyaya bölünür, hər biri nizamlı bir log.
Mesaj açarı partiyanı müəyyən edir → açar daxilində nizam.
Konsumerlər offset oxuyur, konsumer qrupları emalı genişləndirir.
Retenshn vaxt/həcm; log compaction açarın ən son versiyasını saxlayır.

RabbitMQ

Exchanges (direct/fanout/topic/headers) + bindings → mesajlar queues daxil.
Təsdiq (ack/nack/requeue), publisher confirms, priorities, TTL, dead-letter (DLX/DLQ).
Quorum queues (Raft) yüksək mövcudluğu üçün; RAM qənaət üçün lazy queues.

Çatdırılma və idempotentlik zəmanətləri

At-most-once: retrajsız; itki riski, minimum gecikmə.
At-least-once: standart default → dublikatlar mümkündür → idempotent hendlers (sorğu/əməliyyat açarı, upsert, dedup-cədvəl, outbox).
Exactly-once: Kafka-da bir dəstə idempotent prodüser + əməliyyat topikləri + razılaşdırılmış istehlak əldə edilir, lakin daha bahalı və daha çətin; RabbitMQ - məhdud və sümüklü. Real ödəniş/mərc axınlarında at-least-once + ciddi idempotentlik tətbiq olunur.

İdempotentlik təcrübəsi:
  • Unikal idempotency-keys (UUID/ULID) hadisə/komanda üçün.
  • DB xidmətində Outbox-pattern + Change Data Capture (Debezium) → «ikiqat yazının» qarşısının alınması.
  • Dedup po (key, created_at) TTL ilə ayrı bir store.

Sifariş/Mesaj qaydası

Kafka partiya daxilində nizam-intizama zəmanət verir. Açarı elə seçin ki, mahiyyətin bütün "həyatı 'bir açarda olsun (məsələn, balans üçün 'player _ id').
RabbitMQ sifariş ciddi təkrar çatdırılması/bir neçə konsumer zəmanət deyil; Sifariş üçün kritik paylaynlar - Kafka və ya single-active consumer və serial axını vasitəsilə daha yaxşıdır.

Top və növbələrin dizaynı

Kafka:
  • Qranulyarlıq: 'domain. event '(məsələn,' payments. deposit. created`).
  • Açarlar: 'player _ id', 'account _ id', 'bet _ id' sifariş üçün.
  • Partiya = N hədəf TPS (qayda: 1 partiya ≈ X mesaj/san/konsumer); artım üçün ehtiyat qoymaq.
  • Retenshn: hadisələr - saat/gün; kompakşn - «hallar» üçün.
RabbitMQ:
  • Domenlər üzrə Exchanges: 'payments. direct`, `risk. topic`.
  • İstehlakçılar üçün növbələr: 'kyc. checker. q`, `psp. webhooks. retry. q`.
  • Hər iş növbəsi üçün DLQ; backoff üçün delay.
  • Prefetch paralelliyi təyin edir, quorum növbələri HA üçün.

Səhvlər, retralar və DLQ

Səhvləri təsnif edin: müvəqqəti (şəbəkə/PSP 5xx) → retray; ölümcül (validasiya, sxem) → dərhal DLQ.
Exponential backoff + jitter, retraj limiti, «poison-pill» aşkarlanması.
Ayrı-ayrı retry-queues (5s, 1m, 5m, 1h).
DLQ prosessor: alert, trace, əl təhlili, patch ilə reinject.

Məlumat müqaviləsi və sxemlər

Euro/Protobuf + Schema Registry istifadə edin (Kafka üçün - de-fakto standart).
Version: backward-compatible dəyişikliklər (isteğe bağlı sahələr əlavə), sındırıcı miqrasiya qadağa.
PII sahələri - şifrələmə/tokenizasiya; GDPR və yerli qaydalara riayət edin.

Monitorinq, müşahidə və SLO

Prodüser/konsumerlərin metrikası: lag, throughput, səhvlər, retrajlar, emal vaxtı.
Log + Trace (korrelyasiya ID: 'trace _ id', 'message _ id').
SLO: p99-gizli nəşr/çatdırılma, məqbul consumer lag, fayllardan sonra bərpa vaxtı.
DLQ artımı, lag artımı, partiyalar/kvorum azalması üçün alertlər.

Təhlükəsizlik və uyğunluq

Tranzitdə TLS, gizli şifrələmə (SOPS/Vault), ACL/RBAC ilə məhdudlaşır.
Həssas domenlər üçün ayrı-ayrı topiklər/növbələr (ödənişlər, KYC).
Audit-log nəşrlər/abunələr, koddan kənar açarların saxlanması.
Regional tələblər (EU/Türkiyə/LatAm): retenshn, saxlama lokalizasiyası, maskalanma.

Yüksək mövcudluq, arıza müqaviməti və DR

Kafka:
  • Klaster 3-5 broker minimum; replication. factor ≥ 3.
  • min. insync. replicas və acks = bütün güclü qeydlər üçün.
  • DR üçün cross-regional replikasiyalar (MirrorMaker-2).
RabbitMQ:
  • HA üçün quorum queues, kvorum ilə cüt/tək nod.
  • Federation/Shovel üçün ara DPC replikasiya, DR ssenariləri.
  • Soyuq/isti stand, keçid testləri.

Performans və sazlama

Kafka (prodüser):
  • `linger. ms` и `batch. batching üçün 'size;' compression. type` (lz4/zstd).
  • 'acks = all', lakin gizli izləmək; tyun 'max. in. flight. requests. per. connection 'idempotentlik ilə.
Kafka (broker/topik):
  • Kifayət qədər partiyalar; NVMe diskləri; 10/25G şəbəkəsi; GC-JVM parametrləri.
Kafka (konsumer):
  • Düzgün group management, 'max. poll. interval. ms ', backoff partiyalar fasilə.
RabbitMQ (prodüser):
  • Publisher confirms batches; channels yenidən istifadə.
RabbitMQ (növbələr/konsumerlər):
  • emal vaxtına görə 'prefetch' (məsələn, 50-300); böyük bacclogs üçün lazy queues.
  • Qaynar növbələri nodlara çatdırın; tyun TSR/fayl deskriptorları.

iGaming üçün standart nümunələr

Domen hadisələrinin etibarlı yayımı üçün Outbox + Kafka (depozit depozit yerləşdirilib).
İnteqrasiya üçün sinxron sorğular üçün RabbitMQ RPC (KYC sənəd yoxlama, bonus hesablanması).
Saga-pattern: kompensasiya addımları ilə hadisələr (Kafka) və komandalar (RabbitMQ) vasitəsilə orkestr.
Fan-out bildirişləri: bir hadisədən → CRM, antifrod, analitika.
Proqressiv gecikmələr və DLQ ilə Smart-retry PSP vebhuk.

Miqrasiya və hibrid arxitekturalar

«Əməliyyat» üçün RabbitMQ ilə başlayın, hadisələr və analitika üçün Kafka əlavə edin.
Postları təkrarlayın: tam sabitləşməyə qədər xidmət → outbox → konnektor (Kafka + RabbitMQ).
Tədricən analitik/axın toplama abunəçilərini Kafka Streams/ksqlDB-yə köçürün.

Mini check-list seçimi

1. Yük/TPS> on minlərlə/saniyə? → Kafka.
2. Bir jurnal kimi retenshn və təkrar oxumaq lazımdır? → Kafka.
3. Çevik marşrutlaşdırma, prioritetlər, gecikmiş çatdırılma, RPC? → RabbitMQ.
4. Sərt açar qaydası və üfüqi skeyl → Kafka (açar/partiya).
5. Paralelliyi idarə edən sadə tapşırıqlar/work-kyu → RabbitMQ.
6. İdeal olaraq - kombinasiya: Kafka (hadisələr) + RabbitMQ (orkestr).

Minimum konfiqurasiya nümunələri

Nümunə: RabbitMQ-da saxlanılan retrajlar və DLQ (policy vasitəsilə)

İş növbəsi: 'psp. webhooks. q`

Retras növbəsi: 'psp. webhooks. retry. 1m. q '(TTL = 60s, DLX geri iş göstərir)

DLQ: `psp. webhooks. dlq`

Siyasətçilər (konseptual):
  • `psp. webhooks. q` → `x-dead-letter-exchange=psp. retry. exchange`
  • `psp. webhooks. retry. 1m. q` → `x-message-ttl=60000`, `x-dead-letter-exchange=psp. work. exchange`
  • `psp. webhooks. dlq '→ monitorinq və əl təhlili.

Nümunə: bahislər üçün Kafka topik

Topik: 'bets. placed. v1 ', partiyalar: 24, RF = 3, retenshn 7 gün.
Mesaj açarı: 'player _ id' və ya 'bet _ id' (sifariş üçün daha vacib olanı seçin).
Схема: Protobuf/Avro с `bet_id`, `player_id`, `stake`, `odds`, `ts`, `idempotency_key`.

Test və keyfiyyət

Contract testləri prodüser/məsləhətçi + sxemlərin yoxlanılması (Schema Registry).
Chaos testləri: nod düşməsi, şəbəkə gecikmələri, split-brain.
Hədəf TPS, p99 yoxlama, lag böyüməsi və bərpa ilə yükləmə keçidləri.

Nəticələr

Kafka - hadisələr və axın əsas: açar qaydası, retenshn/kompakşn, yüksək TPS, real vaxt analitikası.
RabbitMQ - tapşırıqların əməliyyat növbəsi: çevik marşrutlaşdırma, təsdiqləmə, prioritetlər, retralar/DLQ, RPC.
iGaming-də ən yaxşı təcrübə tamamlayıcı istifadədir: Kafka-da hadisələr və analitika, vahid sxem standartları, idempotentlik, monitorinq və ciddi SLO ilə RabbitMQ-da inteqrasiya/orkestr vəzifələri.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.