首页 > 解决方案 > Confluent Schema Registry“主题”和“版本”

问题描述

我正在学习满足所有模式管理需求的 Confluent 模式注册表。

而且我不太了解他们的版本控制方法......有一个 a 的概念subject,我将其视为命名空间。据我了解,主题在模式注册表中必须是唯一的。

然后是模式 id,或者只是id,它也是唯一的。

最后,还有一个version.

这是文档中的片段:

version:此主题的架构版本,每个主题从 1 开始

id:全局唯一的模式版本 id,在所有主题的所有模式中唯一

那么,一旦我想修改特定主题下的架构,idversion字段会发生什么?有id变化吗?version会增加吗?

另一个引用:

当模式演变时,它们仍然与同一主题相关联,但会获得新的模式 ID 和版本

每一个变化都需要一个新的id和一个新的version吗?

标签: apache-kafkaconfluent-schema-registry

解决方案


每个主题都有一个版本列表。如果您愿意,可以在源代码中验证这一点。

Registry 中的每个 id 都是全局唯一的,而不是“主题版本列表”中的 id。根据注册表的兼容模式,每个主题只有一个递增的版本数量,这是一个索引,而不是正确的 ID。

如果两个主题共享相同的架构,则架构 ID相同,尽管两个不同主题内的“版本索引”可能不同。这种情况请参见下面的示例。

每个唯一的模式(由它的文本表示定义)都有一个唯一的(可能是增量的)ID。它们经过 MD5 散列或“指纹”以确保唯一性,然后在 Schema Registry 集群中进行全局比较。这是通过等效ConcurrentHashMap<String, Schema>于 key 是 valueSchema对象的散列来完成的


示例:对主题、版本和架构使用subvs

  1. 创建 sub 1,这使得 v 1 :s 1
  2. 更新它以创建 v 2 :s 2
  3. 获取更新的架构文本并将其发布到新的子2

1 : [ v 1 :s 1 , v 2 :s 2 ]
2 : [ v 1 :s 2 ]

关于问题

想要修改特定主题下的架构,id 和版本字段会发生什么?身份证会变吗?版本会增加吗?

如果您进行兼容的架构更改,版本将始终递增。如果您对主题架构的编辑恰好与其他主题架构定义匹配,则 ID 不会更改


推荐阅读