写点什么

Pulsar—新一代云原生消息平台

作者:中原银行
  • 2022 年 4 月 08 日
  • 本文字数:3284 字

    阅读完需:约 11 分钟

Pulsar—新一代云原生消息平台

1.简介

Pulsar 是目前消息系统的典型代表,具备计算存储分离、节点对等、独立扩展、灵活扩容、快速容错等功能,并且是天然适配云原生的。Pulsar 同时支持大集群、多租户、百万 topic。并且原生具备跨地域复制的功能,使用者完全不必去担心集群之间数据的复制问题,这个痛点 Kafka 用户绝对深有体会。Pulsar 的设计和实现具有很好的前瞻性,并且借鉴一些优秀的中间件框架的设计,解决了当下主流消息中间件的痛点,取其精华去其糟粕,Pulsar 的未来势不可挡。

2.Pulsar 组成

Pulsar 主要由五个方面组成:

  • Producer:生产者,发送消息

  • Consumer:消费者,消费消息

  • Broker:计算节点,消息的转发和路由

  • BookKeeper:存储节点,消息持久化

  • Zookeeper:主要是做元数据的保存和 Broker、BookKeeper 的监控工作(图中并未体现出)


3.Pulsar 的优秀设计

3.1 Pulsar 存储

3.1.1 计算存储分离

 

Pulsar 采用了计算存储分离的多层架构。计算存储分离的架构,使得存储层和计算层完全解耦,并且可以各自动态扩展。


在 Pulsar 中数据的分发和保存分别由 Broker 和 BookKeeper 进行处理。Producer 发送数据到 Broker。Consumer 从 Broker 中消费数据,但是具体的数据保存在 BookKeeper 中。Broker 不存储数据,所以 Broker 是无状态的。


无状态的好处:节点对等、独立扩展、快速扩容、天然适配云原生等。相对于 Kafka 的 Broker 计算存储分离的架构,Pulsar 的架构更加职责分明、灵活。

3.1.2 分区存储 vs 分片分区存储

分区存储


Kafka 采用分区存储的方式。


如下图所示为 Topic 采用一分区两副本的方式进行存储。Kafka 数据的读写都是在主分区上的。副本仅仅负责同步数据,当主分区宕机后才会提供服务。通过分区数提升了系统的并发能力。副本的存在提升了系统的可用性。


计算存储一体架构存在的隐患:


1.存储和计算耦合,Broker 是一个有状态的节点,不方便上云。


2.分区存储数据的容量受限,分区大小取决于主机上最大的单个磁盘大小。如果当前分区存储满了,需要增加分区数,并且将数据重新分配数据到各个分区,数据的大量复制工作是不可避免的。



分区分片存储


Pulsar 采用分区分片存储的方式,先将数据分区,然后每个分区又对应着不同的分片。如下图所示:


Partition-0 对应 Segment-0 Segment-1,Partition-1 对应 Segment2,Partition-2 对应 Segment-3。


每个分区都可以设置多个分片,并且均衡的分布在 Bookie 节点上。当 Partition-0 分区存储满了后,扩容仅仅需要两步:


1.新增分区 0 的分片数量


2.新增 Bookie 节点,并且将新增的分片路由到新增的 Bookie 节点上即可。


分区分片存储的优势完全没有数据复制的工作。Pulsar 的存储更加灵活、扩展性、容错能力也更强。



3.2 多种消息消费模型

3.2.1 独占消费模型


在任何时间,当前的 topic 只能由一个消费者进行订阅。如下图所示当 ConsumerA-0 正在订阅当前 Topic 的时候,其他的 Consumer 去订阅当前 Topic 是不允许的。


使用场景:严格要求队列的顺序性的场景



3.2.2 故障切换模型


故障切换模型,多个消费者可以附加到一个订阅中,但是一个订阅中的所有消费者,同一时刻,只能有一个消费者被选为主消费者。组内其他的消费者都为故障转移消费者。


主消费者断开连接的时候,会在故障转移消费者中重新选取一个主消费者,之前没有 ack 的消息,也都将重新进行消费。可以把故障切换模型看做独占消费模型的高可用版本。


使用场景:严格要求队列的顺序性并且对消费者的可用性要求很高的场景。



3.2.3 共享订阅模型


消息将以轮询的方式发送到不同的消费者中。并且一个消息仅仅能被一个消费者消费,当其他的消费者故障的时候,没有 ack 的消息会在其他的消费者中重新消费。与 kafka 不同的是如果想提高消费能力,不需要新增分区,仅仅增加消费者的数量即可。


使用场景:不需要保证消息顺序性的任意场景。



3.3 多种消息系统代理 RoP、AoP、KoP

RoP、AoP、KoP 分别是将 RocketMQ、AMAP 消息系统、Kafka 协议处理插件引入到 Pulsar broker 的代理,这样 Pulsar 就能支持原生各种消息队列的协议了。用户无需修改代码,便能将现有的 RocketMQ 、Kafka、Rabbitmq 等应用程序和服务迁移到 Pulsar,同时还能使用 Pulsar 的强大功能。

3.3.1 RoP

