Kafka - 如何使用高级消费者在每条消息之后提交偏移量?

时间:2014-08-13 18:34:11

标签: message-queue apache-zookeeper distributed-transactions apache-kafka

我正在使用Kafka的高级消费者。因为我使用Kafka作为交易队列'对于我的应用程序,我需要确保我不会错过或重读任何消息。我有两个问题:

  1. 如何将偏移量提交给zookeeper?在每次成功使用消息后,我将关闭自动提交和提交偏移量。我似乎无法找到如何使用高级消费者执行此操作的实际代码示例。任何人都可以帮我这个吗?

  2. 另一方面,我听说承诺给动物园管理员可能会很慢,所以另一种方式可能是在本地跟踪偏移?这种替代方法是否可取?如果是的话,你会怎么做?

1 个答案:

答案 0 :(得分:22)

http://kafka.apache.org/documentation.html#consumerconfigs有两个相关设置。

auto.commit.enable

auto.commit.interval.ms

如果你想设置它使得消费者在每条消息之后提交偏移量,那将是困难的,因为唯一的设置是在定时器间隔之后,而不是在每条消息之后。您必须对传入的消息进行一些速率预测,并相应地设置时间。

一般情况下,建议不要将此间隔设置得太小,因为它会大大增加zookeeper中的读/写速率,并且zookeeper会因为它的仲裁次数非常一致而变慢。