- Consumer 客户端在提交位移时出现了错误或异常,而且还是那种不可恢复的严重异常
- 通常发生在手动提交位移时
- 当消息处理的总时间超过预设的
max.poll.interval.ms
参数值时,Consumer 被提出 group - 导致消费者组开启了 Rebalance 过程,并且将要提交位移的分区分配给了另一个消费者实例
- 当消息处理的总时间超过预设的
- 如果你同时出现了设置相同 group.id 值的消费者组程序和独立消费者程序,那么当独立消费者程序手动提交位移时,Kafka 就会立即抛出 CommitFailedException 异常
- 通常发生在手动提交位移时
- 缩短单条消息处理的时间
- 让最后的消费总时间其小于
max.poll.interval.ms
默认值 5分钟
- 让最后的消费总时间其小于
- 增加 Consumer 端允许下游系统消费一批消息的最大时长,即 Consumer 端参数
max.poll.interval.ms
- 在最新版的 Kafka 中,该参数的默认值是 5 分钟。如果消费逻辑不能简化,那么提高该参数值是一个不错的办法。
- Kafka 0.10.1.0 之前的版本是没有这个参数的,因此如果你依然在使用 0.10.1.0 之前的客户端 API,那么
- 需要增加
session.timeout.ms
参数的值- 但是
session.timeout.ms
参数还有其他的含义,可能会带来其他影响
- 但是
- 减少下游系统一次性消费的消息总数,即 Consumer 端参数 max.poll.records 的值
- 当前该参数的默认值是 500 条,表明调用一次
KafkaConsumer.poll
方法,最多返回 500 条消息
- 当前该参数的默认值是 500 条,表明调用一次
- 下游系统使用多线程来加速消费
- 增加期望的时间间隔 max.poll.interval.ms 参数值。
- 减少 poll 方法一次性返回的消息数量,即减少 max.poll.records 参数值。