Kafka Schema Registry简介

邰伟彦
2023-12-01

Schema Registry

Schema Registry为你的元数据信息提供服务层。它提供了RESTFUL接口用于存储Avro schemas,它存有版本化的历史记录,提供多个兼容性设置,并根据兼容性设置对schema进行调整。

 

API

Schemas

GET /schemas/ids/{int:id}

通过input id获取schema string,id是schema的唯一标识符

 

Subjects

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,分配的id单调递增,但不一定是连续的,使用zookeeper用于帮助维护这一保证
  • kafka提供持久后端和预写日志功能
  • schema registry为分布式架构,有一个master节点,zookeeper用来选举master节点

批量ID分配

Schema id由当前master schema registry分配,一个接着一个地分发给新的register schema。

/<schema.registry.zk.namespace>/schema_id_counter路径存储当前id批次的上限,新批次分配由master选举或者当前批次佣金用尽触发,这种批次分配策略能够防止潜在的僵尸master进程

 

Kafak Backend

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日志中的本地状态可以确保持久性、有序性和易恢复性。

 

 

 

 

 类似资料: