• 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 条消息
    • 下游系统使用多线程来加速消费
    1. 增加期望的时间间隔 max.poll.interval.ms 参数值。
    2. 减少 poll 方法一次性返回的消息数量,即减少 max.poll.records 参数值。