【问题标题】:How to make kafka consumer to read from last consumed offset but not from beginning如何让kafka消费者从上次消费的偏移量而不是从头开始读取
【发布时间】:2016-02-14 01:29:24
【问题描述】:

我是 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

有没有办法从上次消费的偏移量中获取消息。?

【问题讨论】:

    标签: apache-kafka kafka-consumer-api


    【解决方案1】:

    在消费者配置中设置auto.offset.reset=earliest 和一个固定的group.id=something 将在最后提交的偏移处启动消费者。在您的情况下,它应该在 7:20 的第一条消息开始消费。如果您希望它在启动后开始阅读发布的消息,那么auto.offset.reset=latest 将忽略在 7:20 发送的 10 条消息,并在启动后阅读任何进来的消息。

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

    【讨论】:

    • 只是为了确保我理解得很好。当你说:“如果你想让它从头开始,把消费者组 ID 改成唯一的”,那是否意味着当我们要读取最新的时,我们必须使用一个已经存在的组 ID?
    • 对我来说,每次都是从头开始。
    【解决方案2】:

    我是 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] 的开头或仅从日志的结尾读取。日志结束是指消费者启动后发布的所有消息。

    【讨论】:

    • 是的,如果我们给出任何组 id,那么数据将从最后一个消费点读取。如果我们在没有 group id 的情况下运行,它只考虑启动后的数据.. 谢谢..
    • 是否也可以通过控制台消费者为特定消费者组提交偏移量?
    • 如果 auto.offset.reset=earliest 没有在 consumer.properties 中设置,这将不起作用
    【解决方案3】:

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

    【讨论】:

    • @Srini 您不必将此属性设置为数值,此属性的值应为“最大”,以便从流的末尾开始使用。
    • 为我工作。谢谢!我刚刚在 consumer.properties 文件中添加了以下行: auto.offset.reset=largest
    • 谁能解释为什么最大?如果在发送这 10 条消息时消费者没有开启,并且当消费者开启时,earlyst 工作正常,auto.offset.reset=earliest 会消耗所有未使用的 10 条消息
    猜你喜欢
    • 2019-01-18
    • 2016-09-09
    • 2017-12-13
    • 2016-03-11
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多