confluent的模式注册表如何分配模式id?

bvpmtnay  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(418)

我用的是 CachedSchemaRegistryClient 以及 register 方法,它接受一个主题和 Avro 架构。我要把这些和 5.2.1 融合docker图像,当我注册模式时,我得到了我觉得奇怪的行为。
我注册的第一个模式返回 id81 (通过使用schema registry rest api进行备份,以检查此架构是否与此 id ),然后第二个模式返回和id为121。
由于这种行为出乎意料,而且我一直无法通过google找到答案,我很好奇是否有一种哈希策略或类似的方法来分配模式id,我希望它从1开始递增。

lrl1mhuk

lrl1mhuk1#

合流文档解释了如何将唯一ID分配给架构:
schema registry是avro模式的分布式存储层,它使用kafka作为底层存储机制。一些关键设计决策:
为每个注册的架构分配全局唯一的id。分配的id保证是单调递增的,但不一定是连续的。
kafka提供了持久的后端,并作为schema registry状态及其包含的schema的预写变更日志。
schema registry被设计成分布式的,具有单一的主架构,zookeeper/kafka协调主选择(基于配置)。
也,
架构id分配
模式id分配总是发生在主节点上,并且模式id总是单调递增的。
如果您使用的是kafka primary election,则架构id始终基于写入kafka存储区的最后一个id。在主重新选择过程中,只有在新的主进程处理完存储区中的所有记录之后,才会进行批处理分配 <kafkastore.topic> .
如果你用的是zookeeper初选, /<schema.registry.zk.namespace>/schema_id_counter path存储当前id批的上限,新的批分配由当前批的主选择和耗尽触发。此批处理分配有助于防范潜在的zombie主方案(例如,如果前一个主方案的gc暂停持续时间超过zookeeper超时,则触发主重新选择)。

相关问题