将Avro文件推送到Kafka

时间:2018-08-03 01:36:11

标签: apache-kafka avro

我有一个现有的avro文件,我想将文件数据推送到kafka中,但无法正常工作

/usr/bin/kafka-console-producer --broker-list test:9092 --topic test < part-m-00000.avro

谢谢

2 个答案:

答案 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。找不到最新版本的命令