在kafka消费者文档https://kafka.apache.org/10/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html中,它指出需要注意确保每隔一段时间调用一次轮询,否则经纪人会认为消费者已经死亡 .
最可靠的程序非常复杂:
对于消息处理时间变化不可预测的用例,这些选项都不够 . 处理这些情况的推荐方法是将消息处理移动到另一个线程,这允许消费者在处理器仍在工作时继续调用poll . 必须注意确保承诺的抵消不会超过实际位置 . 通常,您必须禁用自动提交并仅在线程完成处理后手动提交记录的已处理偏移量(取决于您需要的传递语义) . 另请注意,您需要暂停分区,以便在线程处理完之前返回的内容之前,不会从轮询中收到任何新记录 .
Spring 天 Kafka 是否在引擎盖下为我处理这个问题?
1 回答
_1322692中提到的心跳非常简短 . 显然,心跳是由Spring-Kafka在另一个线程上管理的 .
您还可以阅读此github issue以阅读有关心跳的更多信息 .