Confluent 中的Schema 管理

2,262 阅读2分钟

参考:docs.confluent.io/current/sch…

Schema Registry 为元数据提供了一个服务层。它提供了RESTful API 来存储和检索Avro schemas。它基于subject 的命名规则保存了所有schema 的历史版本,并且支持多种兼容(compatibility)机制,允许schema 根据兼容机制进行更新。它通过在kafka client 中提供序列化的方式来支持发送至kafka 的消息进行schema 的存储。

Schema Registry 与kafka 集群独立。生产者和消费者通过与kafka 集群建立会话来生产和消费数据,同时它也会向Schema Registry发送和检索schema 信息。

Schema Registry 是Avro Schemas 的一个分布式存储层,它具有以下特点:

  • 为每个注册的schema 提供一个全局唯一ID,分配的ID 保证单调递增,但不一定是连续的。
  • kafka 为Schema Registry 的状态和它包含的schema 提供一个持久的后端
  • Schema Registry 是一个分布式的单主架构,由kafka 或者zookeeper 协调主节点的选举。
  • 生产者在发送含schema 的消息时,会先判断schema 的消息是否在本地内存中,如果不在本地内存中,说明schema 尚未注册到Schema Registry,则需要进行注册,否则,无需注册
  • 消费者在反序列化消息时,会先判断schema 是否在本地内存中,如果不在本地内存中,则需要从Schema Registry 中获取schema,否则,无需获取。

kafka 协调器辅助选举

使用kafka 协调器辅助选举是在<kafkastore.connection.url>未设置,而 <kafkastore.bootstrap.servers> 设置的情况下使用。kafka 组协议从配置为master.eligibility=true 的Schema Registry节点中选举一个节点作为主节点,基于kafka 的主节点选举用于zookeeper 不可用的情况。

zk 辅助选举

zk 辅助选举时在<kafkastore.connection.url>设置为zk 的url 时使用。Schema Registry的当前主节点会将数据维护至临时节点/<schema.registry.zk.namespace>/schema_registry_master ,Schema Registry 监听该路径的数据变化,如果发现有delete 该znode 的事件,则触发选举。选举规则为:

  • 从配置为master.eligibility=true 的Schema Registry节点中选举
  • ‘first writer wins’ 原则,先在/<schema.registry.zk.namespace>/schema_registry_master 写数据的节点即为主节点。