pulsar基础

一、前言

Pulsar 是一个用于服务器到服务器的消息系统,具备高吞吐,低延迟,计算存储分离,多租户,异地复制等特性,这些特性也使得Pulsar成为kafka的有力竞争者

二、Pub/Sub

下面介绍pulsar做为一个发布订阅消息中间件的一些主要概念

  • Message
  • Producer
  • Consumer
  • Broker
  • Topic
  • Subscription
1. Message

消息是 Pulsar 的基础单元,Producer 发送消息,Consumer 消费消息,Broker 保存消息。

1.1 消息的组成
  1. data:数据
  2. key:消息键,非常重要的一个概念,消息的发送和路由都与它有关
  3. property:键值对,存放一些主数据之外的额外消息
  4. producer name:消费者名
  5. sequence id: 序列号。消息去重会使用到这个参数,相同的序列号只会发送一次
  6. publish time:发布时间
  7. event time: 事件事件
  8. TypedMessageBuilder: 用于构建消息
2. Producer

Producer 可以发送消息到指定的 topic。往 Pulsar 里发送消息时,相应的数据会带上 schema 的信息。Pulsar 会确保一个 producer 往 topic 发送的消息是满足一定的 schema 格式。

2.1 发送模式

同步发送send,异步发送sendAsync

2.2 批量处理

通过设置enableBatching、batchingMaxMessages、maxPendingMessages等,来设置批量消息的发送规则。

2.3 消息压缩

通过设置compressionType,来指定压缩类型

2.4 分块

分块的前提是禁用批量处理

3. Consumer

consumer与broker建立TCP长链接,然后开始接受从broker的推送来的消息。同时也会根据schema来格式化消息

3.1 接收模式

同步接收

异步接收,返回一个CompletableFuture

3.2 ACK

确认消息/取消确认:消费者成功/失败消费一条消息,这条消费者会发送一个确认消息/取消确认给broker。成功的话,这条消息会根据消息保留策略来进行删除。

3.3 监听器

通过MesssageListener可以监听接受的每条消息,通过received方法进行逻辑处理

3.4 死信、重试队列

设置了死信队列,消费者消费一条消息时,当超时或者否定确认,这条消息会被重新传递,当多次的重新传递后,这条消息会被放入到指定的死信topic中。

重试队列,当消费者消费一条消息时,当超时或者否定确认,默认会进行重试。

3.5 Cursor 和 Reader

Cursor 在消费者端,代表了每组订阅组的消费状态。 broker 的 cursor 会追踪每个订阅消费到了哪里,然后记录下来。

Reader 和 Cursor 不同, cursor 是 pulsar帮你管理消费状态信息,但是 Reader 是一个没有状态的,消息被消费了,它消费状态不会持久化。也就是下次再读取的时候还是能读取到。

4. Broker

分区落靠的服务器,就是 Broker。Broker 用来接收与发送消息,生产方连接到 broker 去生产消息,消费方连接到 broker 去消费消息。

数据不会存储在 Broker 上,是放在 Bookkeeper 中。这也是 Pulsar 与其他中间件的区别。

5. Topic

topic是消息的集合,所有的producer的消息,都会归属到指定的topic里。所有topic里的消息,会按照一定的规则,被切分成不同的分区(Partition)。一个分区会落到一台broker上。

topic格式:{persistent|non-persistent}://tenant/namespace/topic

pulsar层级化的管理,使用 Tenant 和 namespace。

6. Subscription

consumer 连接到 broker,需要定义自己的 Subscription ,一个订阅的所有 consumer 会作为一个整体去消费 topic 里的所有消息。

6.1 订阅模式

四种模式:Exclusive、Failover、Shared、Key_Shared

Exclusive:只有一个 consumer 可以消费消息。

Failover:一个消费者作为一个主题分区( partition, 一个 topic 会有多个 partition ) 的主使用者,其他消费者被作为故障转移备用。

Shared: 消息会轮训发送给该订阅下的所有 consumer 。

Key_Shared:消息按照 key 进行分发给 consumer。融合了 Failover 和 Shared 的特性。

三、schema

Schema 的作用就是如何序列化反序列化数据,不用在客户端另外去做处理。

schema 的格式

  • type:schema类型
  • schema:schema 定义,和数据
  • properties:跟 schema 关联的部分属性

两类 schema

  • key-value:要同时定义 key schema 和 value schema,将这两者的信息组合在一起放置在 schema 信息文件内
  • struct :AVRO、JSON、Protobuf 三种类型

schema 的兼容性检查

image-20210615194709854
Author: iMine
Link: https://imine141.github.io/2021/06/10/pulsar/pulsar%20%E5%9F%BA%E7%A1%80/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.