背景

扩缩容、实例重启、网络波动都会触发 rebalance。处理不好就会出现消费停顿、重复处理和延迟暴涨。

实践要点

  1. 处理逻辑幂等化
  2. offset 提交时机明确
  3. 重平衡回调里做好 flush
for msg := range claim.Messages() {
    if err := handle(msg); err == nil {
        session.MarkMessage(msg, "")
    }
}

总结

消费者稳定性的上限,取决于你对 rebalance 的设计,而不是对“正常流量”的设计。


消息系统里,异常路径才是主路径。