消息堆积治理:十亿条积压怎么办
2026/8/24大约 3 分钟
亿级规模系统系列 · 阶段 3 · 异步与消息 · 第 19/49 篇 · 🚧 占位待学
上一篇:《顺序、重复与事务消息:消息三保难题》
下一篇:《推与拉:长轮询、百万连接的消息投递》
学习大纲:《QPS 过万与亿级消息系统设计学习总纲》
状态:待学习。 本文为占位文档:知识点清单、实验与验收标准已就绪,正文待按「先学习、先实验、再撰写」补全。
对应总纲单元:阶段 3 · 单元 3.5
一、本文要解决的问题
消费者挂了一小时,上游照常生产,堆了 10 亿条消息——恢复后怎么追?直接开 100 个消费者行不行?堆积治理是亿级消息系统的「消防演习」:平时没感觉,出事时它是救命的。
二、知识点清单
- 堆积的度量:堆积量 = 生产积分 − 消费积分;消费 TPS 与生产 TPS 的追赶公式(追平时间 = 堆积 ÷(消费 − 生产))
- 扩容消费者的边界:消费者并行度受队列数限制(RocketMQ 队列 / Kafka 分区),队列不够先扩队列再扩消费者
- 批量消费:一次拉一批处理,吞吐换延迟
- 跳过与转储:过期业务直接丢弃(死信 / 时间戳过滤)、堆积转储到离线表再慢慢消化
- 降级与背压:堆积过高时上游降级(关闭非核心消息)、消费失败不无限重试
- 堆积监控水位:告警阈值怎么定(消费延迟时间 > 堆积条数)
三、动手实验(学习时必须真跑)
- 停消费者,压 100 万条消息制造堆积
- 方案对比实验:1 消费者 vs 8 消费者(队列够)vs 8 消费者(队列只有 2)vs 批量消费,各记录追赶 TPS
- 写一个按时间戳跳过过期消息的消费者,验证堆积场景下的快速放行
四、验收标准(全部通过才进入下一篇)
五、写作提示(补正文时遵守)
- 开篇问题驱动;结构走「是什么 → 为什么 → 怎么做 → 背景知识」
- 所有代码、命令、输出必须先在本机跑通再写入,不得杜撰
- 版本口径以总纲环境清单为准(Spring Boot 3.x / MySQL 8.0 / Redis 8.x / RocketMQ 5.3.x / Kafka 4.3 / ShardingSphere 5.5.3)
- 涉及版本敏感结论时标注出处与时间
本篇完成后,把文首导航块的「🚧 占位待学」去掉,并在总纲处打卡。