【问题标题】:How to copy a topic from a kafka cluster to another kafka cluster?如何将一个主题从一个 kafka 集群复制到另一个 kafka 集群?
【发布时间】:2020-09-02 18:08:10
【问题描述】:

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

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      使用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
      

      【讨论】:

        【解决方案3】:

        在您的场景中对我有用的是以下一系列操作:

        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 运行的,这也有效(当然,您必须设置适当的卷)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-12
          • 2014-06-26
          • 1970-01-01
          • 1970-01-01
          • 2016-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多