Zum Hauptinhalt springen
Version: 3.0.0-alpha (Diátaxis)

FAQ — NATS

Sollte man JetStream aktivieren?

JetStream fügt NATS Persistenz, Streaming und Replay von Nachrichten hinzu. Ohne JetStream arbeitet NATS im reinen Pub/Sub-Modus (Fire-and-Forget): Nachrichten werden nur an zum Zeitpunkt der Veröffentlichung verbundene Abonnenten übertragen.

JetStream ist standardmäßig aktiviert (jetstream.enabled: true). Deaktivieren Sie es nur, wenn Sie ausschließlich ephemeres Messaging ohne Persistenz benötigen:

nats.yaml
jetstream:
enabled: true
size: 10Gi
Tipp

Lassen Sie JetStream in der Produktion immer aktiviert, um von der Nachrichtenpersistenz, der Möglichkeit des Event-Replays und dauerhaften Consumer Groups zu profitieren.

Was ist der Unterschied zwischen Pub/Sub und Queue Groups?

NATS bietet zwei Konsummodelle:

  • Klassisches Pub/Sub: Jeder Abonnent erhält alle Nachrichten, die auf dem Subject veröffentlicht werden. Geeignet für Verbreitung (Benachrichtigungen, Logs).
  • Queue Groups: Die Abonnenten derselben Gruppe teilen sich die Nachrichten (Load Balancing). Jede Nachricht wird an nur einen Abonnenten der Gruppe zugestellt. Geeignet für verteilte Verarbeitung.

Mehrere Queue Groups können dasselbe Subject abonnieren — jede Gruppe erhält eine Kopie jeder Nachricht, aber nur ein Mitglied pro Gruppe verarbeitet sie.

Wie funktionieren Wildcards in Subjects?

NATS verwendet ein hierarchisches Subject-System, das durch Punkte (.) getrennt wird. Zwei Wildcards sind verfügbar:

WildcardBeschreibungBeispiel
*Entspricht genau einem Tokenorders.* matcht orders.new, aber nicht orders.new.urgent
>Entspricht einem oder mehreren Tokenorders.> matcht orders.new, orders.new.urgent usw.

Beispiele:

  • logs.*: empfängt logs.info, logs.error, aber nicht logs.app.error
  • logs.>: empfängt logs.info, logs.error, logs.app.error usw.

Was ist der Unterschied zwischen resourcesPreset und resources?

Das Feld resourcesPreset wendet eine vordefinierte CPU-/Speicherkonfiguration an, während resources die Angabe expliziter Werte ermöglicht. Wenn resources definiert ist, wird resourcesPreset ignoriert.

PresetCPUSpeicher
nano250m128Mi
micro500m256Mi
small1512Mi
medium11Gi
large22Gi
xlarge44Gi
2xlarge88Gi

Beispiel mit expliziten Ressourcen:

nats.yaml
replicas: 3
resources:
cpu: 2000m
memory: 2Gi

Persistiert NATS die Nachrichten?

Standardmäßig arbeitet NATS im Fire-and-Forget-Modus: Nachrichten werden nur an zum Zeitpunkt der Veröffentlichung verbundene Abonnenten übertragen. Keine Persistenz findet ohne zusätzliche Konfiguration statt.

Um Nachrichten zu persistieren, müssen zwei Bedingungen erfüllt sein:

  1. JetStream muss aktiviert sein (jetstream.enabled: true)
  2. Ein Stream muss erstellt werden, um die Nachrichten der gewünschten Subjects zu erfassen

Ohne konfigurierten Stream werden selbst bei aktiviertem JetStream die auf einem Subject ohne zugehörigen Stream veröffentlichten Nachrichten nicht persistiert.

Wie konfiguriert man NATS erweitert?

Das Feld config.merge ermöglicht das Hinzufügen oder Überschreiben von NATS-Konfigurationsparametern:

nats.yaml
config:
merge:
max_payload: 8MB
write_deadline: 2s
debug: false
trace: false

Gängige Parameter:

ParameterBeschreibungStandard
max_payloadMaximale Größe einer Nachricht1MB
write_deadlineSchreib-Timeout für einen Client2s
debugAktiviert Debug-Logsfalse
traceAktiviert Nachrichten-Tracing (sehr ausführlich)false
Warnung

Die Aktivierung von debug und trace in der Produktion erzeugt ein erhebliches Log-Volumen. Verwenden Sie sie nur für temporäre Diagnose.