Основные данныеФоновая работа

Потоковая передача событий с группами потребителей

Потоки событий только для добавления с группами потребителей, подтверждениями и автоматическим восстановлением сообщений, оставленных упавшим потребителем.

журнал только для добавления
Надёжный
групп потребителей на поток
N
потерянных сообщений при сбое
0
Шаг 1 из 5
Публикуем событие

Сервис заказов добавляет событие и получает его идентификатор.

Пример сеансаplaying
# Публикуем событие
hotkv> XADD orders * type created order 1182 total 49.00
"1790985600123-0"

Анимированная демонстрация с настоящими командами HotKV и примерами ответов. Нажмите на любой шаг, чтобы перейти к нему. Команды и ответы остаются на английском, ровно так, как вы вводите и видите их в HotKV.

Проблема

Сервисам, реагирующим на события, нужно больше, чем очередь. Несколько независимых потребителей хотят одни и те же события, каждой группе потребителей нужно делить работу между экземплярами, а когда экземпляр умирает с сообщениями в руках, кто-то должен это заметить и забрать их.

Как с этим справляется HotKV

Поток - это журнал только для добавления. Каждая группа потребителей читает его независимо, доставляет каждое сообщение одному участнику группы и держит его в ожидании, пока участник не подтвердит. XAUTOCLAIM передаёт сообщения, слишком долго находившиеся в ожидании, исправному потребителю.

Шаг за шагом

Что происходит, команда за командой

  1. 01

    Публикуем событие

    Сервис заказов добавляет событие и получает его идентификатор.

    XADD orders * type created order 1182 total 49.00
  2. 02

    Две группы, один поток

    У оплаты и доставки есть своя группа, и каждая получает событие.

    XGROUP CREATE orders billing 0 MKSTREAM
  3. 03

    Потребляем

    Экземпляр оплаты читает новые сообщения для своей группы, блокируясь до поступления.

    XREADGROUP GROUP billing billing-1 COUNT 10 BLOCK 5000 STREAMS orders >
  4. 04

    Подтверждаем

    Когда счёт создан, оплата подтверждает, и сообщение покидает список ожидающих.

    XACK orders billing 1790985600123-0
  5. 05

    Восстанавливаемся после сбоя

    Экземпляр доставки умер, держа сообщения. После 60 секунд простоя их забирает исправный.

    XAUTOCLAIM orders shipping shipping-2 60000 0-0 COUNT 25
Где это уместно

Реальные сценарии

Конвейеры заказов

Заказы идут в оплату, доставку и аналитику, каждая читает один и тот же поток в своём темпе.

Аудит и ленты активности

Действия пользователей добавляются в поток и воспроизводятся любым сервисом, которому нужна история.

Приём данных IoT

Сообщения устройств буферизуются в потоках и обрабатываются группой воркеров, которая масштабируется с нагрузкой.

Встроено

Что вы получаете

Журнал только для добавления

Записи получают упорядоченные по времени идентификаторы и могут обрезаться по длине или возрасту.

XADDXTRIM

Группы потребителей

Каждая группа получает каждое сообщение и делит работу между своими участниками.

XGROUPXREADGROUP

Подтверждения

Сообщения остаются в ожидании до подтверждения.

XACKXPENDING

Автоматическое восстановление

Слишком долго простаивающие сообщения забирает другой потребитель.

XAUTOCLAIMXCLAIM
Справочник:XADDXREADGROUPXACKXAUTOCLAIM

Частые вопросы

Можно ли воспроизвести старые события?

Да. XRANGE читает любую часть потока по идентификатору, а новая группа потребителей может начать с начала.

Как не дать потоку расти бесконечно?

Обрезайте его через XTRIM или параметры MAXLEN или MINID команды XADD.

Может ли XADD избегать дублирующихся событий?

XADD поддерживает идемпотентные идентификаторы производителя (IDMP), поэтому повторная публикация не создаёт вторую запись. См. справочник XADD.

Связанные сценарии

Попробуйте на своей нагрузке

HotKV понимает протокол Redis, поэтому вы можете подключить к нему существующий клиент и выполнить те же команды.