GH GambleHub

Mesaj kuyrukları: Kafka ve RabbitMQ

Mesaj kuyrukları: Kafka, RabbitMQ

(Bölüm: Teknoloji ve Altyapı)

Kısa Özet

Mesaj kuyrukları, iGaming'deki olay odaklı mimarinin (EDA) temelidir. Oranlar, ödemeler, dolandırıcılıkla mücadele, CRM, bildirimler ve analizlerin mikro hizmetlerini birbirine bağlarlar. Pratikte, iki çözüm sınıfı en yaygın olanıdır:
  • Apache Kafka, taraflar arasında akış, çoğaltma ve yatay ölçeklemeye odaklanan dağıtılmış bir olay günlüğüdür (log).
  • RabbitMQ, esnek yönlendirme (değişim/bağlama), öncelikler, TTL, onaylar ve klasik kuyruk görevlerine sahip bir AMQP kuyruk aracısıdır.

Her iki araç da olgun, ancak farklı sorunları çözüyor: Kafka - ölçeklenebilir akışlar ve analizler için, RabbitMQ - operasyonel görev orkestrasyonu, RPC ve çeşitli yönlendirme için.

IGaming'de uygun olan yer

Kafka - ne zaman seçin:
  • Taraflar arasında yüksek TPS etkinliklerine (bahisler, oyun etkinlikleri, telemetri) ve yatay ölçeğe ihtiyacımız var.
  • Soğuk/sıcak yeniden tüketme (teyp verilerini yeniden okuma), kümeler için tutma ve sıkıştırma (denge, oyuncu durumu) önemlidir.
  • Gerçek zamanlı kümeler için akış süreçlerine (Kafka Streams/ksqlDB/Flink) ihtiyacımız var: turnuva liderleri, sorumlu oyun limitleri, dolandırıcılıkla mücadele sinyalleri.
RabbitMQ - ne zaman seçin:
  • Klasik görev sıralarına ihtiyacımız var: KYC kontrolü, ertelenmiş/tekrarlanan ödemeler, e-posta/SMS/push gönderme, PSP'ye web kitapları.
  • Esnek yönlendirme (konu/doğrudan/fanout), öncelikler, TTL, gecikme, ölü harf ve RPC kalıpları.
  • Sıkı tüketici kısıtlamaları (prefetch/QoS), basit yük yönetimi ve hızlı retrays gereklidir.

Sık sonuç: Etkinlikler ve analizler için Kafka + orkestrasyon ve entegrasyonlar için RabbitMQ.

Veri modeli ve yönlendirme

Kafka

Konular partilere ayrılmıştır, her biri düzenli bir kütüktür.
Mesaj anahtarı, toplu işlemi tanımlar - anahtar içindeki sipariş.
Tüketiciler ofset okur, tüketici grupları işleme ölçeklendirir.
Zamana/hacme göre tutma; Günlük sıkıştırma, anahtarın en son sürümünü saklar.

RabbitMQ

Exchange (direct/fanout/topic/headers) + bağlamalar - mesajlar kuyruklara girer.
Onaylar (ack/nack/request), yayıncı onaylar, öncelikler, TTL, dead-letter (DLX/DLQ).
Yüksek kullanılabilirlik için Quorum kuyrukları (Raft); RAM kaydetmek için tembel kuyruklar.

Teslimat garantileri ve idempotency

En fazla bir kez: retrays yok; Kayıp riski, minimum gecikme.
En az bir kez: varsayılan standart - kopyalar - idempotent işleyicileri (istek/işlem anahtarı, upsert, dedup tablosu, giden kutusu) mümkündür.
Tam olarak bir kez: Kafka'da, bir idempotent üretici + işlem konuları + kabul edilen tüketim birlikte elde edilir, ancak daha sık daha pahalı ve daha zordur; RabbitMQ'da - sınırlı ve kemikli. Gerçek ödeme/bahis akışlarında, en az bir kez + katı idempotans uygulanır.

Idempotency uygulaması:
  • Olay/komut başına benzersiz idempotency-anahtarları (UUID/ULID).
  • + Veri Yakalamayı Değiştir (Debezium) hizmet veritabanındaki giden kutusu deseni - çift yazma önleme.
  • TTL ile ayrı bir satırda Dedup by (key, created_at).

Sipariş/Mesaj Siparişi

