CommitFailedException异常处理和预防
当然
1.常见场景 max.poll.interval.ms超时
当消息处理的总时间超过预设的max.poll.interval.ms 参数就会发生CommitFailedException异常
比如
Properties props = new Properties();
…
props.put("max.poll.interval.ms", 5000);
consumer.subscribe(Arrays.asList("test-topic"));
while (true) {
ConsumerRecords<String, String> records =
consumer.poll(Duration.ofSeconds(1));
// 使用 Thread.sleep 模拟真实的消息处理逻辑
Thread.sleep(6000L);
consumer.commitSync();
}
1.1解决方案
2.特殊场景 StandaloneConsumer独立消费者和消费者组同时使用
如果你的应用中同时出现了设置相同 group.id 值的消费者组程序和独立消费者程序,那么当独立消费者程序手动提交位移时,Kafka 就会立即抛出CommitFailedException 异常因为 Kafka 无法识别这个具有相同 group.id 的消费者实例,于是就向它返回一个错误,表明它不是消费者组内合法的成员。
并且以上四种的解决方案都是无效的,当如果出现独立消费者可以往这个角度思考。
如有错误欢迎指正