一、常见积压原因
1. 消费者能力不足
- 消费者逻辑复杂/执行耗时:存在慢 SQL、复杂计算等
- 实例数量不足:消费者实例数少于分区数
- 外部依赖异常:数据库连接超时、空指针异常等
2. Broker 资源瓶颈
- 磁盘 I/O 性能不足
- CPU 或内存资源紧张
- 网络带宽受限
3. 网络问题
- 消费者与 Broker 间网络延迟
- Broker 集群内网络丢包
- 网络拥塞
4. 流量突增
- 短时消息生产速率大于消费速率
5. 频繁 Rebalance
- 心跳超时、频繁上下线(增加消费者处理消息时间)
二、应急处理措施
1. 临时扩容
- 快速部署额外消费者实例
2. 限流降级
- 对非核心业务实施限流
三、监控与排查
1. 消费者端监控
- Lag 值:消息积压数量
- 消费速率:单位时间处理消息数
- 处理耗时:单条消息处理时间
2. Broker 端监控
- CPU 使用率
- 内存使用情况
- 磁盘 I/O 性能
- 网络流量
3. 日志分析
- 检查消费者日志中的错误信息
- 排查异常堆栈
- 分析慢处理记录
四、优化消费者端策略
1. 水平扩展
- 增加消费者实例(不超过分区数)
2. 参数调整
- 启用批量处理,提高吞吐量
3. 并发处理
- 使用线程池并行处理消息
五、优化 Broker 配置
1. 资源升级
- 使用 SSD 提升磁盘性能
- 增加内存容量
- 提升网络带宽
2. 分区调整
- 增加 Topic 分区数,支持更多并行消费
3. 配置优化
- 调整日志保留策略和复制因子
- 磁盘空间不足时,开启日志压缩
- 对于状态更新类 Topic,可配置为只保留每个 Key 的最新值