架构注册表中的向后兼容性问题和不确定性

me_subhamsaraf

我有一个用例,其中有一个JSON,我想生成模式并从JSON中记录并发布记录。我已经配置了值序列化程序,并且架构设置是向后兼容的。

第一个JSON

字符串json =“ {\ n” +

     "    \"id\": 1,\n" +

     "    \"name\": \"Headphones\",\n" +

     "    \"price\": 1250.0,\n" +

     "    \"tags\": [\"home\", \"green\"]\n" +

     "}\n"
     ;

版本1模式已注册。

在Avro控制台使用者中收到的消息。

第二个JSON。

字符串json =“ {\ n” +

    "    \"id\": 1,\n" +

    "    \"price\": 1250.0,\n" +
    "    \"tags\": [\"home\", \"green\"]\n" +
    "}\n"
    ;

成功注册架构。已发送消息。

现在尝试发送成功发送的JSON 1

模式3:

字符串json =“ {\ n” +

    "    \"id\": 1,\n" +
    "    \"name\": \"Headphones\",\n" +

    "    \"tags\": [\"home\", \"green\"]\n" +
    "}\n"
    ;

在这种情况下出错。由以下原因引起:io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException:正在注册的架构与早期的架构不兼容。错误代码:409

如何注册从第二个JSON生成的模式,而拒绝第三个JSON?虽然我没有用于删除字段的任何默认密钥?是Schema Registry始终接受第一版吗?(第2个模式超过第1个)

模式注册表中的模式

版本1方案

{“字段”:[

{

  "doc": "Type inferred from '1'",

  "name": "id",

  "type": "int"

},

{

  "doc": "Type inferred from '\"Headphones\"'",

  "name": "name",

  "type": "string"

},

{

  "doc": "Type inferred from '1250.0'",

  "name": "price",

  "type": "double"

},

{

  "doc": "Type inferred from '[\"home\",\"green\"]'",

  "name": "tags",

  "type": {

    "items": "string",

    "type": "array"

  }

}
],
"name": "myschema",
"type": "record"   }

版本2:

{“字段”:[

{

  "doc": "Type inferred from '1'",

  "name": "id",

  "type": "int"

},

{

  "doc": "Type inferred from '1250.0'",

  "name": "price",

  "type": "double"

},

{

  "doc": "Type inferred from '[\"home\",\"green\"]'",

  "name": "tags",

  "type": {

    "items": "string",

    "type": "array"

  }

}
],
"name": "myschema",
"type": "record"   }
板球运动员

让我们看一下向后兼容性规则... https://docs.confluent.io/current/schema-registry/avro.html#compatibility-types

首先,默认值不是可传递的,因此版本3仅查看版本2。

向后规则指出您可以删除字段或添加可选字段(默认情况下)。我假设您的模式生成器工具不知道如何使用可选选项,因此只允许您删除而不添加。

在版本1和版本2之间,您已经删除了有效的名称字段。

在版本2和传入版本3之间,它认为您正在尝试发布一个删除价格的新架构(可以这样做),但是添加了必填名称字段,不允许使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MPI_Bcast会导致数据不确定性问题吗?

来自分类Dev

结合Sympy和不确定性

来自分类Dev

并发编程和不确定性

来自分类Dev

lmfit中拟合参数的不确定性

来自分类Dev

WPF中的MVVM-某些不确定性

来自分类Dev

Python中的不确定性包:使用给定的协方差矩阵获取数据不确定性

来自分类Dev

使用Struct和指针的程序中的不确定性(C语言程序)

来自分类Dev

Docker端口不确定性

来自分类Dev

从polyfit查找不确定性

来自分类Dev

不确定性与熵的传播

来自分类Dev

循环执行...不确定性

来自分类Dev

Verilog LRM不确定性

来自分类Dev

符号链接的不确定性

来自分类Dev

在cockroachdb中,为什么不确定性重新启动不会更新不确定性窗口的上限?

来自分类Dev

aurelia 测试的不确定性单元测试问题

来自分类Dev

检测“死”测试和硬编码数据与受约束的不确定性

来自分类Dev

StateT和不确定性monad:一个简单的例子

来自分类Dev

开发数据库模型的不确定性

来自分类Dev

不确定性与随机性

来自分类Dev

Apache Spark的不确定性来源

来自分类Dev

pyhf:执行统计不确定性

来自分类Dev

修改const值的“不确定性”机制

来自分类Dev

SSH密钥交换配置不确定性

来自分类Dev

与标称值相对应的可变不确定性

来自分类Dev

一阶逻辑在实践中如何处理不确定性?

来自分类Dev

如何在NLTK Python中检测文本的不确定性?

来自分类Dev

Frama-C中的模型不确定性值整数

来自分类Dev

先知模型中假期的较大不确定性

来自分类Dev

一阶逻辑在实践中如何处理不确定性?