首页/数据/数据库速查/Streams 消费者组:XREADGROUP / XACK / PEL
Redis 运维与场景124 条

Streams 消费者组:XREADGROUP / XACK / PEL

消费者组把消息分发给多个消费者:XGROUP 建组,XREADGROUP 用 > 读新消息,XACK 确认;未确认消息进入 PEL(Pending Entries List),消费者宕机后用 XAUTOCLAIM/XCLAIM 转移重试。

数据库速查数据更新于 2026-10-12

完整流程

完整流程
XGROUP CREATE orders g1 0 MKSTREAM       # 建组,从 0 起(含历史)
XREADGROUP GROUP g1 consumer1 COUNT 10 BLOCK 2000 STREAMS orders >
XACK orders g1 1737100000000-0           # 处理完成确认
XPENDING orders g1                       # PEL 概览(数量/最小最大ID/消费者)
XPENDING orders g1 - + 10                # 明细(含投递次数/空闲时间)
XAUTOCLAIM orders g1 consumer2 60000 0-0 COUNT 10   # 认领空闲>60s 的消息
XINFO GROUPS orders
XINFO CONSUMERS orders g1
> 与 ID> 只投递从未投递的新消息;指定 ID 则读自己 PEL 里的历史
ACK 语义确认后才从未处理列表移除;不 ACK 会重复投递
故障转移XAUTOCLAIM 按空闲时间批量认领,替代逐个 XCLAIM
PEL 只增不减通常有两个原因:消费者没 XACK;或消费者宕机后没人认领。要监控 XPENDING 数量。

易错点

  • 组内消费者名字复用却不清理:XINFO CONSUMERS 里僵尸消费者挂着 pending 消息
  • 处理成功却忘 XACK:消息会重复投递,业务必须幂等

数据来源与参考

  • Redis 官方文档: Consumer groups
  • Redis 官方文档: XREADGROUP

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