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

2024-01-27

我有一个用例,我有一个 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.confluence.kafka.schemaregistry.client.rest.exceptions.RestClientException:正在注册的架构与早期架构不兼容;错误代码:409

从第二个 JSON 生成的模式是如何注册的以及 第三个被拒绝了?虽然我没有任何默认密钥 删除字段?模式注册表是否总是接受第一个 进化? (第 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.confluence.io/current/schema-registry/avro.html#compatibility-types https://docs.confluent.io/current/schema-registry/avro.html#compatibility-types

首先,默认值不可传递,因此版本 3 只会查看版本 2。

向后规则规定您可以删除字段或添加可选字段(具有默认值的字段)。我假设您的模式生成器工具不知道如何使用选项,因此您只能删除,不能添加。

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

在版本 2 和传入的版本 3 之间,它认为您正在尝试发布一个新的架构,该架构删除了价格(这没关系},但添加了一个必需的名称字段,这是不允许的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Google.com 和其他流量大的网站可以使用 Google 的 PSI API 获得“快速”排名吗?

    谷歌改变了它的PSI https developers google com speed pagespeed insights 的定义快速排名FCP低于 1000 毫秒从 90 到 75 来自 PSI 文档 为什么v4和v5中的FCP值不同
  • MRE 和 MDK 安装程序之间的区别

    关于Mono Mac安装程序 有MRE安装程序和MDK安装程序 http www go mono com mono downloads download html http www go mono com mono downloads do
  • 如何在python中读取json对象[重复]

    这个问题在这里已经有答案了 我有名为 panamaleaks50k json 的 json 文件 我想从 json 文件获取 text 字段 但它显示以下错误 JSON 对象必须是 str bytes 或 bytearray 而不是 Tex
  • Angular 2通过插值为ngClass添加值

    假设我在数组中有一些对象 让我们称该数组为 items 例如 title Title value true 我使用 ngFor 来显示它们 如下所示 h1 item title h1 现在假设我想根据 item value 是 true 还
  • Flutter无法运行,get_navigation & 主题错误

    我实际上正在尝试运行我的应用程序 但我遇到了这个错误 Running flutter pub get in riverpod stacked app Launching lib main dart on sdk gphone x86 arm
  • 如果 npm 测试失败,npm posttest 不会触发

    有没有办法在测试失败时触发 npm 的后测试 如果 package json 包含 scripts pretest echo pretest test some failed test or error posttest echo post
  • 如何使用cascade =“all,delete-orphan”制作hibernate集合的副本

    我正在尝试复制一个休眠实体 A 如下所示 A a A session get A class id session evict a a setId null session save a 然而这不起作用 我得到以下异常 org hibern
  • 条件表连接

    我的雄辩模型中有以下范围 我想为其添加两个条件 我需要帮助才能做到这一点 public function scopeImages query query gt join images as i function join join gt o
  • 关于测试驱动开发的哲学问题

    我一直对测试驱动开发很感兴趣 但当我在实际项目中尝试时 我永远无法坚持下去 当我尝试时 我不断出现几个哲学问题 你如何应对巨大的变化 当涉及到测试单一功能 一些参数 结果值 少量 副作用 时 TDD 是理所当然的 但是 当您需要彻底检修大型
  • 查找图像中的图像

    我正在寻找检测另一图像中的图像的最佳方法 我有一个小图像 想找到它在较大图像中出现的位置 这实际上是屏幕截图 从概念上讲 它就像 沃尔多在哪里 在更大的图像中进行搜索 有没有有效 快速的方法来实现这一点 速度比记忆更重要 Edit 内部 图
  • 如何使用 VideoWriter 从 OpenCV 打开 GStreamer 管道

    我正在使用 OpenCV VideoCapture 捕获视频帧 捕获工作正常 因为我可以使用这样的框架 cv VideoCapture cap v4l2src device dev video1 videoscale videorate v
  • Android 不显示 logcat 消息

    它仅显示我的应用程序的错误消息 这是 Navon 铂金 10 我尝试使用 adb 设置日志级别的 setprop 但没有运气 UPDATE 安卓工作室 最新 没有过滤器 adb 和 Logcat 识别的设备 仅显示错误消息 安卓 6 0 纳
  • 预取后从缓存中选取图像

    我正在使用 Kingfisher 框架来预取图像 Kingfisher框架的链接是 https github com onevcat Kingfisher https github com onevcat Kingfisher 这是我编写的
  • 无法通过 sudo 使用 RVM 安装的 Ruby

    我已成功配置 RVM 以使用 Ruby 1 9 2 一切都很好 但是当我尝试使用以下命令运行 Ruby 时sudo它说找不到 RVM 或 Ruby ruby v ruby 1 9 2p0 2010 08 18 revision 29036
  • 有哪些很棒的在线数据库建模工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • request.POST 包含 django 中的查询字符串时的示例

    当 request POST 包含 django 中的查询字符串时 请发布示例代码 因为我认为我的 django 版本有问题 EDIT 你不能 查询字符串总是在 GET 中 这是我的问题 如果您的请求是邮寄的 request method
  • 错误:转换为非标量类型

    我正在为一项作业创建一组派生类 我被指示使用字符数组 C 字符串 当我编译时 我不断收到错误 Homework11 cpp In function int main Homework11 cpp 72 error conversion fr
  • 在 Whatsapp 云 API 的模板标头中添加示例图像

    我正在使用 WhatsApp 云 API 做一个项目 我需要创建一个带有媒体标题的模板 我创建了一个带有媒体标题但没有示例图像的模板 但它被拒绝了 所以我想在 Node js 中创建一个带有示例图像的模板 带有媒体标题的模板 为模板添加示例
  • Rcpp:如何确保 NumericMatrix 的深度复制?

    假设我有一个 Rcpp NumericMatrix A 我想将 A 的相同副本 不是指针副本 复制到另一个 Rcpp NumericMatrix B 中 这是完成这项工作的正确方法吗 Rcpp NumericMatrix B Rcpp cl
  • 架构注册表中的向后兼容性问题和不确定性

    我有一个用例 我有一个 JSON 我想生成架构并从 JSON 中记录并发布记录 我已经配置了值序列化器 并且架构设置是向后兼容的 第一个 JSON 字符串 json n id 1 n name Headphones n price 1250