如何重置Kafka偏移以匹配尾部位置?

Dav*_*Mar 3 java apache-kafka apache-storm apache-zookeeper

我们正在使用Storm与Kafka和ZooKeeper.我们遇到了一种情况,我们不得不删除一些主题并用不同的名称重新创建它们.除了从新主题名称中读取之外,我们的卡夫卡鲸鱼喷水保持不变.但是现在,当尝试从新主题中读取时,spouts正在使用旧主题分区的偏移量.因此,my-topic-name分区0的尾部位置将为500,但偏移量将为10000.

有没有办法重置偏移位置,以便它匹配主题的尾部?

Mat*_*Sax 5

有多个选项(因为Storm KafkaSpout没有提供任何API来定义起始偏移).

  1. 如果您想从日志尾部使用消费者,则应删除旧的偏移量
    • 取决于你Kafka版本
      • (前0.9)你可以操纵ZK(这有点棘手)
      • (0.9+)或你尝试删除主题的偏移量__consumer_offsets(这也很棘手,也可能删除你想要保留的其他偏移量)
    • 如果没有偏移量,您可以使用自动偏移重置策略"最新"或"最大"(取决于您的Kafka版本)重新启动您的喷口
  2. 作为一种替代方案(我建议),您可以编写一个小型客户端应用程序,用于seek()以您需要的方式和commit()偏移量来操纵偏移量.此客户端必须使用与您相同的组ID,KafkaSpout并且必须订阅相同的主题.此外,您需要确保此客户端应用程序正在运行单个使用者组成员,以便分配所有分区.
    • 为此,您要么寻找到日志的末尾并提交
    • 或者您提交了无效的偏移量(如-1)并依赖自动偏移重置配置"最新"或"最大"(取决于您的Kafka版本)

对于Kafka Streams,有一个"应用程序重置工具",可以执行类似的操作来处理已提交的偏移量.如果您想获得一些细节,可以阅读这篇博客文章http://www.confluent.io/blog/data-reprocessing-with-kafka-streams-resetting-a-streams-application/

(免责声明:我是帖子的作者,它是关于Kafka Streams的 - 但是,基本的偏移操作思想是相同的)