Apache kafka 将avro文件推送到卡夫卡

Apache kafka 将avro文件推送到卡夫卡,apache-kafka,avro,Apache Kafka,Avro,我有一个现有的avro文件,我想把文件数据推入卡夫卡,但它不起作用 /usr/bin/kafka-console-producer --broker-list test:9092 --topic test < part-m-00000.avro /usr/bin/kafka控制台制作人--代理列表测试:9092--主题测试

我有一个现有的avro文件,我想把文件数据推入卡夫卡,但它不起作用

/usr/bin/kafka-console-producer --broker-list test:9092 --topic test < part-m-00000.avro
/usr/bin/kafka控制台制作人--代理列表测试:9092--主题测试

谢谢

如果您想发布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
$。/bin/kafka avro控制台制作人\
--代理列表localhost:9092--主题测试\
--属性值.schema='{“type”:“record”,“name”:“myrecord”,“fields”:[{“name”:“f1”,“type”:“string”}]}'
它是confluent开源软件包的一部分 请参阅此处的更多详细信息


PS.在最新版本中找不到命令

您需要先下载avro tools JAR文件

然后从文件中获取模式

java -jar avro-tools.jar getschema part-m-00000.avro > schema.avsc
然后安装
jq
,因为它将在一分钟内对模式文件的格式有所帮助

其次,卡夫卡中的Avro消息理想情况下不应该包含每个记录的模式,因此如果您从Confluent(或Hortonworks,但我还没有尝试过)安装Avro模式注册表,则可以提高总体主题吞吐量和网络使用率

在这项工作完成之后,您下载了Confluent平台的其余部分,有一个用于生成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

<$(java-jar avro-tools.jar tojson part-m-00000.avro)


替代解决方案包括读取Spark中的Avro文件,然后将这些记录转发给卡夫卡

这行不通。。。Avro控制台使用者希望读取与值模式匹配的JSON格式的消息。另外,可能不应该链接到旧文档不清楚您在主题中期望的数据,但是Avro文件不是新行分隔的,架构也不是每行都有,所以即使这样做有效,使用者反序列化程序将很难读取对其他非常有用答案的dataMinor更正:
--property schema-registry.url=http://localhost:8081
应该是
--property schema.registry.url=http://localhost:8081
我发现您的架构不能包含任何等号。这是卡夫卡2.0中修复的错误
< records.json 
< $(java -jar avro-tools.jar tojson part-m-00000.avro)