kafka服务器重启后重新读取偏移量

时间:2016-09-22 21:48:40

标签: apache-kafka

为Kafka使用者设置autocommit.enable选项会导致消费消息被提交,这意味着如果消费者崩溃,它将开始从最后提交的位置读取偏移量。

但是,如果我们重新启动kafka服务器,消费者是否会重新读取已提交的偏移量,或者此选项也适用于这种情况 - 在服务器重新启动后,只会消耗未读消息?

2 个答案:

答案 0 :(得分:2)

你问(有点):

  

消费者是否在提交的偏移量之前重新读取消息?

答案是否定的。一旦您的偏移量在服务器上提交,消费者就不会重新阅读任何消息(除非他们手动想要)。

但你可能想问自己这个问题:

  

消费者是否可以使用相同的消息多次   即使他们启用自动提交也是如此?

答案是"并非没有努力"。要了解原因,请阅读Kafka design的第4.6节。卡夫卡并不能为消费者提供一次性的交付保证。为了确保多个消费者不会消费相同的消息,您需要在消费者客户之间进行协调。

另一种选择是发送所有邮件idempotent。这样,如果多个消费者多次处理相同的消息并不重要。

答案 1 :(得分:1)

提交的偏移量适用于Kafka服务器重启,因为

  1. 当制作人发布消息时,它会获得一个偏移量 不可变的,并在服务器重启时保留
    1. 在Kafka 0.9中,并且提交的偏移量存储在主题__committed_offset(您可能想要检查此主题的名称)之后,这是在服务器重新启动时保留的
    2. 在0.9之前的Kafka中,提交的偏移量将存储在Zookeeper中,而zookeeper将保留在日志文件中的偏移量