Mesaj brokerleri
1) Neden mesaj brokerleri
Komisyoncu üreticileri ve tüketicileri zamana/hıza/güvenilirliğe göre ayırır:- Tepe tamponlama ve yumuşatma, backprescher.
- Ölçeklemeyi bağımsız olarak okuma/yazma.
- Gözlemlenebilirlik ve olayların tekrarı.
- Mimari desenler: olay odaklı, CQRS, olay kaynağı, giden kutusu/gelen kutusu.
2) Temel modeller ve terimler
2. 1 Kafka (günlük modeli)
Konu - taraflar (sipariş edilen günlükler) - tüketicilerden gelen ofsetler.
Tüketici Grubu: Paralellik, parti dengeleme okuyun.
Zamana/hacme göre tutma; Anahtar sıkıştırma.
Semantik: minimum - en az bir kez, ayarlarla - etkili bir şekilde tam bir kez (idempotent üreticiler + işlemler).
Sipariş: Parti içinde garanti edilir.
2. 2 NATS (konular, düşük gecikme süresi)
Hiyerarşi ve joker karakterler içeren konu (tema) ('foo. ',' foo. >`).
Modlar: pub/sub, kuyruk grupları (iş dağıtımı ile fan çıkışı), istek-cevap (hızlı RPC).
Çekirdek NATS - geçici, ultra düşük gecikme; JetStream - kalıcılık/tutma/tekrarlar.
Sipariş: en iyi çaba, güçlü bir küresel garanti yok; JetStream ile - akışta sipariş, ancak arıza durumunda nadir yeniden sıralama mümkündür.
3) Teslimat semantiği ve tutarlılık
İdempotans ve dedup, Kafka'da "tam olarak bir kez" olsa bile, uygulamanın/çürüğün sorumluluğundadır.
4) Sipariş, bölümleme ve anahtarlar
Kafka
Mesaj anahtarının seçimi partiyi belirler - güçlü yerel düzen.
Ключи: 'aggregate _ id', 'tenant _ id', 'order _ id'. Sıcak tuşlardan kaçının.
Denge: N taraf ≈ okuma paralellik düzeyi.
NATS
Core'da sıra grubu dengeyi sağlar.
JetStream Stream denekler tarafından karıştırılır; Düşük gecikmeyle geniş fan çıkışı/fanı üzerine vurgu.
5) Tutma, tekrarlama ve sıkıştırma
Kafka
Alıkoyma: 'alıkoyma. ms/bytes '.
Sıkıştırma: "son değeri anahtara göre" saklar (anlık görüntüler/önbellekler/sagalar için uygundur).
Replay: Herhangi bir tüketici ofsetleri "geri sarabilir".
JetStream
Akışlar: dosya/not arka uçları, zamana/bayta/mesaj sayısına göre depolama politikası.
Tüketiciler: çekme/itme, dayanıklı/geçici, konu öneklerine göre filtreleme.
Yeniden oynatma: yeniden teslim etme veya başlangıçtan/ofset benzeri (sıra) okuma.
6) İşlemler, giden kutusu ve tutarlılık
Kafka
Idempotent Producer ('etkinleştir. Idempotence = true '): kopyalara karşı koruma.
İşlemler: Birkaç partinin atomik kaydı + tüketici-ofsetleri işlemek - "delikler" olmadan okuma-süreç-yazma modeli.
İşlemsel Giden Kutusu (Transactional Outbox): Bir iş etkinliğinin kaydı ve bir veritabanı işleminde bir giden kutusu satırı, işçi Kafka'da yayınlar.
NATS
Kafka'da olduğu gibi "çapraz akış" işlemleri yoktur; Giden kutusu/gelen kutusu ve idempotent tüketiciler (anahtarlar, deadstore) kullanın.
7) RPC ve istek-yanıt
Kafka RPC için uygun değildir (yüksek yük, sipariş/cevaplar daha zordur). Eşzamansız komutlar/olaylar kullanın.
NATS: İstek-yanıt (milisaniye, korelasyon, zaman aşımları) için idealdir.
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)
8) Operasyon ve topolojiler
8. 1 Kafka
Küme: brokerler + ZooKeeper (eski sürümlerden önce) veya KRaft (yeni meta veriler).
Çoğaltma - Bölge RF≥3, ISR/Denetleyiciler
Çok bölgeli: MirrorMaker 2/Cluster Bağlama; Varlık-borç/varlık-varlık çatışma politikaları ile.
Disk/ağ kapasitesi: 'throughput × retention × replicas' bölümünden okunabilir.
8. 2 NATS
Küme: birçok düğüm, süper küme (coğrafi dağılım), çevre birimleri/kenar için broşürler.
JetStream: akışların düğüm kümelerine göre yerleştirilmesi (yerleştirme), çoğaltma (R = 1.. 5).
WAN: tahmin edilebileceği gibi düşük gecikme süresi, kolay federasyon.
9) Güvenlik
Kafka
TLS (mTLS), SASL: SCRAM, OAuthBearer.
Konular/gruplar/işlemler hakkında ACL.
Şifreleme "dinlenme" (OS/diskler) + ağ politikaları.
NATS
Nkey/JWT kimlikleri, operatör hesapları, özne başına ACL.
Düğümler ve istemciler arasında mTLS.
Kiracı izolasyonu (hesaplar) + limitler.
10) Gözlemlenebilirlik ve performans ölçümleri
Kafka
Брокер: 'BytesIn/Out', 'RequestQueue', 'UnderReplicedPartitions', GC/FS istatistikleri.
Konu/bölüm: 'logEndOffset', tüketici gecikmesi (kritik).
Üretici/tüketici: retrai, 'toplu. Boyut ',' oyalanmak. ms ',' getir. min. bytes ', hatalar.
Araçlar: JMX, Cruise Control (yeniden dengeleme), Schema Registry.
NATS/JetStream
Sunucu: Conn/msgs/sn, RTT, CPU/mem, yavaş tüketici algılama.
JetStream: akış/tüketici başına - lag, redeliveries, acks, storage bytes.
İzleme: dahili uç nokta, nsc/adm-CLI, panolar.
11) Performans ve ayarlama
Kafka
Büyük butches ve 'oyalanmak. ms 'improve işlem hacmi ve sıkıştırma p99.
Sıkıştırma (lz4/zstd) ağ/disk tasarrufu sağlar.
Numara. tüketici/çekirdek sayısına göre bölümler, ancak havai değil.
Sürücüler: NVMe tercih edilir, 'noatime'ile XFS/EXT4.
NATS
Küçük mesajlar, birçok bağlantı normdur; Kuyruk gruplarını "geniş" tutun.
JetStream: 'max _ ack _ pending' ayarını yapın, çekme ve itme, partilerin boyutu.
Backpressure: 'FlowControl', 'IdleHeartbeat', sunucu tarafı sınırları.
12) Entegrasyon kalıpları
Giden Kutusu/Gelen Kutusu (hem Kafka hem de NATS'de).
SAGA: olay orkestrasyonu; 'saga _ id + step'ile büyükbaba.
Değişim Veri Yakalama (CDC): Debezium Kafka; NATS'de - "veritabanından yayıncı tetikleyicileri/günlükleri" deseni.
Akış işleme: Kafka Akışları/Flink/Spark; NATS'ta - üçüncü taraf işlemciler/özellikler, JetStream tüketicileri.
Ölü Harf Kuyruğu (DLQ) ve yeniden deneme politikaları (üstel geri alma + jitter).
13) Yapılandırma örnekleri
13. 1 Kafka: Konu ve Yapımcı Olmak
bash kafka-topics. sh --create --topic orders \
--partitions 12 --replication-factor 3 \
--config cleanup. policy=delete \
--config retention. ms=604800000 # 7d
properties producer. properties bootstrap. servers=broker:9092 acks=all enable. idempotence=true batch. size=65536 linger. ms=10 compression. type=zstd
13. 2 Kafka Akışları: idempotent işleme (eskiz)
java builder. <String, Order>stream("orders")
.groupByKey()
.aggregate(/... /)
.toStream()
.to("orders-agg");
13. 3 NATS JetStream: akış + tüketici (nats CLI)
bash nats stream add ORDERS --subjects "orders. " --retention limits \
--storage file --max-bytes 100GB --replicas 3 --discard old
nats consumer add ORDERS ORDERS-WORKERS --filter "orders. created" \
--deliver pull --ack explicit --max-deliver 6 --backoff "1s,5s,30s,2m"
13. 4 NATS İstek-Yanıt (Git)
go nc, _:= nats. Connect("tls://nats:4222", nats. Secure(tlsConf))
sub, _:= nc. QueueSubscribe("calc. sum", "workers", func(m nats. Msg) {
//... process...
m. Respond([]byte("42"))
})
14) Kafka vs NATS seçimi: Hızlı bir rehber
Yeniden oynatma, uzun süreli tutma, sıkıştırma, ağır akış süreçlerine ihtiyacımız var - Kafka.
Hızlı RPC, mikro gecikme, basit işlem, kenar/IoT ™ NATS (Çekirdek) ile fan çıkışı/fan girişi gerekir.
Kalıcılık + fan-out'a ihtiyacımız var, ancak ağır "günlük" platformu olmadan NATS JetStream.
Sıkı anahtar ve işlem emri - Kafka.
15) Kapasite planlaması (basitleştirilmiş)
Kafka
1. İşlem hacmi: 'Inbound _ MBps × RF × retention_days × 86400' diskler.
2. Gruplar: 'target _ concurrency' × stok 1. 5-2 ×.
3. Ağ: p99 + çoğaltma + üretici sıkıştırması.
NATS/JetStream
1. Mesajlar/sn ve ortalama - verim.
2. Replikalar × saklama - depolama.
3. Tüketici sınırları (ack-pending, redeliveries), serileştirme için CPU.
16) Güvenli çalışma: kontrol listesi
- TLS/mTLS etkin, sırlar döndürüldü.
- ACL/hesaplar/kotalar (kiracı başına).
- Tüketiciler, DLQ ve jitter geri çekilmeleri üzerinde idempotency.
- Lag/throughput/error monitoring; URP (Kafka), yeniden teslim fırtına (NATS) uyarıları.
- Kapasite panoları: bölümler, depolama, p99.
- Düğüm/bölge hatası testleri, oyun günleri, tekrar oynatma/geri doldurma.
- Schema Registry/JSON Schema anahtarları belgelenmiştir.
- Saklama/sıkıştırma/TTL politikaları uyumlulukla uyumludur.
- Broker/istemci sürümleri düzenli olarak güncellenir; Tel protokolü uyumluluğu doğrulandı.
17) Anti-desenler
Sıcak anahtar (aynı kimliğin tüm olayları) - bir "kaynama" akışı. Shardy/arabellek.
Idempotency olmadan Retreats - çift etkileri.
Büyük mesajlar (MB-tens) - GC parçalanması/duraklamaları. Yükü nesnede sakla, bağlantı gönder.
Kafka'da RPC ve akışın karıştırılması - karmaşık bir yaşam döngüsü/sırası.
"Uzun vadeli DWH'olarak JetStream - etiket dışı; Nesne/sütun yataklarında uzun süre saklayın.
DLQ yok - "zehirli" mesajlar durmadan dönüyor.
Forgotten retention - diskler dolu, cluster stop.
18) SSS
S: Boru hattının sonunda "tam olarak bir kez" yapabilir miyim?
C: Pratikte - etkili bir şekilde evet: Kafka (idempotent üretici + işlemler) ve idempotent lavabolar (anahtar, uppert). NATS'de - uygulamada idempotence/dedup aracılığıyla.
S: Bir milyon küçük RPC/sn için ne seçilir?
A: NATS Core: Mikro gecikme, istek-cevap, hafif bağlantılar ve kuyruk grupları.
S: Sıkıştırmaya ve servet enstantanelerine mi ihtiyacınız var?
A: Kafka с temizliği. policy = compact ', key = aggregate/resource.
S: Gecikme ile nasıl başa çıkılır?
C: Parti/işçi sayısını artırın, işlem süresini azaltın, parti ve ön etch yapın, çölleşmeyi optimize edin, brokerleri/sürücüleri dikey olarak güçlendirin.
S: Çok bölgeli ve DR?
A: Kafka - MirrorMaker 2/Cluster Bağlama, RPO≈sekundy ile varlık-sorumluluk. NATS - süperküme/yaprak düğümleri; Bölgeye göre JetStream yansıtma/çoğaltma.
19) Toplam
Kafka ve NATS farklı modları kapatır: Kafka - dayanıklı olay günlükleri, yüksek verim, işlemsellik ve tekrar oynatma; NATS, düşük gecikme süresi, RPC ve basit fan çıkışı için JetStream ile dayanıklılık için ultra hafif bir veri yoludur. Teslimat semantiği, sipariş ve saklama, gecikme ve işletme maliyetleri arasından seçiminizi yapın. Tasarım anahtarları/partileri, saklama, DLQ ve gözlemlenebilirlik - ve etkinlik mimariniz öngörülebilir, ölçeklenebilir ve güvenilir olacaktır.