三、Pulsar架构

三、Pulsar架构 - 图1

Pulsar集群由三部分组成:

  1. 一个或者多个无状态的Broker组件用来处理消息和负载均衡producer发出的消息,并派送给consumer,并根据消息存储机制保存至BookKeeper
  2. BookKeeper用来处理多个集群之间的协调任务
  3. 一个ZooKeeper用来处理多个pulsar集群间的协调任务

Brokers

主要负责运行另外两个组件:

  • HTTP Server对外暴露两个方面的REST API接口:

    1. 管理性质相关的任务
    2. 对于Producer的publish message 和对于Consumer的consume message
  • 一个调度分发器,异步的TCP服务器,通过自定义的二进制协议应用于所有相关的数据传输。

元数据存储

Pulsar使用Apache ZooKeeper存储维护Pulsar集群的全部元数据以及相关配置(包括集群、租户、命名空间、分区主题等)

持久化存储

为保证每条消息都被发送和被目标确认,未被确认的消息需要存储直到他们被确认送达。所有消息都被保存N份。

Apache BookKeeper和Bookie

BookKeeper是一个分布式预写日志系统,由多个Bookie组成,特性如下:

  • 不同Bookie之间拥有均匀的IO分布的特性
  • 通过预写日志,保证在系统挂掉时,读取一致性

三、Pulsar架构 - 图2

Ledgers

Ledgers负责多个BookKeeper存储节点的写入。Ledger写入的数据会被复制到多个Bookies中。

Pulsar Client

代理(Pulsar proxy)

Pulsar客户端和集群的交互可以通过brokers直连的方式,在某些情况下,这种直连的方式不太可取,因为客户端可能不知道broker的地址,因为broker可能在云环境、Kubernetes下。

如果选择运行Pulsar Proxy,客户端链接将会通过这个代理而不是直接与brokers直接通信。

服务发现(Discover)

客户端可以通过单个 URL 与整个 Pulsar 集群进行通信与连接。

  1. pulsar://pulsar-cluster.acme.com:6650

多租户