【问题标题】:Why to use our own Offset Repository for Kafka为什么要使用我们自己的 Kafka 偏移存储库
【发布时间】:2021-05-07 15:31:21
【问题描述】:

我目前正在尝试为一个项目配置 Kafka。我对偏移存储库有点困惑。我知道这两个开箱即用的选项存储在 Kafka 或 Zookeeper 中,我还发现还有另一个选项(至少如果我们将 kafka 与 Apache camel 结合使用)我还可以在任何地方定义和初始化我自己的存储库文件系统。

我的问题是:是否存在存储在 Kafka 或 Zookeeper 中的偏移存储库不持久或不一致的情况?我最关心的是系统的任何部分(消费者、生产者、kafka 实例或 zookeeper 实例)意外关闭的情况。一旦这些组件重新启动,消费者是否会获得它停止从主题读取的偏移量?

共享卷/存储上的显式存储库是否有意义?

如果我的问题有什么不清楚的地方,请告诉我。

【问题讨论】:

    标签: java apache-kafka apache-camel kafka-consumer-api


    【解决方案1】:

    您可以将偏移量存储在应用程序附近并设置偏移量值以开始消费来自 Kafka 的记录。这一切都取决于你想做什么。

    是否存在存储在 Kafka 或 Zookeeper 中的偏移存储库不持久或不一致的情况?

    我现在什么都不记得了。

    我最关心的是系统的任何部分(消费者、生产者、kafka 实例或 zookeeper 实例)意外关闭的情况。一旦这些组件重新启动,消费者会获得它停止从主题读取的偏移量吗?

    这取决于您的应用程序的配置。如果您的应用程序在无法连接到 Kafka 时崩溃,并且应用程序配置为从 EARLIEST 开始消费。您将开始使用该主题的最早可用记录。

    如果您使用LATEST,它将从上次读取(并提交)的偏移量重新开始。

    如果您想跳到某个主题中保存的最新记录,您需要告诉您的消费者..

    #example
    //seek to end of the topic
    consumer.seekToEnd();
    

    请在 Confluent 网站和 Apache Kafka 网站上找到有关它的更多详细信息。

    【讨论】:

    • "如果您使用 LATEST,它将从上次读取(并提交)的偏移量重新开始。"这也不依赖于会话吗?如果消费者重新启动,则提交的信息也应该丢失。如果我错了,请纠正我。
    • 如果您选择 Kafka 存储您的偏移量,并且如果您使用同一个消费者组来消费来自同一个 Kafka 主题的数据:它不会丢失。
    • 你可以在你的机器上做一个小实验。安装 Kafka 并与 Kafka 消费者和生产者一起玩。为某个主题生成 1 条消息,重新启动 Kafka,然后尝试使用同一消费者组再次消费该主题。
    猜你喜欢
    • 2012-05-23
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    相关资源
    最近更新 更多