← Все статьи
Redis Streams для CAN-логов: ускоряем обработку телеметрии

Система обработки CAN-логов упиралась: скрипт не успевал разбирать сообщения из Redis. Разобрал три анти-паттерна: hash-set вместо очереди, циклический полный обход вместо блокирующего чтения, один потребитель для CPU-bound декодирования.
## Решение
Redis Streams + consumer groups: продюсер дописывает через `XADD` с pipeline, несколько воркеров читают через `XREADGROUP` с `BLOCK`, подтверждают через `XACK` после успешной вставки в ClickHouse. Зависшие сообщения забирает `XAUTOCLAIM`.
Декодирование CAN — CPU-bound, поэтому масштабируем процессами, а не потоками (GIL). Дедупликация — по `msg_id` через `ReplacingMergeTree`.