GH GambleHub

Mesaj kuyrukları: RabbitMQ, Kafka

Mesaj kuyrukları: RabbitMQ, Kafka

1) Ne zaman seçilir

RabbitMQ (AMQP 0-9-1/1) 0, klasik kuyruklar, Çekirdek Kuyrukları, Akışlar)

Şunlar için uygundur: RPC/komutlar, iş akışı, kısa görevler, fanout/konu yönlendirme, esnek onaylar, öncelik kontrolü.
Artıları: zengin yönlendirme semantiği (borsalar), 'temel. Qos '(prefetch), mesaj başına TTL/gecikme, uygun RPC (reply-to) desenleri, kolay başlangıç.
Eksileri: Kuyrukta depolanan geçmiş, kuyruklar/parçalar arasında yatay olarak ölçeklendirilmiş; Çok büyük akışlarla yüksek verim maliyeti.

Apache Kafka (etkinlik günlüğü, partiler, tüketici grupları)

Şunlar için uygundur: Olay akışları, denetim, olay kaynak kullanımı, ETL/entegrasyonlar (Connect), yüksek RPS/MBps, tekrar oynatma/yeniden işleme, akış işleme (Streams/ksqlDB).
Artıları: uzun vadeli dergi, taraflara göre ölçeklendirme, istikrarlı tekrar, anahtar sıkıştırma.
Eksileri: çekme + partiler modeli - küçük RPC için değil; düzen sadece parti içinde; Şema yönetimi/birlikte çalışabilirlik ekibin sorumluluğundadır.

💡 Alıştırma: komutlar/görevler - RabbitMQ, olaylar/denetim/ETL - Kafka. Büyük sistemlerde, her ikisi de bir arada bulunur.

2) Teslimat semantiği ve değişmezleri

En fazla bir kez: retrays yok; Hızlı, kaybetme riski.
En azından bir kez: geri çekilmelerle; Tüketici idempotency gerektirir.
Tam olarak bir kez: sınırlı koşullarda ulaşılabilir (Kafka TX + idempotent üretici + tutarlı lavabo; RabbitMQ - veri tekilleştirme tablosu/idempotent anahtarları aracılığıyla).
Sipariş: RabbitMQ - kuyruk sırası (retras/çoklu tüketicilerle ihlal edilebilir); Kafka - partide düzen, anahtar bölümlemeyi ayarlar.

Alan değişmezleri: para/bakiyeler - dergiler/sagalar ve idempotent ekipleri aracılığıyla; LWW'ye güvenmeyin.

3) Entegrasyon kalıpları

Outbox/InBox: Veritabanındaki olayın atomik kaydı - işleme günlüğü (gelen kutusu) ile kuyruğa (giden kutusu) ve idempotent tüketimine yayınlama.
DLQ (ölü harfler): N denemeden/hatadan sonra - DLQ + uyarısında.
Retry/Delay: RabbitMQ - TTL + dead-letter exchange; Kafka - backoff ile konuları yeniden deneyin.
İstek/Yanıt: RabbitMQ - 'reply _ to' + 'correlation _ id'; Kafka - nadiren, sadece özel desenlerle.
Telafiler: olaylar üzerine destanlar; Her işlemin bir tersi vardır.

4) Anahtar ve Topoloji Tasarımı

RabbitMQ

Değiş tokuşlar: 'doğrudan', 'konu', 'fanout', 'başlıklar'.
Yönlendirme anahtarı: Kuyruk vuruş (lar) ını belirtir. Önceliklendirme için - ayrı kuyruklar.
QoS: 'prefetch' (örn. 50-300) denge oranı/gecikme.
Quorum Kuyrukları: Raft'ta çoğaltılmış kuyruklar; yedek aynalı klasik.
Akışlar: yüksek verimli/yeniden oynatma için ofsetlerle (Kafka benzeri) akış.

Kafka

Konu - bölümler: Hedef işlem hacmi ve paralellik üzerinde '# bölümleri' planlayın (geriye dönük uyumlu artış, azalmadan daha kolaydır).
Anahtar: Bir anahtarın tüm kayıtları - bir bölümde (anahtarla sipariş garantisi).
Çoğaltma faktörü: Üretken konular için 3, 'min. insync. Kopyalar = 2 '+' acks = all 'güvenilirlik için.
Tutma: zamana/boyuta göre; Sıkıştırma - son değerleri silme için anahtar + mezar taşlarına göre saklar.

