You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于数组形式的Avro Schema手动生产Kafka消息?

手动生产符合Avro Schema的Kafka消息方案

问题排查

你手动发送的JSON存在两个核心问题:

  1. 语法错误:"ddd": "ddd", 末尾多了一个逗号,这会直接导致JSON解析失败
  2. 根Schema未明确:你的Schema是包含多个记录的数组,Java代码发送时默认绑定了MainAvro作为根类型,但手动发送时需要显式指定该根类型,否则工具无法识别要使用的结构

修正后的合法JSON消息

先修正语法错误,得到符合结构要求的JSON:

{
    "aaa": {
        "ccc": "ccc",
        "xxx": "xxx"
    },
    "bbb": {
        "ddd": "ddd"
    }
}

手动发送的具体操作

如果使用kafka-avro-console-producer工具发送,分两种场景处理:

场景1:直接传入完整Schema发送

kafka-avro-console-producer \
  --broker-list <kafka-broker地址> \
  --topic <目标topic名称> \
  --schema '[{"type":"record","name":"BbbAvro","fields":[{"name":"ddd","type":"string"}]},{"type":"record","name":"AaaAvro","fields":[{"name":"ccc","type":"string"},{"name":"xxx","type":"string"}]},{"type":"record","name":"MainAvro","fields":[{"name":"bbb","type":"BbbAvro"},{"name":"aaa","type":"AaaAvro"}]}]'

场景2:关联Schema Registry发送

如果你的集群已配置Schema Registry,且该Schema已通过Java代码自动注册,可简化命令:

kafka-avro-console-producer \
  --broker-list <kafka-broker地址> \
  --topic <目标topic名称> \
  --property schema.registry.url=<schema-registry地址> \
  --property value.schema.name=MainAvro

额外注意事项

  • 字段名、类型严格匹配Schema定义,大小写敏感
  • 若Schema中字段允许为null,未赋值的可选字段需显式设为null
  • JSON格式支持压缩或格式化,但必须保证语法完全合法

内容的提问来源于stack exchange,提问作者Hayami Pysh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 08:47:13