Schema-Registry
1.1、注册表
无论是 使用传统的Avro API自定义序列化类和反序列化类 还是 使用Twitter的Bijection类库实现Avro的序列化与反序列化,这两种方法都有一个缺点:在每条Kafka记录里都嵌入了schema,这会让记录的大小成倍地增加。但是不管怎样,在读取记录时仍然需要用到整个 schema,所以要先找到 schema。有没有什么方法可以让数据共用一个schema?
我们遵循通用的结构模式并使用"schema注册表"来达到目的。"schema注册表"的原理如下:
- 1、把所有写入数据需要用到的
schema
保存在注册表里,然后在记录里引用schema ID
。 - 2、负责读取数据的应用程序使用
ID
从注册表里拉取schema
来反序列化记录。 - 3、序列化器和反序列化器分别负责处理
schema
的注册和拉取。
schema
注册表并不属于Kafka
,现在已经有一些开源的schema
注册表实现。比如本文要讨论的Confluent Schema Registry
。
Avro
序列化相比常见的序列化(比如 json
)会更快,序列化的数据会更小。相比 protobuf
,它可以支持实时编译,不需要像 protobuf
那样先定义好数据格式文件,编译之后才能使用。
Confluent
公司为了能让 Kafka
支持 Avro
序列化,创建了 Kafka Schema Registry
项目,项目地址为 https://github.com/confluentinc/schema-registry
。对于存储大量数据的 kafka
来说,使用 Avro
序列化,可以减少数据的存储空间提高了存储量,减少了序列化时间提高了性能。 Kafka
有多个topic
,里面存储了不同种类的数据,每种数据都对应着一个 Avro schema
来描述这种格式。Registry 服务支持方便的管理这些 topic
的schema
,它还对外提供了多个 `restful 接口,用于存储和查找。
1、Schema Registry的各个发现行版本的下载链接 2、上传到linux系统进行解压安装。 3、本教程使用外部以安装好的Kafka集群不使用内部默认的。 4、修改confluent-5.3.1/etc/schema-registry/schema-registry.properties配置文件
# 注册服务器的监听地址及其端口号
listeners=http://0.0.0.0:8081
# 有关连接外部集群的地址有两种方式:1 通过zk连接 2 通过kafka的控制器 。 本教程采用zk连接
kafkastore.connection.url=henghe-042:2181
# The name of the topic to store schemas in
kafkastore.topic=_schemas
# If true, API requests that fail will include extra debugging information, including stack traces
debug=false
5、注册服务器的启动../../bin/schema-registry-start -daemon ../../etc/schema-registry/schema-registry.properties
# Register a new version of a schema under the subject "Kafka-key"
$ curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json" \
--data '{"schema": "{
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?