什么是Apache Pulsar?

📖摘要


今天分享下 —— Apache Pulsar之什么是 Apache Pulsar?欢迎关注!耐心看完哦


🌂官方文档查看

官网文档地址


😊Apache Pulsar?

What is Pulsar

“Pulsar is a distributed pub-sub messaging platform with a very flexible messaging model and an intuitive client API.”

Pulsarpub-sub 模式的分布式消息平台,拥有灵活的消息模型和直观的客户端 API

Pulsar 由雅虎开发并开源的下一代消息系统,目前是Apache软件基金会的孵化器项目。


💕概念(Topic)

在这里插入图片描述

TopicPulsar 的核心概念,表示一个“channel”,Producer可以写入数据,Consumer 从中消费数据(Kafka、RocketMQ都是这样)。

Topic 名称的 URL 类似如下的结构:

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

  • persistent|non-persistent 表示数据是否持久化(Pulsar 支持消息持久化和非持久化两种模式)
  • Tenant 为租户
  • Namespace 一般聚合一系列相关的 Topic ,一个租户下可以有多个 Namespace
租户和 Namespace

在这里插入图片描述

上图中 Property 即为租户,每个租户下可以有多个 Namespace,每个 Namespace 下有多个 Topic

NamespacePulsar 中的操作单元,包括 Topic 是配置在 Namespace 级别的,包括多地域复制,消息过期策略等都是配置在 Namespace 上的。

订阅模型

Pulsar 提供了灵活的消息模型,支持三种订阅类型:

  • Exclusive subscription:排他的,只能有一个 Consumer,接收一个 Topic 所有的消息
  • Shared subscription:共享的,可以同时存在多个 Consumer,每个 Consumer 处理 Topic 中一部消息(Shared 模型是不保证消息顺序的,Consumer 数量可以超过分区的数量)
  • Failover subscriptionFailover模式,同一时刻只有一个有效的 Consumer,其余的 Consumer 作为备用节点,在 Master Consumer 不可用后进行替代(看起来适用于数据量小,且解决单点故障的场景)
    在这里插入图片描述
分区

为了解决吞吐等问题,PulsarKafka 一样,采用了分区(Partition)的机制。

在这里插入图片描述

Pulsar 提供了一些策略来处理消息到 Partition 的路由(MessageRouter):

  • Single partitioningProducer 随机选择一个 Partition 并将所有消息写入到这个分区
  • Round robin partitioning :采用 Round robin 的方式,轮训所有分区进行消息写入
  • Hash partitioning:这种模式每条消息有一个 KeyProducer 根据消息的 Key 的哈希值进行分区的选择(Key 相同的消息可以保证顺序)。
  • Custom partitioning:用户自定义路由策略
    不同于别的 MQ 系统,Pulsar 允许 Consumer 的数量超过分区的数量(对于 RocketMQ,超过分区数的Consumer 会分配不到分区而“空跑”)。

Shared subscription 的订阅模式下,Consumer 数量可以大于分区的数量,每个 Consumer 处理每个 Partition 中的一部分消息,不保证消息的顺序。

持久化

Pulsar 通过 BookKeeper 来存储消息,保证消息不会丢失(BookKeeper:A scalable, fault-tolerant, and low-latency storage service optimized for real-time workloads)。

架构

在这里插入图片描述

Pulsar 采用“存储和服务分离”的两层架构(这是 Pulsar 区别于其他 MQ 系统最重要的一点,也是所谓的“下一代消息系统”的核心):

  • Broker:提供发布和订阅的服务(Pulsar 的组件)
  • Bookie:提供存储能力(BookKeeper 的存储组件)

优势是 Broker 成为了 stateless 的组件,可以水平扩容(RocketMQBroker 是包含存储的,是有状态的, Broker 的扩容更像是“拆分”)。高可靠,一致性等通过 BookKeeper 去保证。

在这里插入图片描述

上图是 Pulsar Cluster 的架构:

  • 采用 ZooKeeper 存储元数据,集群配置,作为 coordination
    • local zk 负责 Pulsar Cluster 内部的配置等
    • global zk 则用于 Pulsar Cluster 之间的数据复制等
  • 采用 Bookie 作为存储设备(大多数 MQ 系统都采用本地磁盘或者DB作为存储设备)
  • Broker 负责负载均衡和消息的读取、写入等
  • Global replicators 负责集群间的数据复制
GEO-REPLICATOIN

多个 Broker 节点组成一个 Pulsar Cluster;多个 Pulsar Cluster 组成一个 Pulsar Instance

Pulsar 通过 GEO-REPLICATION 支持一个 Instance 内在不同的地域发送和消费消息。

在这里插入图片描述

上图中,Producer P1、P2、P3 在不同的 Cluster 发送给 Topic T1 的消息,会在 Cluster 之间进行复制,Consumer C1、C2 可以在自己所在的 Cluster 消费到所有的消息。

当消息被写入 Pulsar 时,首先消息被持久化在 local cluster,之后异步的发送到其他 cluster。在没有链接问题的情况下,通常复制的 latency 相近于网络的 RTT


💖Pulsar的应用

在这里插入图片描述

  • 作为普通的 Pub-Sub 模型的消息队列使用,类似于 RocketMQ
  • 支持 Function(Stream),整合到 Stream 平台

👌Pulsar VS RocketMQ

对比RocketMQPulsar
架构单层架构,Broker服务也负责存储存储和服务分离,Broker负责提供服务,BookKeeper提供存储能力
存储Master-Slave结构BookKeeper,高可用存储
多域部署GEO-REPLICATION
订阅模式集群消费、广播消费Exclusive、Shared、Failover三种模式
Stream不支持支持
ACKcumulative ackindividual & cumulative ack
顺序消息支持支持
事务消息支持
二级消息支持
定时消息支持

🐱‍🏍在生产环境的应用

  • 是全球部署,在10+数据中心,完全网格复制能力
  • 每天处理超过1000亿条已发布的消息
  • 提供超过140万个主题
  • 在整个服务中提供少于5毫秒的平均发布延迟

✨总结

主要是简单的介绍了 Pulsar 的概念和架构,最重要的是去理解“存储和服务”分离的两层架构。之后和 Rocket 进行了对比,RocketMQ 提供了更多消息领域的能力比比如事务消息、定时消息等等,而 PulsarStreaming 方面做的更好一些。

最后感谢大家耐心观看完毕,留个点赞收藏是您对我最大的鼓励!


🎉最后

  • 更多参考精彩博文请看这里:《陈永佳的博客》

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈永佳

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值