3

请帮忙

我们有 2 个 kafka 主题。我想从 topic1 到 topic2 复制 10 条消息。

我尝试使用kafka-console-consumerkafka-console-producer

首先,我将 topic1 中的 10 条消息保存到某个目录:

for (( i=1; i<=10; i++ )); do bin/kafka-console-consumer.sh --bootstrap-server 1.1.2.3:9092 --group CONSUMER1 --topic TOPIC1 --max-messages 1 > /tmp/_topic/$i.msg; done;

然后我尝试使用 kafka-console-producer 将其发送到 topic2:

for (( i=1; i<=10; i++ )); do  bin/kafka-console-producer.sh --broker-list 1.1.2.4:9092 --topic TOPIC2 < /tmp/_topic/$i.msg; done;

我得到了错误 - 我的服务无法反序列化数据。我的问题是:

  1. 我的解决方案会起作用吗?
  2. 为什么我会收到此错误?
  3. 将消息从一个主题复制到另一个主题的最佳方法是什么?

UPD:我如何解决这个问题(感谢:Robin Moffatt):我使用 kafka-mirror 和这个 jar: https ://github.com/opencore/mirrormaker_topic_rename 我可以将消息从一个主题 kafka 复制到另一个主题簇

4

1 回答 1

9

你可以这样做kafkacat

kafkacat -b localhost:9092 -C -t source-topic -K: -e -o beginning -c10 | \
kafkacat -b localhost:9092 -P -t target-topic -K: 
  • |将第一个 kafkacat(-C消费者)的输出重定向到第二个 kafkacat(-P生产者)的输入
  • -c10意味着只消耗 10 条消息
  • -o beginning表示从话题的开头开始。

请注意,如果您有二进制数据(例如 Avro),这将不起作用。要正确执行此操作,请使用 Replicator 或 MirrorMaker2 和 ByteArrayConverter 之类的东西。

参考:https ://rmoff.net/2019/09/29/copying-data-between-kafka-clusters-with-kafkacat/

于 2020-04-02T13:11:21.060 回答