我正在调试一些卡住的消耗卡夫卡的应用程序。该应用程序运行正常(正常运行,没有内存问题),但未处理任何消息。
这不是我的代码,所以我发现了(大部分)代码。但是,我在一些日志中发现,提交的偏移量(KafkaConsumer.committed
)在kafka分区(KafkaConsumer.beginningOffset
)中可用的第一个偏移量之前。例如,我有:
我们在提交偏移量的方式上可能存在一些错误(使用KafkaConsumer.commitSync
,而enable.auto.commit
为false)。但这不是这里的问题。
无论如何,在查询消息时,我都无法理解kafka代码。它会什么也不发送,消息从beginningOffset开始,失败,...?
基本上,这是应用卡住的潜在原因吗?
答案 0 :(得分:2)
根据the docs,如果您有这样的无效偏移,auto.offset.reset
将开始执行并使用您选择的设置(默认为latest
)移动位置到日志中的适当位置。
文档中的措辞如下:
auto.offset.reset: What to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server (e.g. because that data has been deleted)
这似乎包括您上面描述的情况。