一、简析
schema是pulsar重要的功能之一,现在就一起从源码的视角看下管理流创建schema时客户端和服务端的表现

客户端
客户端主要经历以下四个步骤
-
创建Schema实例
根据数据类型创建相对应的实例,例如Avro创建AvroSchema、JSON创建JSONSchema等
-
获取处理Schema的对象
管理流PulsarAdmin对象获取SchemasImpl对象,这个对象是专门处理所有schema相关的操作。除此之外PulsarAdmin对象还维护着Clusters、Brokers、Tenants等等管理维护集群的重要对象,通过这些对象可以很好的管理维护Pulsar集群
-
构造SchemaInfo
通过Schema实例创建其对应的SchemaInfo信息,里面就包括这个schema的名字、schema的结构化信息、schema类型等等,最后SchemaInfo这个对象会转成字符串发到服务端
-
发送HTTP请求
通过post请求将数据发到服务端,这里是通过Java Rest库
javax.ws.rs-api进行处理的
服务端
服务端主要经历以下四个步骤
-
参数格式校验
- 校验租户、命名空间的是否有效(判空、是否有特殊字符)
- 从缓存中根据Topic获取其对应的TopicName对象
-
权限校验
- 判断是否是Topic的owner
- 判断当前用户是否有操作当前Topic的权限
-
SchemaRegistry注册schema
SchemaRegistryService是服务端处理所有schema相关的对象,而schema相关的读写操作是依赖它的成员SchemaStorage进行处理的,SchemaStorage的最终是通过Bookkeeper客户端对象发送写请求
-
写Bookkeeper
通过LedgerHandle对象向Bookkeeper服务端发送写请求
小结
schame新建流程概括起来就是,客户端构造schema信息,服务端负责schema校验,bookkeeper负责schema的存储
二、客户端源码解析
源码跟踪
下面是通过管理流创建schema的样例代码,核心就是通过PulsarAdmin.schemas获取schema对象,这个schema对象负责所有客户端跟schema相关的操作,包括schema的增删改查等。通过方法的第二个参数可以看到是通过Schema接口提供的静态方法AVRO来构造Avro格式的schema对象,除此之外Schema接口还提供了诸如JSON、KeyValue、PROTOBUF等静态方法提供对应数据格式的schema对象,这里如果将这块构造schema对象逻辑抽成简单工厂模式可能会更合适些


最低0.47元/天 解锁文章
1237

被折叠的 条评论
为什么被折叠?



