我有一个现有的 avro 文件,我想将文件数据推送到 kafka 但它不起作用
/usr/bin/kafka-console-producer --broker-list test:9092 --topic test < part-m-00000.avro
Run Code Online (Sandbox Code Playgroud)
谢谢
您需要先下载 avro-tools JAR 文件
然后从文件中获取模式
java -jar avro-tools.jar getschema part-m-00000.avro > schema.avsc
Run Code Online (Sandbox Code Playgroud)
然后安装,jq因为它会以一种分钟的格式帮助架构文件
接下来,理想情况下,Kafka 中的 Avro 消息不应包含每条记录的模式,因此如果您安装了 Confluent(或 Hortonworks 的 Avro Schema Registry,但我还没有安装),它将提高您的整体主题吞吐量和网络使用率尝试一下)。
完成后,您下载了 Confluent Platform 的其余部分,有一个用于生成 Avro 数据的脚本,但是要使用它,您需要来自 Avro 文件的 JSON 记录。再次使用 avro-tools 获取
java -jar avro-tools.jar tojson part-m-00000.avro > records.json
Run Code Online (Sandbox Code Playgroud)
注意- 此输出文件将明显大于 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
Run Code Online (Sandbox Code Playgroud)
注意:jq -r tostring schema.avsc在此命令之前运行,确保它不是转义的 JSON 字符串
如果输出 JSON 文件太大,您也可以将 avro-tools 输出流式传输到生产者
代替
< records.json
Run Code Online (Sandbox Code Playgroud)
和
< $(java -jar avro-tools.jar tojson part-m-00000.avro)
Run Code Online (Sandbox Code Playgroud)
替代解决方案包括读取 Spark 中的 Avro 文件,然后将这些记录转发到 Kafka
| 归档时间: |
|
| 查看次数: |
4180 次 |
| 最近记录: |