在 Client 与 Broker 的交互中,Pulsar 基于 Protobuf 的二进制协议,提供更高的性能和更低的延迟。RocketMQ 由于使用的消息处理协议和 Pulsar 不同,如果 Pulsar 想要兼容 RocketMQ 协议,为了将 RocketMQ 的协议适配到 Pulsar 的消息协议层中,用户需要重写整个协议层,这给用户的迁移和切换带来了很大的成本。为了解决这个问题,给用户提供一个开箱即用的迁移策略和方案并且用户无需做任何代码修改,诞生了 RoP 项。RoP 实现架构如下图:



3.3.2 AoP

AoP 同 RoP 类似,也是一个可插拔的协议处理插件,可以通过使用 Pulsar 的 topics、cursors 等特性在 Pulsar 上支持原生 AMQP 。AMQP Proxy 服务和 AMQP 处理插件都与 Pulsar broker 一起运行。目前,AoP 是基于 AMQP 0.9.1 进行开发,在考虑增加对 AMQP1.0 协议的支持。


AoP 实现架构如下图: 



3.3.3 KoP

KoP 旨在利用 Pulsar 和 BookKeeper 的事件流存储架构和 Pulsar 的可插拔协议处理插件框架来提供一种精简而全面的解决方案。KoP 是一个协议名称为「kafka」的协议处理插件。KoP 绑定在 Pulsar broker 上,并与 Pulsar broker 一起运行。


KoP 实现架构如下图(摘自 streamnative/kop github 项目介绍)



3.4 多集群多租户

Pulsar 的 Topic 的组成:domain://tenant/namespaces/topic


主要由四部分组成:


1.domain: 分为 nonpersistent 和 persistent,对应非持久化和持久化存储;


2.tenant: 表示租户名称;


3.namespaces: 命名空间


4.Topic:主题名称

 

这样做的目的就是为了支持多租户的场景。Pulsar 的多租户机制包含了两种资源:资产(property)和命名空间(namespace)。资产代表系统里的租户。假设有一个 Pulsar 集群用于支持多个应用程序(就像 Yahoo 那样),集群里的每个资产可以代表一个组织的团队、一个核心的功能或一个产品线。一个资产可以包含多个命名空间,一个命名空间可以包含任意个主题。



3.5 批流一体

Pulsar 是下一代的新型消息系统,将批流处理集于一身,并且致力于克服一些主流消息系统的弱点。并且提供了各种代理,主流的消息系统可以快速的迁移到 Pulsar 上。为了有更好的运行效率、可扩展性和灵活性,Pulsar 从架构上就是分层架构。这样的分层架构相比以往的单体架构更加灵活,可以根据需要来进行配置存储层和处理层,更加容易维护和扩容。

4.优势

Pulsar 作为新一代云原生消息平台,与传统消息队列主要有以下优势:


1.天生支持云原生,它采用计算与存储分离架构设计,天生适配云原生环境,逻辑组件 broker 和存储组件 bookie 都是无状态的,可借助 kubernetes 的动态伸缩能力,更好的管理资源。而传统的消息队列都是有状态,若适配云原生环境,需要投入研发很多工作量进行改造。


2.可以兼容目前所有主流消息队列,pulsar 作为一个融合的消息系统,除了自己的通信协议外,通过插件兼容 RabbitMQ,RocketMQ,Kafka 等主流消息队列。


3.分区分片的思想,分区下边又加了一层分片,完美解决了 Kafka、RokcetMq 单点存储满后,扩容和数据迁移的问题的问题。计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。


4.批流一体的架构,不仅仅具备流处理平台的能力,还支持标准的消息模式。

5.借鉴

中原银行分布式消息平台建设于 2019 年,目前已服务于全行 28 套业务系统,日均消息承载量成几何倍数增长。

 

下一步中原银行中间件小组将参考 Pulsar 的分层结构,深耕消息的 proxy 层建设,提升 proxy 层在消息追踪,消息补偿等方面的能力。一方面,轻 SDK 端,使 SDK 端只保留消息的连接、连接的断线重连、消息的生产、消息的消费等能力,消息补偿、消息去重等能力迁移到 Proxy 层处理;另一方面,重 Proxy 层,在 SDK 迁移到 proxy 层的部分能力基础上,着重建设消息追踪,消息路由等能力。构建“轻 SDK,重 Proxy”的机制,减少业务系统对 SDK 的依赖,同时降低 SDK 对业务系统的影响,为业务系统更好的提供消息能力。

 

同时,将参考 pulsar 的云原生能力,结合中原银行消息使用场景,吸收 pulsar 的多交付保证策略、跨地域复制等先进功能,持续加强消息平台云原生能力的建设,实现消息集群的弹性伸缩和自动化部署,为业务系统提供更智能、更稳定的高性能消息服务! ​

发布于: 刚刚阅读数: 2
用户头像

中原银行

关注

中原人民自己的银行! 2020.02.06 加入

中原银行是河南省属法人银行,中国500强商业银行第24名,总部位于河南省郑州市。我行以“贴心、专业、合作、共赢”的理念,全力打造中原人民自己的银行! 官方网站:http://www.zybank.com.cn/

评论

发布
暂无评论
Pulsar—新一代云原生消息平台_分布式_中原银行_InfoQ写作平台