Skip to main content
Version: 3.0.0-alpha (Diátaxis)

FAQ — NATS

Should I enable JetStream?

JetStream adds persistence, streaming, and replay capabilities to NATS. Without JetStream, NATS operates in pure pub/sub (fire-and-forget) mode: messages are only delivered to subscribers connected at the time of publication.

JetStream is enabled by default (jetstream.enabled: true). Only disable it if you need purely ephemeral messaging without persistence:

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

In production, always keep JetStream enabled to benefit from message persistence, event replay capability, and durable consumer groups.

What is the difference between pub/sub and queue groups?

NATS offers two consumption models:

  • Classic pub/sub: each subscriber receives all messages published on the subject. Suitable for broadcasting (notifications, logs).
  • Queue groups: subscribers in the same group share messages (load balancing). Each message is delivered to only one subscriber in the group. Suitable for distributed processing.

Multiple queue groups can subscribe to the same subject — each group receives a copy of every message, but only one member per group processes it.

How do wildcards work in subjects?

NATS uses a hierarchical subject system separated by dots (.). Two wildcards are available:

WildcardDescriptionExample
*Matches a single tokenorders.* matches orders.new but not orders.new.urgent
>Matches one or more tokensorders.> matches orders.new, orders.new.urgent, etc.

Examples:

  • logs.*: receives logs.info, logs.error, but not logs.app.error
  • logs.>: receives logs.info, logs.error, logs.app.error, etc.

What is the difference between resourcesPreset and resources?

The resourcesPreset field applies a predefined CPU/memory configuration, while resources allows you to specify explicit values. If resources is defined, resourcesPreset is ignored.

PresetCPUMemory
nano250m128Mi
micro500m256Mi
small1512Mi
medium11Gi
large22Gi
xlarge44Gi
2xlarge88Gi

Example with explicit resources:

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

Does NATS persist messages?

By default, NATS operates in fire-and-forget mode: messages are only delivered to subscribers connected at the time of publication. No persistence occurs without additional configuration.

To persist messages, two conditions must be met:

  1. JetStream must be enabled (jetstream.enabled: true)
  2. A stream must be created to capture messages from the relevant subjects

Without a configured stream, even with JetStream enabled, messages published on a subject without an associated stream are not persisted.

How to configure NATS with advanced settings?

The config.merge field allows you to add or override NATS configuration parameters:

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

Common parameters:

ParameterDescriptionDefault
max_payloadMaximum message size1MB
write_deadlineWrite timeout to a client2s
debugEnable debug loggingfalse
traceEnable message tracing (very verbose)false
warning

Enabling debug and trace in production generates a considerable volume of logs. Use them only for temporary diagnostics.