背景
扩缩容、实例重启、网络波动都会触发 rebalance。处理不好就会出现消费停顿、重复处理和延迟暴涨。
实践要点
- 处理逻辑幂等化
- offset 提交时机明确
- 重平衡回调里做好 flush
for msg := range claim.Messages() {
if err := handle(msg); err == nil {
session.MarkMessage(msg, "")
}
}
总结
消费者稳定性的上限,取决于你对 rebalance 的设计,而不是对“正常流量”的设计。
消息系统里,异常路径才是主路径。