Pulsar官方文档翻译概念和架构Schema注册表(SchemaRegistry)
官网原文标题《Schema Registry》
翻译时间:2018-10-28
官网原文地址:http://pulsar.apache.org/docs/en/concepts-schema-registry/
译者:Scheme注册是Pulsar保证数据类型安全的机制。
--------------------分割线----------------
Schema注册表
对于围绕消息总线(如pulsar)搭建的应用来说,类型安全非常重要。 生产者和消费者需要某种机制来协调topic层面的类型, 以免出现各种各样的潜在问题 (例如序列化和反序列化问题)。 应用通常采用两种基本方法之一,在消息传递中确保类型安全:
- "客户端" 方法, 消息生产者和消费者不仅负责序列化和反序列处理消息 (包括原始字节), 而且还 "知道" 哪些类型是通过哪些topic传输的。 如果生产者往主题 topic-1发送温度感应数据,而这个topic的consumer按照读取湿度感应的方式来转换数据,将会遇到问题。
- "服务器端" 方法, 生产者和消费者告知系统哪些数据类型可以通过topic传输。 通过这种方法,消息系统强制执行类型安全, 并确保生产者和消费者保持同步。
这两种方法都被Pulsar支持,你可以在topic的基础上,自由选择采用哪一种,或者混用。
- "客户端" 方法中, 生产者和消费者可以发送和接收由原始字节数组组成的消息, 并在应用中保留所有的类型安全,以“带外”基础上强制执行。
- "服务器端" 方法中,Pulsar有一个内置的 schema registry,它使客户端能够根据每个topic载入数据schema。 这些schema显示了,topic可以识别哪些数据类型为有效。
Pulsar的schema注册当前仅能在 Java 客户端使用。
基础架构
当你使用Schema创建带类型的producer时,schema将会被自动上传。 此外,可以通过Pulsar的REST API 手动上载、提取和更新schema。
其他schema注册的后端
开箱即用,Pulsar使用 Apache BookKeeper log存储系统来保存schema。 不过你也可以按照你的需要使用不同的后端。 客制化的schema存储逻辑文档即将推出。
Schema是如何工作的
Pulsar schema应用于主题层面(schema无法应用于namespace和tenant层面),并且被强制执行,producer和consumer上传schema到Pulsar broker。
Pulsar schema是非常简单的数据结构,它的构成如下:
- name。Pulsar中, schema的名称是schema应用于的topic。
- payload , 它是schema的二进制表示形式。
- Schema类型
- 用户定义的字符串/字符串映射map, properties 。 Properties如何使用,完全由程序指定。 Properties可能是关联到schema的Git hash,例如dev或者prod等环境信息。
Schema版本
我们通过一个例子,来讲解schema版本如何工作。 假设使用以下代码创建Pulsar Java 客户端,尝试连接到Pulsar,并开始发送消息:
PulsarClient client = PulsarClient.builder()
.serviceUrl("pulsar://localhost:6650")
.build();
Producer<SensorReading> producer = client.newProducer(JSONSchema.of(SensorReading.class))
.topic("sensor-data")
.sendTimeout(3, TimeUnit.SECONDS)
.create();
下表列出了尝试连接时可能出现的场景, 以及每种场景下发生了什么:
场景
发生了什么
该Topic不存在schema
使用给定的schema创建了producer。 Schema传输到broker并被存储 (因为没有现成的schema与SensorReading schema "兼容")。 任何使用同样schema/topic的consumer可以消费sensor-datatopic中的消息。
Schema已经存在;producer使用已经被保存过的schema进行连接
Schema被传输到Pulsar broker。 Broker确认此schema是兼容的。 Broker尝试在BookKeeper存储schema,但是发现它已经存在了,所以用它来标记生产的消息。
Schema已经存在;producer使用兼容的新schema进行连接。
Producer传输schema到broker。broker发现这个schema是兼容的,随后保存这个新schema作为当前版本(使用新的版本号)。
Schema版本是连续的。 Schema被处理关联topic的broker所保存,便于进行版本的分配。 一旦分配/提供了schema的版本,后续由该生产者生产的所有消息,都将被恰当的版本所标记。
支持的schema格式
以下格式被Pulsar schema注册所支持:
无。如果没有为topic指定schema,producer和consumer将会处理原始字节。
- String (用于 UTF-8-encoded 字符串)
- JSON
- Protobuf
- Avro
管理Schema
你可以使用Pulsar的admin tools来管理topic的schema
以上是 Pulsar官方文档翻译概念和架构Schema注册表(SchemaRegistry) 的全部内容, 来源链接: utcz.com/z/516855.html