JetStream — встроенная в сервер NATS система персистентной очереди и стриминга сообщений, предназначенная для обеспечения надёжной передачи, долговременного хранения и реплея событий в распределённых приложениях. Разработанная как расширение модели публикации-подписки, JetStream добавляет возможности управления состоянием сообщений: подтверждение доставки, гарантию порядка в пределах потоков, управление жизненным циклом записей и конфигурируемую политику хранения. Это позволяет использовать JetStream как основу для построения отказоустойчивых систем обмена сообщениями, асинхронной интеграции сервисов и распределённого логирования событий.
Архитектурно JetStream реализует понятия потоков (streams), потребителей (consumers) и сообщений, комбинируя в себе особенности очередей, стриминговых платформ и простого ключ-значение хранилища для метаданных. Платформа поддерживает репликацию данных, ретеншн-политики по времени и объёму, а также механизмы реплея для повторного проигрывания сообщений. Благодаря тесной интеграции с ядром NATS, JetStream ориентирован на низкую задержку и лёгкую эксплуатацию при сохранении свойств персистентности и согласованности, характерных для систем обмена сообщениями корпоративного уровня.
- Персистентное хранение: сообщения сохраняются на диск с возможностью настройки ретеншна по времени или объёму и политики удаления.
- Репликация и отказоустойчивость: поддержка реплик потока для повышения доступности и устойчивости к сбоям узлов.
- Потребители и модели доставки: поддержка pull- и push-режимов потребления, подтверждений (ack), перезапросов и отложенных повторных доставок.
- Реплей и позиционирование: возможность повторного воспроизведения сообщений по порядковому номеру, временной метке или маркерам позиции.
- Управление порядком: гарантии порядка внутри потока при однопоточном потоке сообщений и механизмы контроля при параллельной обработке.
- Политики ретеншна и лимитов: гибкие настройки хранения: ограничения по размеру, количеству сообщений и времени хранения.
- Квоты и управление ресурсами: механизмы контроля использования диска и пропускной способности для предотвращения перегрузок.
- Интеграция с NATS: бесшовная работа в экосистеме NATS, единая модель аутентификации и сетевого взаимодействия.
- Поддержка транзакций для ключ-значение: простые операции KV для хранения конфигурационных данных и метаданных с версионированием.
- Управление потребителями: динамическая регистрация, состояние оффсетов и возможности группировки для балансировки нагрузки.