请帮助
我们有2个卡夫卡主题。我想从topic1开始将10条消息复制到topic2。
我尝试使用 kafka-console-consumer 和 kafka-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;
我遇到错误-我的服务无法反序列化数据。 我的问题是:
UPD: 我将如何解决这个问题(感谢:Robin Moffatt): 我使用kafka-mirror和这个jar: https://github.com/opencore/mirrormaker_topic_rename 这样我就可以将消息从一个主题kafka复制到一个集群中的另一个主题
答案 0 :(得分:2)
您可以使用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/