Kafka parti içinde düzeni garanti eder. Anahtarı seçin, böylece varlığın tüm "yaşamı" (örneğin, denge için 'player _ id') tek bir anahtarda olur.
RabbitMQ sipariş kesinlikle tekrarlanan teslimatlar/birden fazla tüketici ile garanti edilmez; Sipariş için kritik boru hatları - Kafka'da veya tek aktif tüketici ve akış serileştirme yoluyla daha iyi.

Topikallerin ve kuyrukların tasarımı

Kafka:
  • Granülarite: 'etki alanı. event '(örneğin,' ödemeler. depozito. yaratıldı ').
  • Anahtarlar: Sipariş için 'player _ id', 'account _ id', 'bet _ id'.
  • Gruplar = Hedef TPS'ye göre N (kural: 1 toplu ≈ X mesajları/sn/tüketici); büyüme için stok yapın.
  • Tutma: olaylar - saatler/günler; sıkıştırma - "devletler" için.
RabbitMQ:
  • Etki alanına göre değişim: 'ödemeler. Doğrudan ',' risk. Konu '.
  • Tüketiciler için kuyruklar: 'kyc. denetleyici. q ',' psp. webhooks. yeniden deneyin. Q '.
  • Geri alma için iş kuyruğu gecikmesi başına DLQ.
  • Prefetch, HA için eşzamanlılığı, çekirdek kuyruklarını belirtir.

Hatalar, Retrays ve DLQ'lar

Hataları sınıflandırın: geçici (ağ/PSP 5xx) - retrays; Ölümcül (doğrulama, şema) - hemen DLQ.
Üstel geri dönüş + titreme, geri ödeme sınırı, zehir hapı algılama.
Yeniden deneme kuyruklarını adımlara göre ayırın (5s, 1m, 5m, 1h).
DLQ işleyici: uyarı, iz, manuel ayrıştırma, yama ile yeniden enjeksiyon.

Veri Sözleşmesi ve Şemaları

Avro/Protobuf + Schema Registry kullanın (Kafka için - fiili standart).
Sürüm oluşturma: geriye dönük uyumlu değişiklikler (isteğe bağlı alanlar ekleme), geçişlerin kesilmesinin yasaklanması.
PII alanları - şifreleme/tokenization; GDPR ve yerel düzenlemelere uyun.

İzleme, gözlemlenebilirlik ve SLO

Üreticilerin/tüketicilerin metrikleri: gecikme, verim, hatalar, retrai, işlem süresi.
Logs + tracing (korelasyon kimliği: 'trace _ id', 'message _ id').
SLO: p99-yayın/teslimat gecikmesi, izin verilen tüketici gecikmesi, dosyalardan sonra kurtarma süresi.
DLQ büyümesi, gecikme fazlalığı, partilerde/nisapta düşüş için uyarılar.

Güvenlik ve uyumluluk

TLS aktarım halinde, gizli şifreleme (SOP/Vault), sınırlı ACL/RBAC.
Hassas alanlar için ayrı konular/kuyruklar (ödemeler, KYC).
Yayınların/aboneliklerin denetim günlüğü, anahtarların kod dışında saklanması.
Bölgesel gereksinimler (AB/Türkiye/LatAm): saklama, depolama lokalizasyonu, maskeleme.

Yüksek kullanılabilirlik, hata toleransı ve DR

Kafka:
  • En az 3-5 broker kümesi; Çoğaltma. Faktör ≥ 3.
  • min. insync. kopyalar ve acks = tüm dayanıklı kayıtlar için.
  • DR için Cross Regional Replication (MirrorMaker-2)
RabbitMQ:
  • HA için Quorum kuyrukları, quorum ile çift/tek sayıda düğüm.
  • Veri merkezleri arası çoğaltma için Federasyon/Kürek, DR komut dosyaları.
  • Soğuk/sıcak standı, anahtarlama testleri.

Performans ve ayarlama

Kafka (yapımcı):
  • 'oyalanmak. ms 'и' toplu. 'kasaplık için boyut;' Sıkıştırma. '(lz4/zstd) yazın.
  • 'acks = all', ancak gecikmeyi izleyin; tune 'max. İçeri. Uçuş. Talepler. idempotency ile per. bağlantı.
Kafka (broker/konu):
  • Yeterli partiler; NVMe sürücüler 10/25G ızgara; JVM GC ayarları.
