Практическое задание

Эта задача — шаг 14 курса «Redis в проде»

Группа потребителей для потока заказов

средне~12 мин

В Redis есть поток (stream) orders с заказами, которые ещё никто не обрабатывал. Подключи к нему биллинг:

  1. создай группу потребителей billing так, чтобы она получила все записи потока — с самого начала, а не только новые;
  2. прочитай записи из группы от имени потребителя worker-1;
  3. «обработай» их и подтверди (acknowledge) каждую полученную запись, чтобы у группы не осталось ожидающих (pending) сообщений.

Сам поток не меняй: ничего не добавляй и не удаляй.

Что потренируешь:
  • redis
  • streams
  • XGROUP
  • XREADGROUP
  • XACK
  • XPENDING

Разбор темы

Redis Streams — журнал записей с ID вида <мс>-<seq>. Группа потребителей (consumer group) раздаёт записи между несколькими воркерами: каждая запись уходит ровно одному потребителю группы и попадает в его список ожидающих (Pending Entries List, PEL). Запись остаётся там, пока воркер не подтвердит её через XACK, — так Redis даёт доставку «хотя бы один раз»: если воркер упал, не подтвердив, сообщение не потеряется и его можно передать другому. Частая ошибка — создать группу с $: тогда уже лежащие в потоке записи группа никогда не увидит. Растущий PEL в проде — признак того, что воркеры падают или забывают подтверждать сообщения.

Что проверяется

  1. группа billing создана
  2. поток orders не изменён
  3. группа получила все записи потока с начала
  4. записи получил потребитель worker-1
  5. все полученные записи подтверждены

Как это выглядит