Redis Streams

Redis Streams (Redis 5.0, 2018) — append-only лог внутри Redis. Похож на Kafka, но проще и в одном инстансе Redis. Persistent, consumer groups, replay. Основа multi-worker очередей.

Основные команды

# добавить
XADD mystream * field1 value1 field2 value2
  → 1633024800000-0  ← ID (ms-timestamp - seq)

# читать с начала
XRANGE mystream - +

# blocking read
XREAD BLOCK 5000 STREAMS mystream $
  # $ = только новые

Consumer groups

# создать группу
XGROUP CREATE mystream billing $ MKSTREAM

# читать в группе — сообщение уйдёт одному в группе
XREADGROUP GROUP billing worker-1 COUNT 10 BLOCK 5000 STREAMS mystream >

# ack после обработки
XACK mystream billing 1633024800000-0

# просмотреть pending (не acknowledged)
XPENDING mystream billing

# claim зависших (после падения worker)
XCLAIM mystream billing worker-2 60000 1633024800000-0

Как модель

stream "orders":
  1633024800000-0: {order_id:1, amount:100}
  1633024800001-0: {order_id:2, amount:250}
  1633024800001-1: {order_id:3, amount:50}  ← совпал ms, seq=1
  ...

group "billing":
  worker-1 → next id 1633024800002-0
  pending list: [1633024800001-0 → worker-2, delivered 5с назад]
                [1633024800001-1 → worker-3, delivered 8с назад]

Trim

# оставить последние N
XADD mystream MAXLEN 10000 * key val
XADD mystream MAXLEN ~ 10000 * key val   # approximate, дешевле

# по времени
XTRIM mystream MINID (1633020000000

Sanity limits

Redis Streams vs Kafka

Redis StreamsKafka
Deployredis-serverKafka+ZK/KRaft, JVM
RetentionMAXLEN / MINIDtime/size
Throughput100k/s1M+/s
Consumer groupдада
Replay by offsetдада
Partitions1 per streamN per topic

Когда брать

См. также

← на главную