开发者社区> 蘑菇街隐修> 正文

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." Pulsar是pub-sub模式的分布式消息平台,拥有灵活的消息模型和直观的客户端API。
+关注继续查看

Apache Pulsar

What is Pulsar

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

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

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

概念

Topic

Topic是Pulsar的核心概念,表示一个“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。

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

订阅模型

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

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

分区

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

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

  • Single partitioning:Producer随机选择一个Partition并将所有消息写入到这个分区
  • Round robin partitioning :采用Round robin的方式,轮训所有分区进行消息写入
  • Hash partitioning:这种模式每条消息有一个Key,Producer根据消息的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的组件,可以水平扩容(RocketMQ的Broker是包含存储的,是有状态的,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

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

总结

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

如果本文对您有帮助,点一下右下角的“推荐”

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
如何设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云安全组设置详细图文教程(收藏起来) 阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程。阿里云会要求客户设置安全组,如果不设置,阿里云会指定默认的安全组。那么,这个安全组是什么呢?顾名思义,就是为了服务器安全设置的。安全组其实就是一个虚拟的防火墙,可以让用户从端口、IP的维度来筛选对应服务器的访问者,从而形成一个云上的安全域。
19804 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
29141 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
22538 0
阿里云服务器ECS登录用户名是什么?系统不同默认账号也不同
阿里云服务器Windows系统默认用户名administrator,Linux镜像服务器用户名root
16432 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
20693 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
14898 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23579 0
+关注
蘑菇街隐修
专注分布式消息中间件和存储系统
68
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载