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

从混合类型JSON生成Kafka写入命令的AVRO Schema遇阻求助

解决方案:处理AVRO Schema中混合类型数组的问题

针对你的Kafka写入命令JSON结构,要解决regs子数组混合字符串与整数类型的问题,有两种可行方案:

方案1:使用联合类型定义数组元素

AVRO支持联合类型(Union),可以指定数组元素为string或int类型的集合。修改后的Schema如下:

{
  "namespace": "aa.hivekafka.abc",
  "type": "record",
  "name": "d_write_cmd",
  "fields": [
    {
      "name": "devId",
      "type": "string"
    },
    {
      "name": "msgId",
      "type": "long"
    },
    {
      "name": "addr",
      "type": "int"
    },
    {
      "name": "cmd",
      "type": "string"
    },
    {
      "name": "regs",
      "type": {
        "type": "array",
        "items": {
          "type": "array",
          "items": ["string", "int"]
        }
      }
    }
  ]
}
  • 核心修改:将子数组的items从单一string改为联合类型["string", "int"],这样AVRO会接受字符串或整数类型的元素。
  • 注意:联合类型的顺序不影响匹配,但如果需要指定默认值,默认值的类型必须是联合列表中的第一个类型。

方案2:将子数组改为Record类型(更规范的做法)

观察你的JSON结构,regs的子数组每个元素有固定的业务含义(比如地址字符串、长度整数、类型字符串、计数整数、值整数),用数组存储混合类型并不符合AVRO的设计理念,也不利于后续维护。更规范的方式是将子数组替换为Record类型:

调整后的JSON结构(可选,若业务允许)

{
  "devId": "ABCABCABC",
  "msgId": 207,
  "addr": 13,
  "cmd": "write",
  "regs": [
    {
      "regAddr": "0x00AF",
      "length": 16,
      "dataType": "H",
      "count": 1,
      "value": 50
    }
  ]
}

对应的AVRO Schema

{
  "namespace": "aa.hivekafka.abc",
  "type": "record",
  "name": "d_write_cmd",
  "fields": [
    {
      "name": "devId",
      "type": "string"
    },
    {
      "name": "msgId",
      "type": "long"
    },
    {
      "name": "addr",
      "type": "int"
    },
    {
      "name": "cmd",
      "type": "string"
    },
    {
      "name": "regs",
      "type": {
        "type": "array",
        "items": {
          "type": "record",
          "name": "RegWriteItem",
          "fields": [
            {"name": "regAddr", "type": "string"},
            {"name": "length", "type": "int"},
            {"name": "dataType", "type": "string"},
            {"name": "count", "type": "int"},
            {"name": "value", "type": "int"}
          ]
        }
      }
    }
  ]
}
  • 优势:明确每个字段的业务含义,类型约束更清晰,后续扩展或修改字段更方便,也更符合AVRO的结构化设计原则。

内容的提问来源于stack exchange,提问作者Pattatharasu Nataraj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 01:58:15