Pulsar官方文档翻译概念和架构Schema注册表(SchemaRegistry)

编程

官网原文标题《Schema Registry》

翻译时间:2018-10-28

官网原文地址:http://pulsar.apache.org/docs/en/concepts-schema-registry/

译者:Scheme注册是Pulsar保证数据类型安全的机制。

--------------------分割线----------------

Schema注册表

对于围绕消息总线(如pulsar)搭建的应用来说,类型安全非常重要。 生产者和消费者需要某种机制来协调topic层面的类型, 以免出现各种各样的潜在问题 (例如序列化和反序列化问题)。 应用通常采用两种基本方法之一,在消息传递中确保类型安全:

  1. "客户端" 方法, 消息生产者和消费者不仅负责序列化和反序列处理消息 (包括原始字节), 而且还 "知道" 哪些类型是通过哪些topic传输的。 如果生产者往主题 topic-1发送温度感应数据,而这个topic的consumer按照读取湿度感应的方式来转换数据,将会遇到问题。
  2. "服务器端" 方法, 生产者和消费者告知系统哪些数据类型可以通过topic传输。 通过这种方法,消息系统强制执行类型安全, 并确保生产者和消费者保持同步。

这两种方法都被Pulsar支持,你可以在topic的基础上,自由选择采用哪一种,或者混用。

  1. "客户端" 方法中, 生产者和消费者可以发送和接收由原始字节数组组成的消息, 并在应用中保留所有的类型安全,以“带外”基础上强制执行。
  2. "服务器端" 方法中,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,并开始发送消息:

 

  1.  

    PulsarClient client = PulsarClient.builder()

  2.  

    .serviceUrl("pulsar://localhost:6650")

  3.  

    .build();

  4.  

     

  5.  

    Producer<SensorReading> producer = client.newProducer(JSONSchema.of(SensorReading.class))

  6.  

    .topic("sensor-data")

  7.  

    .sendTimeout(3, TimeUnit.SECONDS)

  8.  

    .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

回到顶部