如何将主题从kafka集群复制到另一个kafka集群?
How to copy a topic from a kafka cluster to another kafka cluster?
如 Kafka 文档所示,一种方法是通过 kafka.tools.MirrorMaker,它可以做到这一点。但是,我需要将一个主题(比如 test 与 1 个分区)(其内容和元数据)从生产环境复制到开发环境没有连接的地方。不过,我可以在环境之间进行简单的文件传输。
我的问题:如果我将 *.log 和 .index 从文件夹 test-0 移动到目标 Kafka 集群是否足够好?或者还有更多我需要做的事情,比如我需要移动的元数据和 ZooKeeper 相关数据?
仅复制日志和索引是不够的 - kafka 在 zookeeper 中存储偏移量和主题元数据。 MirrorMaker 实际上是一个非常简单的工具,它为源主题生成消费者,为目标主题生成生产者,并运行直到所有消费者都消费了源队列。您找不到更简单的主题迁移过程。
在您的场景中,对我有用的是以下操作序列:
- 在 Kafka 中创建主题,稍后您将在其中插入文件(具有 1 个分区和 1 个副本以及适当的
retention.ms
配置,以便 Kafka 不会删除您可能已过时的段)。
- 停止你的 Kafka 和 Zookeeper。
- 找到您在第 1 步中在 Kafka 中创建的 0 分区文件的位置(类似于
kafka-logs-<hash>/<your-topic>-0
)。
- 在此文件夹中,删除现有文件并将您的文件复制到其中。
- 启动 Kafka 和 Zookeeper。
如果您的 Kafka 是 docker-compose 的 运行,这也适用(当然,您必须设置适当的音量)。
使用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
如 Kafka 文档所示,一种方法是通过 kafka.tools.MirrorMaker,它可以做到这一点。但是,我需要将一个主题(比如 test 与 1 个分区)(其内容和元数据)从生产环境复制到开发环境没有连接的地方。不过,我可以在环境之间进行简单的文件传输。 我的问题:如果我将 *.log 和 .index 从文件夹 test-0 移动到目标 Kafka 集群是否足够好?或者还有更多我需要做的事情,比如我需要移动的元数据和 ZooKeeper 相关数据?
仅复制日志和索引是不够的 - kafka 在 zookeeper 中存储偏移量和主题元数据。 MirrorMaker 实际上是一个非常简单的工具,它为源主题生成消费者,为目标主题生成生产者,并运行直到所有消费者都消费了源队列。您找不到更简单的主题迁移过程。
在您的场景中,对我有用的是以下操作序列:
- 在 Kafka 中创建主题,稍后您将在其中插入文件(具有 1 个分区和 1 个副本以及适当的
retention.ms
配置,以便 Kafka 不会删除您可能已过时的段)。 - 停止你的 Kafka 和 Zookeeper。
- 找到您在第 1 步中在 Kafka 中创建的 0 分区文件的位置(类似于
kafka-logs-<hash>/<your-topic>-0
)。 - 在此文件夹中,删除现有文件并将您的文件复制到其中。
- 启动 Kafka 和 Zookeeper。
如果您的 Kafka 是 docker-compose 的 运行,这也适用(当然,您必须设置适当的音量)。
使用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