当前位置: 首页 > 知识库问答 >
问题:

Avro Schema不向下兼容

锺离嘉茂
2023-03-14

我有一个avro模式定义,比如-

    @namepsace("com.test.customer)
protocol customerData {
    record customerData {
        union {null, string} id;
        union {null, string} firstname;
    }
}

上线后,我们增加了另一个领域-

@namepsace("com.test.customer)
protocol customerData {
    record customerData {
        union {null, string} id;
        union {null, string} firstname,
        union {null, string} customerType
    }
}

CusterType被定义为null, string。即使在向合流注册表注册架构时,我们也会收到错误-正在注册的架构与早期架构不兼容。

如果有什么原因,请告诉我们。我们通过显式地将customerType默认为null来解决这个问题,

Union{null, string}CusterType=null;

但不知何故,我觉得这不是必需的。请让我知道为什么即使模式被定义为{null,string}也会出现错误

共有1个答案

吴兴国
2023-03-14

“Union{null, string}CusterType”意味着CusterType可以为空,但默认值未定义。默认值可以是任何东西,比如

联合{null,string}customerType=“”;(空)

Union{null, string}CusterType=null;

您必须指定一个默认值,以便在字段丢失时,Avro知道该字段使用什么。

 类似资料:
  • 4.4.12 该版本支持了Websocket帧压缩,修改了push方法的第三个参数为flags,如未设置strict_types,代码兼容性不受影响,否则会出现bool无法隐式转换为int的类型错误,此问题将在v4.4.13修复 4.4.1 注册的信号不再作为维持事件循环的条件,如程序只注册了信号而未进行其他工作将被视为空闲并随即退出 (此时可通过注册一个定时器防止进程退出) 4.4.0 和PHP

  • ngrok承诺有关其接口的兼容性和稳定性,以便您可以自信地构建集成顶部,知道在升级到较新版本时期望的更改。 兼容性承诺 Point Release (2.0.0 -> 2.0.1) - ngrok承诺在点发布之间没有突破性的变化 Minor Version Change (2.0 -> 2.1) - ngrok可能会进行小的更改,打破兼容性的次要版本更改。 ngrok承诺,任何破坏性更改将由一个版

  • 问题内容: 我了解到Python 3不向后兼容。 使用旧版本的Python会不会影响很多应用程序? Python 3的开发人员怎么不认为使其向后兼容绝对必要? 问题答案: Python 3.0向后兼容吗?为什么? Python 3.0实现了许多非常有用的功能并打破了向后兼容性。它是故意这样做的,因此即使Python 2.x代码在Python 3.x下可能无法正常工作,也可以实现出色的功能。 因此,

  • 我已经开始使用Swagger。此时,我收到了一个swagger版本1.2的swagger文件。但是,如果我想用这个文件生成一些东西,它只会给我一堆看起来更像它的错误,只是忽略了我的swagger文件在1.2版规范中的事实,只是继续并根据规范的2.0版验证它。 我得到的一些错误: 缺少所需属性:路径 不允许附加属性:模型、apis、resourcePath、swaggerVersion、apiVer

  • 我正在我的项目中尝试Java8,我被困在与我的构建过程相关的错误中。 我正在使用ANT脚本,在某个时刻,我正在使用一些javascript(嵌入到ANT中)来执行一些特定于构建的操作。导致错误的脚本部分如下所示: 该项目使用Java 7或Java 6构建得很好,但在使用Java 8时,它会给我带来一些错误。这些错误与JS引擎的升级有关。 特别是我得到了以下例外: javax。剧本ScriptExc

  • 确保您可以轻松顺利地升级您的应用程序,这对我们是很重要的。这就是为什么我们只在主 要版本里程碑才会打破兼容性。你可能熟悉 语义版本控制 ,这 就是我们在所有的 CakePHP 项目中使用的通用准则。总之,语义版本控制意味着只有主要版 本(比如2.0,3.0,4.0)可以打破向后兼容性。次要版本(比如2.1,3.1,3.2)可能会引入新 的功能,但不能破坏兼容性。错误修复版本(比如2.1.2,3.0