Apache kafka 卡夫卡使用者覆盖未提交消息的偏移量

Apache kafka 卡夫卡使用者覆盖未提交消息的偏移量,apache-kafka,Apache Kafka,概述:我有一个带有Kafka Consumer的lambda设置,它轮询来自Kafka集群的消息,并将它们索引到Elasticsearch域。lambda每一分钟调用一次,这意味着Kafka使用者的客户端id会发生变化,但Kafka组id始终保持不变。需要注意的一个关键点是,使用者已禁用自动提交功能,并且一旦消息成功索引,我们将手动提交偏移量。在索引失败的情况下,我们的代码只捕获错误并记录它,而不提交这些消息 但是,我注意到,当索引失败时,虽然使用者没有提交未索引的消息,但在随后的轮询中也看不到

概述:我有一个带有Kafka Consumer的lambda设置,它轮询来自Kafka集群的消息,并将它们索引到Elasticsearch域。lambda每一分钟调用一次,这意味着Kafka使用者的客户端id会发生变化,但Kafka组id始终保持不变。需要注意的一个关键点是,使用者已禁用自动提交功能,并且一旦消息成功索引,我们将手动提交偏移量。在索引失败的情况下,我们的代码只捕获错误并记录它,而不提交这些消息

但是,我注意到,当索引失败时,虽然使用者没有提交未索引的消息,但在随后的轮询中也看不到这些消息。在未编制索引的消息之后发布的任何消息都会占用未提交消息的偏移量

为了重新创建此场景,我运行了一个小测试并保存了日志:
h

从日志中,您可以看到在16:06轮询了一条大小为415kb的记录,但未能将其索引到ES。在16:06之后的后续调查中,未提交的信息无处可寻。16点11分,我向卡夫卡发布了另一条3kb大小的消息,消费者成功地对其进行了轮询,尽管其偏移量与之前未提交的消息相同。此新邮件已成功编制索引并提交


我是卡夫卡的新手,我试图理解为什么会发生这种情况。我还将auto.offset.reset的配置值设置为“最早”,以便使用者能够看到最早的未提交消息。我将非常感谢任何有关这方面的帮助

您使用普通消费者而不是Kafka Connect有什么特殊原因吗?
auto.offset.reset
仅在
group.id
尚未初始化,且未提交数据没有关联时才适用。