我有一个现有的avro文件,我想将文件数据推送到kafka中,但无法正常工作
/usr/bin/kafka-console-producer --broker-list test:9092 --topic test < part-m-00000.avro
谢谢
答案 0 :(得分:2)
您需要先下载avro-tools JAR文件
然后从文件中获取架构
java -jar avro-tools.jar getschema part-m-00000.avro > schema.avsc
然后安装jq
,因为它将以分钟格式帮助该架构文件
接下来,理想情况下,Kafka中的Avro消息不应包含每个记录的架构,因此,如果您从Confluent(或从Hortonworks安装的Avro Schema Registry)安装了Avro Schema Registry,它将提高整体主题吞吐量和网络使用率。尚未尝试)。
在工作之后,您已经下载了Confluent Platform的其余部分,有一个脚本可以生成Avro数据,但是要使用它,您需要来自Avro文件的JSON记录。再次使用avro工具来获取它
java -jar avro-tools.jar tojson part-m-00000.avro > records.json
注意-此输出文件将明显大于Avro文件
现在,您可以使用将发送到注册表的模式进行生成,并将二进制avro数据输入到主题中,该主题将从将模式应用于JSON记录转换而来
bin/kafka-avro-console-producer \
--broker-list localhost:9092 --topic test \
--property schema.registry.url=http://localhost:8081 \
--property value.schema="'$(jq -r tostring schema.avsc)'" < records.json
注意:在此命令前运行jq -r tostring schema.avsc
,确保它不是一个转义的JSON字符串
如果输出的JSON文件太大,您也许还可以将avro-tools输出流式传输到生产者
替换
< records.json
使用
< $(java -jar avro-tools.jar tojson part-m-00000.avro)
答案 1 :(得分:1)
如果要发布Avro消息,可以尝试kafka-avro-console-producer。
$ ./bin/kafka-avro-console-producer \
--broker-list localhost:9092 --topic test \
--property value.schema='{"type":"record","name":"myrecord","fields":[{"name":"f1","type":"string"}]}' < avrofile.avro
它是融合的开源软件包的一部分 请在此处参考更多详细信息。 https://docs.confluent.io/3.0.0/quickstart.html
P.S。找不到最新版本的命令