GH GambleHub

Message Broker

1) Warum Message Broker

Der Broker entkoppelt Produzenten und Consumer in Bezug auf Zeit/Geschwindigkeit/Zuverlässigkeit:
  • Pufferung und Glättung von Spitzen, Backpresher.
  • Skalieren Sie Lesen/Schreiben unabhängig.
  • Beobachtung und Wiedergabe (Replay) von Ereignissen.
  • Architekturmuster: event-driven, CQRS, event sourcing, outbox/inbox.

2) Grundlegende Modelle und Begriffe

2. 1 Kafka (Logmodell)

Topik → Parteien (geordnete Protokolle) → Versätze bei den Consumern.
Verbrauchergruppe: Parallelität des Lesens, Balancieren der Parteien.
Retention nach Zeit/Volumen; Compact nach Schlüssel.
Semantik: Minimum - at-least-once, bei Einstellungen - effectively exactly-once (idempotente Produzenten + Transaktionen).
Ordnung: innerhalb der Partei garantiert.

2. 2 NATS (Themen/Themen, geringe Latenz)

Subject (Thema) mit Hierarchie und Wildcards ('foo.', 'foo. >`).
Modi: pub/sub, queue-groups (Fan-out mit Job-Verteilung), request-reply (schneller RPC).
Core NATS - ephemere, ultraniedrige Latenz; JetStream - Persistenz/Retention/Wiederholungen.
Auftrag: beste Anstrengung, ohne starke globale Garantie; mit JetStream - Ordnung im Stream, aber seltene Nachbestellungen bei Ausfällen sind möglich.

3) Liefersemantik und Konsistenz

SemantikKafkaNATS CoreNATS JetStream
At-most-onceselten (in der Regel nicht notwendig)Standard (keine Bestätigungen)Es ist möglich
At-least-onceStandard (commit offset nach Bearbeitung)mit ack-RichtlinieStandard (ack policy, redelivery)
Exactly-once (effektiv)idempotenter Produzent + Transaktionen; idempotent sinksn/aerreicht auf Konsumentenebene (Idempotenz), der Broker gibt keine Transaktionen wie bei Kafka

Idempotenz und Dedup liegen in der Verantwortung der App/Sync, auch bei „exactly-once“ bei Kafka.

4) Reihenfolge, Partitionierung und Schlüssel

Kafka

Die Wahl des Nachrichtenschlüssels bestimmt die Partei → eine starke lokale Ordnung.
Ключи: `aggregate_id`, `tenant_id`, `order_id`. Vermeiden Sie heiße Schlüssel.
Balance: N-Parteien ≈ das Niveau der Parallelität des Lesens.

NATS

Bei Core macht die Queue-Gruppe die Balance.
In JetStream wird Stream durch subjects sharding; Betonung auf breites Fan-Out/Fan-In mit geringer Latenz.

5) Retention, Replies und Compaction

Kafka

Retention: `retention. ms/bytes`.
Compaction: speichert den „letzten Wert nach Schlüssel“ (geeignet für Snap Shots/Cashes/Sagen).
Wiederholung: Jeder Consumer kann Offsets „abspulen“.

JetStream

Streams: Datei/Memory Backends, Aufbewahrungsrichtlinien nach Zeit/Bytes/Anzahl der Nachrichten.
Verbraucher: pull/push, durable/ephemeral, Filter nach Subject-Präfixen.
Replay: Umleitung oder Lesen von Anfang an/offset-like (Sequenz).

6) Transaktionen, Outbox und Konsistenz

Kafka

