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.
- 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.
- 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.
- 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)
- 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ı.
- Yeterli partiler; NVMe sürücüler 10/25G ızgara; JVM GC ayarları.
- Doğru grup yönetimi, maks. anket. aralık. Ms ', partileri geri planda durdurun.
- Yayıncı butches onaylar; Kanallar yeniden kullanılır.
- '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.