JetStream

JetStream — это подсистема Nats, которая обеспечивает персистентное хранение сообщений, позволяет объединять subjects в стримы, а также использовать consumer’ов для контроля доставки.

Так же JetStream предоставляет две дополнительные функции напрямую не связанные с функционалом messaging-системы:

  • KV Store - KV хранилище чем-то похожее на Redis.
  • Object store - объектное хранилище. Не совместимо никак с S3, те не менее можно использовать для хранения объектов.

Интересным расширением для обоих функций является наличие служебных subject’ов которые получают сообщения по действиям в соответствующих сущностям.

JetStream не требует отдельной конфигурации так как является частью NATS сервера.

Для запуска сервера с ним требуется указать в конфигурации:

jetstream {
    store_dir: /data/jetstream
    max_mem: 1G
    max_file: 100G
}

Core NATS API

JetStream предоставляет свой функционал через API, реализованный на механизмах publish и request/reply Core NATS. Все операции управления сущностями JetStream выполняются путём отправки сообщений на специализированные subject-ы, поддерживаемые сервером с включённым JetStream.

Весь функционал JetStream с точки зрения доступности через API реализован поверх request-replay функционала NATS Core. Детали можно посмотреть тут.

Например:

❯ nats req '$JS.API.STREAM.INFO.TELEGRAM' ''
13:55:53 Sending request on "$JS.API.STREAM.INFO.TELEGRAM"
13:55:53 Received with rtt 5.034693ms
{"type":"io.nats.jetstream.api.v1.stream_info_response","total":0,"offset":0,"limit":0,"config":{"name":"TELEGRAM","subjects":["telegram.\u003e"],"retention":"workqueue","max_consumers":-1,"max_msgs":-1,"max_bytes":-1,"max_age":0,"max_msgs_per_subject":-1,"max_msg_size":-1,"discard":"old","storage":"file","num_replicas":1,"duplicate_window":120000000000,"compression":"none","allow_direct":true,"mirror_direct":false,"sealed":false,"deny_delete":false,"deny_purge":false,"allow_rollup_hdrs":false,"consumer_limits":{},"allow_msg_ttl":false,"metadata":{"_nats.level":"2","_nats.req.level":"0","_nats.ver":"2.12.1"}},"created":"2025-10-24T14:33:16.573900477Z","state":{"messages":0,"bytes":0,"first_seq":79,"first_ts":"0001-01-01T00:00:00Z","last_seq":78,"last_ts":"2025-11-14T07:06:14.209621756Z","consumer_count":1},"cluster":{"leader":"nats"},"ts":"2025-11-14T10:55:53.887765445Z"}