gpt4 book ai didi

spring - Kafka 消费者没有正确提交偏移量

转载 作者:行者123 更新时间:2023-12-04 02:45:38 34 4
gpt4 key购买 nike

我有一个使用以下属性定义的 Kafka 消费者:

session.timeout.ms = 60000
heartbeat.interval.ms = 6000

我们注意到大约 2000 条消息的滞后,并看到消费者多次使用相同的消息(通过我们的应用程序日志)。另外,注意到一些消息需要大约 10 秒才能完全处理。我们怀疑消费者没有正确提交偏移量(或重复提交相同的旧偏移量),因此消费者接收到了相同的消息。

为了解决这个问题,我们引入了更多的属性:
auto.commit.interval.ms=20000 //To ensure that commit is happening only after processing of message is completed
max.poll.records=10 //To make the consumer pick only 10 messages in one go

And, we set the concurrency to 1.

这解决了我们的问题。滞后开始减少并最终变为 0。

但是,我仍然不清楚为什么会首先出现问题。
据我了解,默认情况下:
enable.auto.commit = true
auto.commit.interval.ms=5000

因此,理想情况下,消费者应该每 5 秒提交一次。如果在此时间范围内未完全处理消息,会发生什么情况?消费者正在提交什么偏移量?问题是否是由于轮询记录大小过大(默认为 500)导致的

另外,关于 poll() 方法,我读到:

The poll() call is issued in the background at the set auto.commit.interval.ms.



那么,最初如果 poll() 更早地每 5 秒发生一次(默认为 auto.commit.interval),为什么它不提交最新的偏移量?因为消费者还没有完成处理吗?然后,它应该在接下来的第 5 秒提交该偏移量。

有人可以回答这些查询并解释为什么会出现原始问题吗?

最佳答案

如果您使用 Spring for Apache Kafka,我们建议设置 enable.auto.commitfalse以便容器以更具确定性的方式提交偏移量(在每条记录之后或每批记录之后 - 默认)。
最有可能的问题是 max.poll.interval.ms默认为 5 分钟。如果您的一批消息花费的时间比这更长,您就会看到这种行为。您可以增加 max.poll.interval.ms或者,如您所做的那样,减少 max.poll.records .
关键是你必须处理小于 max.poll.interval.ms 的投票返回的记录。 .

Also, about the poll() method, I read that :

The poll() call is issued in the background at the set auto.commit.interval.ms.



那是不正确的; poll() 不会在后台调用;自 KIP-62 以来,心跳在后台发送。

关于spring - Kafka 消费者没有正确提交偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57400022/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com