Kafka (tüketici):
  • Doğru grup yönetimi, maks. anket. aralık. Ms ', partileri geri planda durdurun.
RabbitMQ (yapımcı):
  • Yayıncı butches onaylar; Kanallar yeniden kullanılır.
RabbitMQ (kuyruklar/tüketiciler):
  • 'prefetch' (örn. Tedavi süresine göre 50-300); Büyük birikimler için tembel kuyruklar.
  • Düğümlere sıcak kuyruklar gönderin; TCP ayar/dosya tanımlayıcıları.

iGaming için tipik desenler

Alan adı olaylarının güvenilir bir şekilde yayınlanması için Outbox + Kafka (bahis yatırılır, yatırılır).
Entegrasyonlara senkronize istekler için RabbitMQ RPC (KYC belge kontrolü, indirim hesaplaması).
Saga modeli: telafi edici adımlarla olaylar (Kafka) ve takımlar (RabbitMQ) aracılığıyla orkestrasyon.
Fan-out bildirimleri: tek bir olaydan CRM, anti-dolandırıcılık, analitik.
Aşamalı gecikmeler ve DLQ ile akıllı yeniden deneme PSP web kitapları.

Geçiş ve hibrit mimariler

"İşletim sistemi" için RabbitMQ ile başlayın, etkinlikler ve analizler için Kafka ekleyin.
Yinelenen yayınlar: Tam stabilizasyon sağlanana kadar her iki yönde de (Kafka + RabbitMQ) servis, giden kutusu, konektör.
Analitik/akış toplama abonelerini Kafka Streams/ksqlDB'ye kademeli olarak geçirin.

Mini Seçim Kontrol Listesi

1. Yük/TPS> onbinlerce/sn? - Kafka.
2. Bir dergiden olduğu gibi tutma ve yeniden okumaya mı ihtiyacınız var?
3. Esnek yönlendirme, öncelikler, gecikmeli teslimat, RPC?
4. Sıkı anahtar düzeni ve yatay ölçek - Kafka (anahtar/partiler).
5. Basit görevler/eşzamanlılık kontrolü ile iş kew - RabbitMQ.
6. İdeal olarak, bir kombinasyon: Kafka (olaylar) + RabbitMQ (orkestrasyon).

Minimum konfigürasyon örnekleri

Örnek: RabbitMQ'da gecikmeli retrai ve DLQ (politika yoluyla)

İş kuyruğu: 'psp. webhooks. q '

Retras kuyruğu: 'psp. webhooks. yeniden deneyin. 1m. Q '(TTL = 60'lar, DLX operasyonel duruma geri dönüyor)

DLQ: 'psp. webhooks. dlq '

Politikalar (kavramsal olarak):
  • 'psp. webhooks. q '-' x-dead-letter-exchange = psp. yeniden deneyin. değiş tokuş '
  • 'psp. webhooks. yeniden deneyin. 1m. Q '-' x-message-tl = 60000 ',' x-dead-letter-exchange = psp. çalışmak. değiş tokuş '
  • 'psp. webhooks. Dlq '- izleme ve manuel hata ayıklama.

Örnek: Kafka'nın bahis konusu

Konu: 'Bahisler. yerleştirilir. v1 ', partiler: 24, RF = 3, tutma 7 gün.
Mesaj anahtarı 'player _ id' veya 'bet _ id' (sipariş için hangisinin daha önemli olduğunu seçin).
Схема: Protobuf/Avro с 'bet _ id', 'player _ id', 'stake', 'odds', 'ts', 'idempotency _ key'.

Test ve kalite

Sözleşme üretici/tüketici + Şema Kayıt Defterini test eder.
Kaos testleri: düğüm düşmeleri, ağ gecikmeleri, bölünmüş beyin.
Yük, hedef TPS, p99 kontrolü, gecikme büyümesi ve kurtarma ile çalışır.

Özet

Kafka - olay otoyolu ve akış: anahtar siparişi, tutma/sıkıştırma, yüksek TPS, gerçek zamanlı analitik.
RabbitMQ - operasyonel görev kuyruğu: esnek yönlendirme, onaylar, öncelikler, retrays/DLQ, RPC.
İMgaming'de en iyi uygulama tamamlayıcı kullanımdır: Kafka'da olaylar ve analizler, RabbitMQ'da entegrasyon/orkestrasyon görevleri, tek tip şema standartları, idempotency, izleme ve sıkı SLO'lar.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.