如何将主题从kafka群集复制到另一个kafka群集?

时间:2015-07-21 21:08:38

标签: apache-kafka

Kafka文档显示的一种方法是通过 kafka.tools.MirrorMaker 来实现这一目的。但是,我需要将一个主题(例如 test ,包含1个分区)(其内容和元数据)从生产环境复制到不存在连接的开发环境。我可以在环境之间进行简单的文件传输。 我的问题:如果我将 * .log .index test-0 文件夹移动到目标Kafka群集,那还不错?或者我还需要做更多的事情,比如我需要移动的元数据和ZooKeeper相关数据?

3 个答案:

答案 0 :(得分:3)

仅仅复制日志和索引是不够的 - kafka在zookeeper中存储偏移量和主题元数据。 MirrorMaker实际上是一个非常简单的工具,它将消费者生成源主题以及生成器到目标主题,并运行直到所有消费者都消耗源队列。您无法找到更简单的迁移主题的过程。

答案 1 :(得分:1)

使用kafkacat

除非您的数据是二进制的,否则

您可以使用库存的kafkacat。

将主题写入文件:

kafkacat -b broker:9092 -e -K, -t my-topic > my-topic.txt

将文件写回主题:

kafkacat -b broker:9092 -K, -t my-topic -l my-topic.txt

如果您的数据是二进制的,

很遗憾,您必须从this branch构建自己的kafkacat,这是尚未合并的PR。

将带有二进制值的主题写入文件:

kafkacat -b broker:9092 -e -Svalue=base64 -K, -t my-topic > my-topic.txt

将文件写回主题:

kafkacat -b broker:9092 -Svalue=base64 -K, -t my-topic -l my-topic.txt

答案 2 :(得分:0)

在您的情况下对我有用的是以下一系列操作:

  1. 在Kafka中创建主题,稍后您将在其中插入文件(具有1个分区和1个副本以及适当的retention.ms配置,以便Kafka不会删除您可能过时的段)。
  2. 停止您的Kafka和Zookeeper。
  3. 找到您在第1步中在Kafka中创建的0分区文件的位置(类似于kafka-logs-<hash>/<your-topic>-0)。
  4. 在此文件夹中,删除现有文件并将文件复制到其中。
  5. 启动Kafka和Zookeeper。

如果您的Kafka是从docker-compose运行的,那么它也可以工作(当然,您必须设置适当的卷)。