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