标准答案
- 同一消费组的并行度通常不能超过可分配分区数,单分区内的顺序约束还会限制批内并行。
- 消费者并发应与数据库连接、HTTP 配额、事务锁和单条处理耗时匹配。
- 批量拉取和并行处理要明确位点提交、失败重试和同 Key 顺序,不能只提高线程数。
- 通过 lag、最老消息、下游等待和错误率验证并行度是否带来真实收益。
题目解析
消息消费者的有效并行度先受可分配分区和同 Key 顺序约束,再受 CPU、数据库连接、HTTP 配额和事务能力约束。线程数超过这些边界,只会增加空转或下游等待。
并行拉取和批量处理时,位点提交必须覆盖已经成功完成且可恢复的工作。若先提交位点再处理任务,进程崩溃会造成消息丢失;若处理顺序不当,还会破坏同一 Key 的状态机。
调参要观察 lag、最老消息、处理时间、下游等待、重平衡和重复率。吞吐变高但积压年龄、错误率或数据库连接等待同时升高时,不应继续加消费者。
常见误区
- 误区:消费者数远大于分区数就能提高吞吐。改正:先确认分区分配和下游容量,空闲消费者只增加管理成本。
- 误区:并发处理不考虑同 Key 顺序。改正:按 Key 串行或使用版本校验,不能让并行任务乱序推进同一对象。
- 误区:位点提交早于所有并行任务完成。改正:只在对应任务成功且状态可恢复后提交,否则应允许重新投递。