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

Avro 1.12.0嵌套记录重定义报错问题求助

解决Avro 1.12.0中同名嵌套Record的"Can't redefine"错误

针对你遇到的Avro 1.12.0升级后,两个avsc文件里的同名同结构嵌套Provenance Record触发ParseContext抛出"Can't redefine"错误的问题(对应Jira编号AVRO-4076),这里提供几个可行的解决办法:

  • 提取公共嵌套Record到独立文件
    把Provenance这个公共嵌套Record单独定义在一个avsc文件里,然后在MessageKey和Programme的avsc文件中通过全限定名称引用它。这样Avro解析时只会加载一次该schema,避免重复定义的冲突。
    示例:
    新建provenance.avsc:

    {
      "type": "record",
      "name": "Provenance",
      "namespace": "your.app.namespace",
      "fields": [
        // 这里填你的Provenance字段定义
      ]
    }
    

    在MessageKey.avsc和Programme.avsc中引用:

    {
      "type": "record",
      "name": "MessageKey",
      "namespace": "your.app.namespace",
      "fields": [
        {
          "name": "provenance",
          "type": "your.app.namespace.Provenance"
        }
      ]
    }
    
  • 统一嵌套Record的namespace
    如果不想拆分文件,确保两个avsc文件里的Provenance嵌套定义都显式指定相同的namespace,不要出现一个带namespace、一个不带的情况。这样解析器会识别为同一个schema,不会触发重复定义检查。

  • 临时降级Avro版本
    如果上述方案暂时无法落地,可以先降级到Avro 1.11.x及以前的版本,恢复之前的兼容行为,等待AVRO-4076官方修复完成后再升级。

  • 自定义ParseContext逻辑(进阶)
    要是必须使用1.12.0且不能修改avsc文件,可以修改Avro的ParseContext类中第219行附近的重复检查逻辑,忽略namespace不一致但结构完全相同的schema。不过这种方法需要维护自定义的Avro分支,仅作为临时应急方案,不推荐长期使用。

内容的提问来源于stack exchange,提问作者John Bubbles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:12:36