redis-cli XINFO GROUPS order_stream redis-cli XPENDING order_stream order_group - + 10 redis-cli XAUTOCLAIM order_stream order_group w2 60000 0-0
XINFO GROUPS 里看到 pending 涨到十几万,消费者列表里有个实例早就不再运行,消息一直挂在它名下。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,消费者取走消息之后进程崩了,既没有 XACK 也没有 XCLAIM,pending 只增不减,min-idle-time 又从来没有设过。
围绕「Redis Stream pending」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。
处理上按这个顺序:用 XPENDING 看最老的一条已经挂了多久;用 XAUTOCLAIM 把超时消息转给还活着的消费者;消费逻辑里无论成败都要 XACK 或者落死信。
改完只确认一件事:pending 降到百位以内,没有消息长期挂在失效消费者名下。