5) Retrai, DLQ, idempotency

RabbitMQ

Tekrarlar: mesaj başına TTL + DLX (dead-letter exchange) ve backoff (örneğin 1m - 5m - 15m).
Idempotence: 'correlation _ id'/' message-id' + işlenmiş ileti tablosu (TTL) veya deterministik komutlar.
Onaylar: manüel 'temel. ack 'başarılı bir işlemden sonra;' temel. nack (requeue = false) 'в DLQ.

Kafka

Tekrarlar: bireysel yeniden deneme konuları; Tüketici başarılı yan etkiden sonra mahsup taahhüt eder.
Tam bir kez işleme (EOS): Producer 'enable. Idempotence = true ', işlemsel üretici/tüketici, tüketici üzerinde' read _ committed '; Lavabo (örneğin, Kafka? Kafka veya Kafka? Bir işlem yoluyla DB) - düzgün bir şekilde senkronize edin.
Dedup: Temel taraftaki anahtar/idempotent anahtar ile veya sıkıştırılmış konu aracılığıyla.

6) Performans ve boyut

Küçük Yasası: 'L = λ × W'

Vorker için: gerekli örtüşen 'N stok (1. 2–1. 5)`.
RabbitMQ prefetch: 'Prefetch = 100'ile başlayın ve p99/uçuş süresini ölçün.
Kafka bölümleri: istenen tüketici paralelliği ve verim hedefinden hesaplama (örneğin, 1 parti SSD/10GbE'de 5-20 MB/s sabittir).

7) Gözlemlenebilirlik ve uyarılar

Genel:
  • Lag/Backlog (mesajlar/baytlar), mesajların yaşı (p95/p99), işleme hata oranı, DLQ oranı.
  • Zaman "publikatsiya ^ obrabotka" (uçtan uca).
  • Bağımlılık haritası: producer - broker - consumer.
RabbitMQ:
  • Bağlantılar, kanallar, sıkıştırılmamış mesajlar, 'memory _ alarm', 'disk _ free _ limit', 'queue length' p95.
  • Quorum raporları (lider, Raft günlüğü, 'quorum yeterli değil' özlüyor).
Kafka:
  • Az çoğaltılmış bölümler, ISR küçültme/genişletme, denetleyici değişiklikleri.
  • Üretici hataları (zaman aşımları, 'istek gecikmesi'), grup/bölüm başına tüketici gecikmesi.
  • Broker I/O, sayfa önbellek hit, GC, ZooKeeper/KRaft sağlık.

8) Güvenlik ve çoklu kiracılık

TLS transit şifreleme, kimlik doğrulama (SASL/PLAIN/SCRAM/OAuth, mTLS).
Yetkilendirme: Vhost/izinler (RabbitMQ), konulara/gruplara ACL (Kafka).
Kotalar: bağlantılar, kanallar, kuyruk boyutu/konu, yayınlama/okuma hızı için.
Ortamlara (dev/stage/prod) ve ad alanına/vhost'a göre izolasyon.

9) Çalıştırma ve ayarlama

RabbitMQ

Düğümlere yapılan değişimler/kuyruklar (CPU/IO sermayesi).
Büyük arabellekler için tembel kuyruklar (diske iletiler); Sharding olmadan "sıcak" kuyruklardan kaçının.
HA için Quorum Kuyrukları; Plan Sal günlük boyutu ve disk.
TTL/uzunluk sınırı politikaları, yalnızca gerçek ihtiyaç için öncelik kuyrukları (pahalı).

DLQ/TTL politikası örneği (fikir):
bash rabbitmqctl set_policy DLX "^task\." \
'{"dead-letter-exchange":"dlx","message-ttl":60000,"max-length":100000}' --apply-to queues

Kafka

SSD/NVMe, hızlı ağlar; İşletim sistemi ayarı (swappiness düşük, dosya sınırları).
'acks = all', 'linger. ms '(butching),' sıkıştırma. Bant genişliği için tip = zstd'/lz4.
Tüketici seçenekleri: 'max. anket. aralık. ms ',' maks. anket. Kayıtlar ',' getir. min. bytes '.
Tutma ve sıkıştırma - depolama dengesi/yeniden oynatma.

