【问题标题】:Confluent Schema Registry "subjects" and "versions"Confluent Schema Registry“主题”和“版本”
【发布时间】:2020-09-12 05:37:51
【问题描述】:

我正在学习 Confluent 的 Schema Registry 以满足所有 Schema 管理需求。

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

然后是schema id,或者只是id,也是唯一的。

最后,还有一个version

这是文档中的 sn-p:

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

id: 全局唯一的架构版本 id,跨界唯一 所有主题中的所有模式

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

另一个引用:

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

是否每次更改都需要一个新的id 和一个新的version

【问题讨论】:

    标签: apache-kafka confluent-schema-registry


    【解决方案1】:

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

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

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

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


    示例:将subvs 用于主题、版本和架构

    1. 创建sub1,使得v1:s1
    2. 更新它以创建 v2:s2
    3. 获取更新的架构文本并将其发布到新的子目录2

    sub1 : [ v1:s1, v2:s2 ]
    sub2 : [ v1:s2 ]

    关于问题

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

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

    【讨论】:

    • 不确定我是否理解。让我们暂时放下这个话题。假设我发布了一个架构,它被分配了一个 schemaId 和一个版本,然后我对该架构进行了更改,我对其进行了更新。我是否会因更新而获得新的架构 ID 和新版本?
    • 是的!架构会有所不同。因此一个新的身份。如果您发布到同一主题,那么您还将获得一个新版本。如果您将新架构发布到新主题,那么您至少有 2 个架构,每个架构至少有 1 个版本。
    • 这就像泥巴一样清晰。为什么它必须如此混乱?为什么说“使用模式创建主题”?我不能先创建主题作为第一步,然后再将我的模式关联到该主题。这里的基数是什么? Confluent 的有关 SchemaRegistry 的文档至少可以说不是最好的。
    • 你 HTTP POST 一个架构到一个主题。你不能做一个没有另一个。当您这样做时,它会创建版本 1 或下一个版本。基数是N个SchemaVersion对象到1个Subject,内部表示为Map<String, List<SchemaVerison>>
    • 您应该将最后一条评论添加到您的答案中,否则您的原始答案是不完整的。我不知道它在幕后是如何运作的。请不要假设它是显而易见的,b/c 它不是。感谢您在这件事上的帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-10-04
    • 2017-03-31
    • 2019-05-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2019-07-21
    • 2019-07-21
    相关资源
    最近更新 更多