Aller au contenu principal
Version: 3.0.0-alpha (Diátaxis)

FAQ — NATS

Faut-il activer JetStream ?

JetStream ajoute la persistance, le streaming et le replay des messages à NATS. Sans JetStream, NATS fonctionne en mode pub/sub pur (fire-and-forget) : les messages sont transmis uniquement aux abonnés connectés au moment de la publication.

JetStream est activé par défaut (jetstream.enabled: true). Ne le désactivez que si vous avez besoin uniquement de messagerie éphémère sans persistance :

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

En production, gardez toujours JetStream activé pour bénéficier de la persistance des messages, de la possibilité de rejouer les événements, et des consumer groups durables.

Quelle est la différence entre pub/sub et queue groups ?

NATS propose deux modèles de consommation :

  • Pub/sub classique : chaque abonné reçoit tous les messages publiés sur le subject. Adapté à la diffusion (notifications, logs).
  • Queue groups : les abonnés d'un même groupe se partagent les messages (load balancing). Chaque message est délivré à un seul abonné du groupe. Adapté au traitement distribué.

Plusieurs queue groups peuvent s'abonner au même subject — chaque groupe reçoit une copie de chaque message, mais un seul membre par groupe le traite.

Comment fonctionnent les wildcards dans les subjects ?

NATS utilise un système de subjects hiérarchiques séparés par des points (.). Deux wildcards sont disponibles :

WildcardDescriptionExemple
*Correspond à un seul tokenorders.* matche orders.new mais pas orders.new.urgent
>Correspond à un ou plusieurs tokensorders.> matche orders.new, orders.new.urgent, etc.

Exemples :

  • logs.* : reçoit logs.info, logs.error, mais pas logs.app.error
  • logs.> : reçoit logs.info, logs.error, logs.app.error, etc.

Quelle est la différence entre resourcesPreset et resources ?

Le champ resourcesPreset applique une configuration CPU/mémoire prédéfinie, tandis que resources permet de spécifier des valeurs explicites. Si resources est défini, resourcesPreset est ignoré.

PresetCPUMémoire
nano250m128Mi
micro500m256Mi
small1512Mi
medium11Gi
large22Gi
xlarge44Gi
2xlarge88Gi

Exemple avec des ressources explicites :

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

NATS persiste-t-il les messages ?

Par défaut, NATS fonctionne en mode fire-and-forget : les messages ne sont transmis qu'aux abonnés connectés au moment de la publication. Aucune persistance n'a lieu sans configuration supplémentaire.

Pour persister les messages, deux conditions doivent être remplies :

  1. JetStream doit être activé (jetstream.enabled: true)
  2. Un stream doit être créé pour capturer les messages des subjects concernés

Sans stream configuré, même avec JetStream activé, les messages publiés sur un subject sans stream associé ne sont pas persistés.

Comment configurer NATS de manière avancée ?

Le champ config.merge permet d'ajouter ou de surcharger des paramètres de la configuration NATS :

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

Paramètres courants :

ParamètreDescriptionDéfaut
max_payloadTaille maximale d'un message1MB
write_deadlineTimeout d'écriture vers un client2s
debugActive les logs de debugfalse
traceActive le traçage des messages (très verbeux)false
attention

Activer debug et trace en production génère un volume de logs considérable. Utilisez-les uniquement pour le diagnostic temporaire.