Güvenilir yayıncılık örneği (Java, fikirler):
java props. put("acks","all");
props. put("enable. idempotence", "true");
props. put("max. in. flight. requests. per. connection","1");
props. put("retries","10");

10) Entegrasyonlar ve ekosistem

Kafka Connect (Lavabolar/Kaynaklar), Schema Registry (Avro/JSON/Protobuf) ve birlikte çalışabilirlik ('BACKWARD/FORWARD/FULL').
Kafka Akışları/ksqlDB: durumsal işlemler, pencereler, toplamlar.
RabbitMQ Kürek/Federasyon: kümeler/merkezler arasında transfer.
K8s operatörleri: Strimzi (Kafka), RabbitMQ Küme Operatörü; GitOps manifestoları.

11) Uygulama kontrol listesi (0-45 gün)

0-10 gün

Kullanım durumlarını tanımlayın: komutlar/görevler (RabbitMQ), olaylar/denetimler (Kafka).
Anahtarları seçin ('yönlendirme anahtarı'/' bölüm anahtarı'), SLO'yu "publikatsiya> obrabotka'olarak ayarlayın.
Temel güvenlik politikaları (TLS, ACL), kotalar, DLQ/TTL.

11-25 gün

Giden kutusu/gelen kutusu, idempotency ve deadup uygulayın.
Backoff ile retreas kurun (Tavşan: TTL + DLX; Kafka: konuları tekrar dene).
Panolar: gecikme, yaş, DLQ hızı, uçtan uca gecikme; Uyarılar.

26-45 gün

Ayar bant genişliği: prefetch/acks (Tavşan); Partitions/acks/batch (Kafka).
DR prosedürleri (yansıtma/çoğaltma), düğüm hatası testleri.
Belge olay sözleşmeleri (şemalar) ve birlikte çalışabilirlik ilkeleri.

12) Anti-desenler

Tüm görevler için bir "evrensel" araç.
DLQ/TTL yokluğu: sonsuz zehirler (zehirli mesajlar).
Sınırsız 'prefetch' - tüketici açlığı, p99 büyümesi.
Anahtarsız Kafka - varsayılan olarak sipariş kaybı/sıcak partiler.
"Tam bir kez", gerçek bir ihtiyaç/disiplin olmadan, yanlış bir güvenlik duygusudur.
Koddaki sırlar/girişler, TLS/ACL olmadan.
Kayıt Defteri ve geçişleri olmayan mesajların şemalarının/sürümlerinin sabit kodu.

13) Olgunluk metrikleri

Lag/age SLO, zamanın %99 ≥ gerçekleştirilir; DLQ oranı kontrol altında.
Idempotency, kritik yolların %100'ünü kapsar; Giden kutusu/gelen kutusu uygulandı.
Tutma/sıkıştırma belgelenir, tekrar oynatma tüketicileri kırmaz.
ISR/URP (Kafka) ve Raft/disk limitlerindeki (Rabbit) uyarılar ayarlanır.
Olay sözleşmeleri sürümlüdür (Schema Registry), uyumluluk CI'da test edilir.
Normal oyun günleri: düğüm/broker/AZ hatası, kurtarma kontrolü.

14) Yapılandırma örnekleri (özet)

RabbitMQ: önek ve onaylar (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 (fikirler):
java props. put("enable. auto. commit","false");
props. put("isolation. level","read_committed"); // при EOS
//...
poll -> process(idempotent) -> commitSync()

15) Sonuç

RabbitMQ ve Kafka farklı problem sınıflarını çözer: komutlar/görevler ve uzun süreli olay günlüğü ve ölçeklenebilir akışa karşı zengin yönlendirme. Başarı - doğru teslimat semantiği, idempotence disiplini, düşünceli anahtarlama, retrays/DLQ, gözlemlenebilirlik ve sıkı güvenlik. Kuyruklar etrafında mühendislik uygulamaları oluşturun - giden kutusu/gelen kutusu, şemalar ve GitOps politikaları - ve entegrasyonunuz öngörülebilir, ölçeklenebilir ve sürdürülebilir hale gelir.

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.