Idempotent Producer (`enable. idempotence = true'): Schutz vor Doppelungen.
Transaktionen: atomare Aufzeichnung mehrerer Parteien + Commit-Consumer-Offsets → Read-Process-Write-Muster ohne „Löcher“.
Transactional Outbox: Aufzeichnung eines Geschäftsereignisses und einer Outbox-Zeile in einer einzigen DB-Transaktion, die der Worker in Kafka veröffentlicht.

NATS

Es gibt keine „Interstream“ -Transaktionen wie in Kafka; Verwenden Sie Outbox/Inbox und idempotente Consumer (Schlüssel, Dedup-Stor).

7) RPC und Anfrage-Antwort

Kafka für RPC ist unbequem (hoher Overhead, Reihenfolge/Antworten sind schwieriger). Verwenden Sie asynchrone Befehle/Ereignisse.
NATS: ideal für request-reply (Millisekunden, Corellation, Timeouts).

Beispiel (Go, NATS request-reply):
go resp, err:= nc. Request("profile. get", []byte(`{"id":42}`), 200time. Millisecond)

8) Betrieb und Topologien

8. 1 Kafka

Cluster: Broker + ZooKeeper (vor älteren Versionen) oder KRaft (neue Metadaten).
Replikation: Zonen- RF≥3, ISR/Controller.
Mehrere Regionen: MirrorMaker 2/Cluster Linking Asset-Passiv/Asset-Asset mit Konfliktpolitiken.
Festplatten-/Netzwerkkapazität: Zähle von „throughput × retention × replicas“.

8. 2 NATS

Cluster: viele Knoten, Super-Cluster (Geo-Distribution), Leafnodes für Peripherie/Edge.
JetStream: Platzierung von Streams nach Knotensätzen (Platzierung), Replikation (R = 1.. 5).
WAN: vorhersehbar niedrige Latenz, leichte Föderation.

9) Sicherheit

Kafka

TLS (mTLS), SASL: SCRAM, OAuthBearer.
ACL auf Topics/Gruppen/Transaktionen.
Ruheverschlüsselung (OS/Laufwerke) + Netzwerkrichtlinien.

NATS

nkey/JWT Identität, Operator-Konten, Per-Subject ACL.
mTLS zwischen Knoten und Clients.
Isolierung von Mietern (Konten) + Grenzen.

10) Beobachtbarkeit und Leistungsmetriken

Kafka

Брокер: `BytesIn/Out`, `RequestQueue`, `UnderReplicatedPartitions`, GC/FS stats.
Topic/Party: 'logEndOffset', Verbraucherverzug (kritisch).
Produzent/Consumer: retrai, 'batch. size`, `linger. ms`, `fetch. min. bytes', Fehler.
Werkzeuge: JMX, Cruise Control (Re-Balance), Schema Registry.

NATS/JetStream

Server: conn/msgs/sec, RTT, CPU/mem, slow consumer detection.
JetStream: per stream/consumer — lag, redeliveries, acks, storage bytes.
Überwachung: integrierter Endpunkt, nsc/adm-CLI, Dashboards.

11) Leistung und Tuning

Kafka

Große Batchi und 'Linger. ms' verbessern throughput und komprimieren p99.
Kompression (lz4/zstd) spart Netzwerk/Festplatte.
num. Partitionen nach Anzahl der Verbraucher/Kerne, aber nicht zu weit (overhead).
Laufwerke: NVMe werden bevorzugt, XFS/EXT4 mit 'noatime'.

NATS

Kleine Nachrichten, viele Verbindungen - die Norm; halten queue Gruppen „breit“.
JetStream: tune `max_ack_pending`, pull vs push, size of batches.
Backpressure: `FlowControl`, `IdleHeartbeat`, server-side limits.

12) Integrationsmuster

Outbox/Inbox (sowohl in Kafka als auch in NATS).
SAGA: Orchestrierung durch Veranstaltungen; dedup durch 'saga _ id + step'.
Change Data Capture (CDC): Debezium → Kafka; in NATS ein "publisher from DB triggers/logs' -Muster.
Stream processing: Kafka Streams/Flink/Spark; in NATS - Prozessoren/Funktionen von Drittanbietern, JetStream-Verbraucher.
Dead Letter Queue (DLQ) und Retry-Richtlinien (exponentieller Backoff + Jitter).

13) Beispiele für Konfigurationen

13. 1 Kafka: Topic-Kreation und Produzent

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 Streams: idempotente Bearbeitung (Skizze)

java builder. <String, Order>stream("orders")
.groupByKey()
.aggregate(/... /)
.toStream()
.to("orders-agg");

13. 3 NATS JetStream: stream + consumer (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 Request-Reply (Go)

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 Auswahl: eine schnelle Referenz

Wir brauchen Replikate, lange Retention, Kompression, schwere Stream-Prozesse → Kafka.
Sie benötigen einen schnellen RPC, ein Fan-Out/Fan-In mit Mikrolatenz, einfache Bedienung, Edge/IoT → NATS (Core).
Wir brauchen Persistenz + Fan-out, aber ohne die schwere „Log“ -Plattform → NATS JetStream.
Strikte Reihenfolge nach Schlüssel und Transaktion → Kafka.

15) Kapazitätsplanung (vereinfacht)

Kafka

1. Durchlass-: ' inbound_MBps × RF × retention_days × 86400 ' → die Disks.
2. Parteien: „target _ concurrency“ × Lager 1. 5–2×.
3. Netzwerk: p99 + replication + producer compression.

NATS/JetStream

1. Nachrichten/sec und Durchschnittliche Größe → throughput.
2. Retention×replicas → storage.
3. Grenzen der Verbraucher (ack-pending, redeliveries), CPU auf Serialisierung.

16) Sicherer Betrieb: Checkliste

  • TLS/mTLS eingeschaltet, Geheimnisse rotieren.
  • ACL/Konten/Quoten (per-tenant).
  • Idempotenz bei Consumern, DLQ und Retrays mit Jitter.
  • Monitoring lag/throughput/error; alert auf URP (Kafka), einem Redelivery-Storm (NATS).
  • Kapazität Dashboards: Parteien, Lagerung, p99.
  • Knoten-/Zonenfehlertests, Spieltage, Replikate/Backfill.
  • Partitionierungsschlüssel und Schemata sind dokumentiert (Schema Registry/JSON Schema).
  • Die Richtlinien für Retention/Compaction/TTL sind mit der Compliance abgestimmt.
  • Die Versionen der Broker/Kunden werden regelmäßig aktualisiert; Die Kompatibilität des Wire-Protokolls wurde geprüft.

17) Anti-Muster

Hot Key (alle Ereignisse einer ID) → ein „kochender“ Thread. Scharren/puffern.
Retrays ohne Idempotenz → Doppeleffekte.
Riesige Nachrichten (MB-Zehner) → GC-Fragmentierung/Pausen. Speichern Sie payload im Objekt, senden Sie Links.
Das Mischen von RPC und Streaming in Kafka → einen komplexen Lebenszyklus/Auftrag.
JetStream als „langfristige DWH“ → nicht bestimmungsgemäß; lange in Objekt-/Säulensektoren lagern.
Es gibt kein DLQ → „giftige“ Nachrichten drehen sich endlos.
Vergessene Retention → Scheiben voll, Cluster-Stopp.

18) FAQ

F: Kann man „exactly-once“ am Ende einer Pipeline machen?
A: In der Praxis - effektiv ja: Kafka (idempotent producer + transactions) und idempotent syncs (key, upsert). In NATS - durch idempotency/dedup in der Anwendung.

F: Was soll ich für eine Million kleine RPC/s wählen?
A: NATS Core: Mikrolatenz, Anfrage-Antwort, einfache Anschlüsse und Queue-Gruppen.

F: Brauchen Sie Kompression und Schnappschüsse des Staates?
A: Kafka с `cleanup. policy = compact', key = Aggregat/Ressource.

F: Wie gehe ich mit der Verzögerung um?
A: Erhöhen Sie die Anzahl der Parteien/Worker, reduzieren Sie die Bearbeitungszeit, Batchi und Prefetch, optimieren Sie die Deserialisierung, verstärken Sie Makler/Laufwerke vertikal.

F: Multiregion und DR?
A: Kafka - MirrorMaker 2/Cluster Linking, Asset-Liability mit RPO≈sekundy. NATS — supercluster/leafnodes; JetStream Spiegelung/Replikation nach Zonen.

19) Ergebnisse

Kafka und NATS schließen verschiedene Modi: Kafka - langlebige Ereignisprotokolle, hohe Durchdringung, Transaktionalität und Replikationen; NATS ist ein ultraleichter Bus für niedrige Latenz, RPC und einfaches Fan-Out, mit JetStream für Persistenz. Wählen Sie aus der Semantik der Lieferung, Reihenfolge und Retention, Latenz und Betriebskosten. Entwerfen Sie Schlüssel/Parties, Retention, DLQ und Observability - und Ihre Event-Architektur ist vorhersehbar, skalierbar und zuverlässig.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Telegram
@Gamble_GC
Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.