如何将JSON文件中每条数据作为独立消息加载到Kafka中
解决方案
方法一:使用jq工具拆分(推荐)
这是最稳妥的方案,依赖jq对JSON格式的严格解析能力,不会出现格式拆分错误:
- 执行命令:
jq -c . mydata.json | kafkacat -P -b localhost:29092 -t student_data
- 命令说明:
jq -c . mydata.json:jq会自动识别输入文件中连续的多个独立JSON对象,-c参数将每个解析后的JSON对象压缩为单行输出,每个学生对应一行输出- 管道符将单行输出传递给kafkacat,kafkacat生产模式默认将每一行作为一条独立消息发送到Kafka主题
- 验证结果:
执行以下消费命令统计消息条数,返回结果为2即代表导入成功:
kafkacat -C -b localhost:29092 -t student_data -e -q | wc -l
方法二:自定义分隔符拆分(无需额外依赖)
如果环境中无法安装jq,且你的JSON文件中每个学生对象的结尾}都单独占一行,可以用awk自定义分隔符拆分:
awk 'BEGIN{buf=""} {buf=buf $0 "\n"} /^}$/ {print buf; buf=""}' mydata.json | kafkacat -P -b localhost:29092 -t student_data -D $'\x00'
注:该方案仅适配你提供的示例文件格式,格式有变动时容易出现拆分错误,优先推荐方案一。
原命令失败原因
kafkacat生产模式下默认将完整输入流作为单条消息发送,没有做内容拆分,因此整个文件内容被写入为一条消息。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

