Pulsar 2.5.0 之 Schema 入门

Pulsar 2.5.0 之 Schema 入门

官网原文标题《Get started》

翻译时间:2020-02-14

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

译者:本章介绍 Pulsar schema 并解释它们为什么重要


Schema 注册表

类型安全在任何围绕消息总线(如Pulsar)构建的应用程序中都非常重要。生产者和消费者需要某种机制来协调主题级别的类型,以避免出现各种潜在的问题。例如,序列化和反序列化问题。应用程序通常采用以下方法之一来保证消息传递中的类型安全。这两种方法都可以在Pulsar中使用,您可以自由地采用其中一种或另一种,也可以根据每个主题进行混合和匹配。

客户端方法

生产者和消费者不仅负责序列化和反序列化消息(由原始字节组成),而且还“知道”哪些类型通过哪些主题进行传输。如果生产者发送主题为“主题1”的温度传感器数据,则该主题的消费者如果试图将该数据解析为湿度传感器读数,将遇到麻烦。生产者和消费者可以发送和接收由原始字节数组组成的消息,并在“带外”的基础上将所有类型安全强制留给应用程序。

服务器端方法

生产者和消费者通知系统哪些数据类型可以通过主题进行传输。通过这种方法,消息传递系统强制执行类型安全,并确保生产者和消费者保持同步。Pulsar有一个内置的schema注册表,它允许客户端按主题上传数据schema。这些schema指示哪些数据类型被识别为对该主题有效。

为什么使用 schema

当schema启用时,Pulsar会解析数据,它以字节作为输入,以字节作为输出。为了理解字节数据含义,需要解析数据,并且可能会遇到解析异常,这些异常主要发生在以下情况:

  • 字段不存在

  • 字段类型已更改(例如,“string”更改为“int”)

为了防止和克服这些异常,例如,可以在分析错误时捕获异常,这使得代码很难维护;也可以采用schema管理系统来执行schema演化,而不是中断下游应用程序,并在所使用的语言中强制类型安全性达到最大扩展,Pulsar schema就是解决方案。

Pulsar schema允许您在构造和处理从简单类型(如“string”)到复杂的应用程序特定类型的消息时,使用特定语言数据类型。

示例
您可以使用User类定义发送到 Pulsar主题的消息

public class User {
    String name;
    int age;
}

当使用User类构造生产者时,可以按如下所示指定 schema或不指定 schema

不使用schema

如果在不指定schema的情况下构造生产者,则生产者只能生成“byte[]”类型的消息。如果有POJO类,则在发送消息之前需要将POJO序列化为字节

示例

Producer<byte[]> producer = client.newProducer()
        .topic(topic)
        .create();
User user = new User(“Tom”, 28);
byte[] message = … // serialize the `user` by yourself;
producer.send(message);

使用 schema

如果您通过指定schema来构造生产者,则可以直接将类发送到主题,而不必担心如何将pojo序列化为字节。

示例

本例使用JSONSchema构造一个producer,您可以直接将User类发送到主题,而不必担心如何将其序列化为字节。

Producer<User> producer = client.newProducer(JSONSchema.of(User.class))
        .topic(topic)
        .create();
User user = new User(“Tom”, 28);
producer.send(user);

温馨提示

使用schema构造生产者时,不需要将消息序列化为字节,而Pulsar schema在后台执行此任务。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容