Apache kafka 将消息从一个卡夫卡主题复制到另一个卡夫卡主题

Apache kafka 将消息从一个卡夫卡主题复制到另一个卡夫卡主题,apache-kafka,Apache Kafka,我想从thr prod cluster中的一个Kafka集群/主题流到dev环境中的另一个Kafka集群中,以进行可伸缩性和更新测试 对于duck磁带解决方案,我将Kafka的消费者和制作人串联起来,但我的直觉告诉我应该有更好的方法。但是,我还没有找到任何好的解决办法。有人能帮我吗?如果您想将数据从一个集群复制到另一个集群,那么有一个名为MirrorMaker的卡夫卡工具 Kafka附带了一个用于在Kafka集群之间镜像数据的工具。该工具从源集群读取数据并写入目标集群。数据将从源集群中的主题读取

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


对于duck磁带解决方案,我将Kafka的消费者和制作人串联起来,但我的直觉告诉我应该有更好的方法。但是,我还没有找到任何好的解决办法。有人能帮我吗?

如果您想将数据从一个集群复制到另一个集群,那么有一个名为
MirrorMaker
的卡夫卡工具

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

下面是运行
MirrorMaker
工具的语法:

bin/kafka-run-class.sh kafka.tools.MirrorMaker
       --consumer.config consumer.properties
       --producer.config producer.properties --whitelist my-topic
您可以在kafka安装目录中找到此脚本。在这里,您需要提供
源集群的
消费者.properties
目标集群的
生产者.properties
。您可以通过
--whitelist
选项将哪些主题镜像到白名单中

你可以找到更多关于


注意:MirrorMaker将数据复制到与
源集群相同的
目标集群中的
topic\u name
Kafka基本上是一个消息队列,因此它有一个被动行为:某些东西必须将消息放入它(
生产者
),而且必须有东西从它(
消费者
)中提取消息

如果您想在两个卡夫卡主题之间建立一种管道,以便来自一个主题的消息将自动转到另一个主题,那么您需要一些代码,这些代码将具有从第一个主题到第二个主题的consumer和producer属性

根据您的编程语言,您可以选择一些现成的、有良好文档记录的生产者和/或消费者解决方案


对于更复杂的情况,您可以查看Apache Storm等。

而mirror makes非常适合跨集群解决方案,但是,对于同一集群,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

如果您需要将消息从一个主题复制到另一个主题,可能需要一些额外的逻辑或转换,您也可以使用Kafka Streams

和例子


或者,检查
MirrorMaker

伟大的工具!但是如果我只需要来自主题T的最后N条消息呢?在我们的例子中,prod主题太大了,我们每天只需要一部分(比如说最后100万条消息)就可以在uat环境中使用。原始主题和新主题中的偏移量会发生什么变化?在我的例子中,我希望从原始主题到新主题获取部分数据。对于那些想知道的人,kafkacat是Magnus Edenhill的一个工具,可以在GitHub上找到。当我尝试此功能时,它复制了主题,但没有复制消息。新主题中没有反映关键点。此外,多行消息似乎减少到任意一行,因此复制不一致(不适用于我。此操作仅复制消息值:它不会保留标题和键。您也可以使用其他使用者组。例如:Consumer1使用groupId“first group name”Consumer2使用groupId“second group name”,以便其中两个使用者可以阅读相同的消息,而无需添加新主题。只需修改即可你的话题的听者要适应这一点。