如何让kafka消费者从上次消费的偏移中读取,而不是从一开始就读取

时间:2015-11-12 16:21:38

标签: apache-kafka kafka-consumer-api

我是kafka的新手,并试图了解是否有办法从最后消耗的偏移量中读取消息,但不是从开头就读取消息。

我正在写一个案例,所以我的意图不会偏离。

Eg:
1) I produced 5 messages at 7:00 PM and console consumer consumed those.
2) I stopped consumer at 7:10 PM
3) I produced 10 message at 7:20 PM. No consumer had read those messages.
4) Now, i have started console consumer at 7:30 PM, without from-beginning.
5) Now, it Will read the messages produced after it has started. Not the earlier ones, which were produced at 7.20 PM

有没有办法从最后消耗的偏移中获取消息。?

3 个答案:

答案 0 :(得分:9)

  

我是kafka的新手,并试图了解是否有办法从上次消费的偏移中读取消息,但不是从开始。

是的,可以使用控制台消费者来读取上次消耗的偏移量。您必须在调用kafka-console-consumer时添加 consumer.config 标志。

实施例: -

[root@sandbox bin]# ./kafka-console-consumer.sh --topic test1 --zookeeper localhost:2181 --consumer.config /home/mrnakumar/consumer.properties

此处 /home/mrnakumar/consumer.properties 是一个包含 group.id 的文件。 以下是/home/mrnakumar/consumer.properties的外观: -

  

group.id = consoleGroup

使用consumer.config,可以从 [通过使用--from-beginning] 开始读取,也可以从Log的结尾读取。日志结束表示消费者启动后发布的所有消息。

答案 1 :(得分:3)

您应该在auto.offset.reset上的消费者配置中设置largest参数,这样它将在最后提交的偏移量之后读取所有消息。

答案 2 :(得分:0)

在使用者配置中设置auto.offset.reset=earliest和固定的group.id=something将在最后提交的偏移量处启动使用者。就您而言,它应该在7:20的第一条消息开始使用。如果您希望它开始阅读在它开始后发布的消息,那么auto.offset.reset=latest将忽略在7:20发送的10条消息,并读取它开始后出现的任何消息。

如果希望它从头开始,则必须在第一个seekToBeginning之后调用consumer.poll(),或将使用者组ID更改为唯一的ID。