apache-kafka - Confluent Schema Registry“主题”和“版本”
问题描述
我正在学习满足所有模式管理需求的 Confluent 模式注册表。
而且我不太了解他们的版本控制方法......有一个 a 的概念subject
,我将其视为命名空间。据我了解,主题在模式注册表中必须是唯一的。
然后是模式 id,或者只是id
,它也是唯一的。
最后,还有一个version
.
这是文档中的片段:
version
:此主题的架构版本,每个主题从 1 开始
id
:全局唯一的模式版本 id,在所有主题的所有模式中唯一
那么,一旦我想修改特定主题下的架构,id
和version
字段会发生什么?有id
变化吗?version
会增加吗?
另一个引用:
当模式演变时,它们仍然与同一主题相关联,但会获得新的模式 ID 和版本
每一个变化都需要一个新的id
和一个新的version
吗?
解决方案
每个主题都有一个版本列表。如果您愿意,可以在源代码中验证这一点。
Registry 中的每个 id 都是全局唯一的,而不是“主题版本列表”中的 id。根据注册表的兼容模式,每个主题只有一个递增的版本数量,这是一个索引,而不是正确的 ID。
如果两个主题共享相同的架构,则架构 ID相同,尽管两个不同主题内的“版本索引”可能不同。这种情况请参见下面的示例。
每个唯一的模式(由它的文本表示定义)都有一个唯一的(可能是增量的)ID。它们经过 MD5 散列或“指纹”以确保唯一性,然后在 Schema Registry 集群中进行全局比较。这是通过等效ConcurrentHashMap<String, Schema>
于 key 是 valueSchema
对象的散列来完成的
示例:对主题、版本和架构使用sub
、v
和s
- 创建 sub 1,这使得 v 1 :s 1
- 更新它以创建 v 2 :s 2
- 获取更新的架构文本并将其发布到新的子2
子1 : [ v 1 :s 1 , v 2 :s 2 ]
子2 : [ v 1 :s 2 ]
关于问题
想要修改特定主题下的架构,id 和版本字段会发生什么?身份证会变吗?版本会增加吗?
如果您进行兼容的架构更改,版本将始终递增。如果您对主题架构的编辑恰好与其他主题架构定义匹配,则 ID 不会更改
推荐阅读
- php - php并发连接到redis超时
- c++ - post(io_context, bind_executor(strand, handler)) 和 post(strand, handler) 是否具有相同的结果?
- dialogflow-es - agent.add() 在 Google Dialogflow Fulfillment Inline Editor 中不起作用
- javascript - React 基础知识:在导出之前定义组件还是作为导出函数的参数?
- c++ - 如何从其索引中打印枚举值?
- cakephp - Cake php 迁移升级到版本 4
- flask - pymongo 查询未在烧瓶中返回任何内容
- python - 比较两个 python pandas 数据框字符串列以识别公共字符串并将公共字符串添加到新列
- python - check if condition met for a time duration python
- time-complexity - RSA 加密的大 O 表示法是什么?