将消息从一个Kafka主题复制到另一个kafka主题

Sew*_*Wee 12 apache-kafka

我想从thr prod集群中的Kafka集群/主题流入dev环境中的另一个Kafka集群,以进行可伸缩性和regrrssion测试.

对于鸭子磁带解决方案,我级联一个Kafka消费者和制作人,但我的直觉告诉我应该有更好的方法.但是,我还没有找到任何好的解决方案.谁能帮我?

avr*_*avr 13

如果要将数据从一个集群复制到另一个集群,则会调用一个kafka工具MirrorMaker.

Kafka附带了一个用于在Kafka集群之间镜像数据的工具.该工具从源群集读取并写入目标群集.将从源群集中的主题读取数据,并将其写入目标群集中具有相同名称的主题.

这是运行MirrorMaker工具的语法:

bin/kafka-run-class.sh kafka.tools.MirrorMaker
       --consumer.config consumer.properties
       --producer.config producer.properties --whitelist my-topic
Run Code Online (Sandbox Code Playgroud)

您可以在kafka安装目录中找到此脚本.在这里,您需要提供consumer.propertiessource clusterproducer.properties您的destination cluster.您可以通过--whitelist选项将哪些主题镜像到白名单.

您可以在集群之间找到有关镜像数据的更多信息

注: MirrorMaker将数据复制到相同topic_namedestination cluster作为source cluster

  • 很棒的工具!但是如果我只需要来自主题 T 的最后 N 条消息怎么办?在我们的例子中,prod 主题太大了,我们每天只需要其中的一部分(比如最后 1M 条消息)在 uat env 中使用。 (3认同)

cha*_*ank 8

虽然mirror 非常适合跨集群解决方案,但是,对于同一个集群,您的ducktap 解决方案还不错,因为MirrorMaker 假设您是从一个集群拉到另一个集群。

因此,您只想在同一集群中的不同主题之间复制数据的解决方案,kafkacat 是您的朋友。

export BOOTSTRAP_SERVERS=localhost:9096
export SOURCE_TOPIC=source_topic
export TARGET_TOPIC=target_topic

kafkacat -C -b $BOOTSTRAP_SERVERS -o beginning -e -t $SOURCE_TOPIC  | kafkacat -P -b $BOOTSTRAP_SERVERS  -t $TARGET_TOPIC
Run Code Online (Sandbox Code Playgroud)

  • 这些键不会反映在新主题中。此外,多行消息似乎被简化为任意一行,因此这是不一致的复制。:( (5认同)
  • 对于那些想知道的人,kafkacat 是 Magnus Edenhill 的一个工具,可以在 GitHub 上找到:https://github.com/edenhill/kafkacat (3认同)
  • 这仅复制消息值:它不会保留标头和键 (2认同)