Schema Registry为你的元数据信息提供服务层。它提供了RESTFUL接口用于存储Avro schemas,它存有版本化的历史记录,提供多个兼容性设置,并根据兼容性设置对schema进行调整。
GET /schemas/ids/{int:id}
通过input id获取schema string,id是schema的唯一标识符
subjects提供了注册在你的schema registry的所有subject列表。subject是schema注册时的名称。如果你为kafaka使用schema registry,那么subject是一个<topic>-key还是<topic>-value取决于你为topic注册时选择的什么
GET /subjects
subjects列表
GET /subjects/(string:subject)/versions
该subject版本列表
GET /subjects/(string:subject)/versions/(versionId:versionId)
该subject下特定版本的schema信息
Schema Registry是一个针对Avro Schema的分布式存储层,使用Kafak作为其底层存储机制。一些核心设计决策:
Schema id由当前master schema registry分配,一个接着一个地分发给新的register schema。
/<schema.registry.zk.namespace>/schema_id_counter路径存储当前id批次的上限,新批次分配由master选举或者当前批次佣金用尽触发,这种批次分配策略能够防止潜在的僵尸master进程
schema registry用kafak作为存储后台,特殊的kafka topic<kafkastore.topic>的一个partition被用作高可用预写日志,所有的schema,subject/version和id元数据,和兼容性数据会作为messages到这个日志。一个schema registry实例因此会同时在_schema topic下生产和消费,它生产消息到log,例如新的schema被注册到subject,或更新兼容性设置。schema registry的后台进程消费_schema日志,更新本地缓存去映射新加入的schema或兼容性设置。以这种方式更新kafka日志中的本地状态可以确保持久性、有序性和易恢复性。