Kafka如何在启用自动提交的同时处理提交的偏移量

How does Kafka handle the committed offset while enabling auto commit

我是 Kafka 的新手,正在尝试弄清楚它是如何工作的。

如果我是对的,Kafka 代理将在一个 poll 消费者中发送一堆消息。也就是说,当消费者调用函数poll时,会得到一堆消息,然后消费者会一条一条地处理这些消息。

现在,假设broker中有100条消息,从1到100。当消费者调用函数poll时,10条消息一起发送:1 - 10, 11 - 20.. .同时consumer会每隔5秒自动将committed的offset提交给broker

表示在某个时刻,消费者在处理第 15 条消息时正在发送提交的偏移量。

在这种情况下,我不知道提交的偏移量是 11 还是 14?

如果是11,表示如果broker由于某种原因需要重发,它会重发11到20的那串消息,但是如果是14,就意味着它会重发从11到20的那串消息14 到 23.

"In this case, I don't know which number is the committed offset, 11 or 14?"

自动提交将始终提交轮询期间获取的最高 偏移量。在您的情况下,它将返回 20,与客户端当前正在处理的偏移量无关。

我想这个例子向您展示了启用自动提交会带来一些缺点。我建议通过禁用它并仅在所有消息处理成功后才提交偏移量来自行控制提交的偏移量。但是,在某些用例中,您无需考虑即可启用自动提交。

"If it's 11, it means that if the broker needs to resend for some reason, it will resend the bunch of messages from 11 to 20, but if it's 14, it means that it will resend the bunch of messages from 14 to 23."

consumedcommitted 偏移之间存在差异。只有当您重新启动您的应用程序或消费者加入或离开您的客户的 consumerGroup 时,承诺的偏移量才会变得相关。否则,当应用程序 运行 时,poll 方法不会那么关心已提交的内容。我在另一个 .

中写了一些关于 committedconsumed 偏移之间的区别的更多细节