Apache Pulsar是一款由雅虎开发的类似于Kafka的企业级消息订阅系统,在2016将其开源,由Apach基金会孵化,现在已经成长为Apache基金会的顶级项目。Pulsar在雅虎内部已经运行了三年,服务于众多的应用,主要有雅虎邮箱、雅虎财务系统、雅虎运动、Flickr、Gemini广告平台以及雅虎分布式键值对存储系统Sherpa等。

Pulsar相关概念。

为Pulsar提供数据的应用叫做生产者,而从Pulsar消费数据的应用被称为消费者,有时也称为订阅者。主题Topic是Pulsar的核心资源,这个和Kafka有点类似。主题Topic就像一个管道,生产者往里面写数据,而消费者消费里面的数据。这是Pulsar的特性1,如下图所示:

Pulsar一开始创建时就支持多租户的使用场景。为了支持多租用的功能,Pulsar包含两种资源,分别是“properties”和“namespaces”。property(资产)代表系统中的租户。举个例子,假设部署一个Pulsar集群支持各种各样的应用(就像Pulsar在雅虎公司一样),在Pulsar集群中,每一个资产代表企业中的一个团队,一个核心功能或者一条产品线。每个属性依次包含若干个namespace,例如一个namespace对应每个应用或者使用场景。一个namespace可以包含任意多个主题topic。总的来说,一个Pulsar集群包含多个资产property,一个资产property包含多个namespace,一个namespace包含多个主题topic。Pulsar集群、Property资产、Namespace和主题topic的关系图如下图所示:

namespace是Pulsar中最基本的管理单元,在namespace这一层面,可以设置权限,调整副本设置,管理跨集群的消息复制,控制消息策略和执行关键操作。一个主题topic可以继承其所对应的namespace的属性,因此我们只需对namespace的属性进行设置,就可以一次性设置该namespace中所有主题topic的属性。

namespace有两种,分别是本地的namespace和全局的namespace:

  • 本地namespace——仅对定义它的集群可见。
  • 全局namespace——跨集群可见,可以是同一个数据中心的集群,也可以是跨地域中心的集群,这依赖于是否在namespace中设置了跨集群拷贝数据的功能。

虽然本地namespace和全局namespace的作用域不同,但是只要对他们进行适当的设置,都可以跨团队和跨组织共享。一旦生产者获得了namespace的写入权限,那么它就可以往namespace中的所有topic主题写入数据,如果某个主题不存在,则在生产者第一次写入数据时动态创建。

之前提到过,每个namespace会一个或多个主题topic,每个主题会被多个消费者订阅,每个订阅者会从其所订阅的主题topic发布的所有消息中检索和接收数据。为了给每个应用增加更多的灵活性,Pulsar支持三种不同的类型的订阅,并且它们可以在同一个主题topic中共存:

  • 独享型订阅(Exclusive subscription)——这种类型的订阅在任何时候都只能有一个消费者。
  • 共享型订阅(Share subscription)——多个消费者消费同一个主题topic的数据,每个消费者会接收到一小部分数据。
  • 失效型订阅(Failover subscription)——多个消费者连接到一个主题topic,但是只有一个消费者能接收数据,其他消费者只有在当前消费者失效之后才会开始接收数据。

Pulsar提供三种不同类型的订阅subscriptions。subscription提供一个最重要的功能就是解耦消息的生产和消费。通过支持不同类型的subscription,无需增加开发的复杂度就可以增强应用的弹性。下图展现了三种不同类型的订阅:

数据分区

topic主题中的数据有时会很小,小到几KB,有时会很大,大道几十TB。这意这意味着主题topic需要具备在某些情况下保持稳定的低吞吐量,在另一些情况下保持非常高的吞吐量的能力,这取决于使用者的数量。因此,当一个主题需要高吞吐率而例外一个主题需要低吞吐率时,会发生什么呢?为了解决该问题Pulsar允许你当将一个主题topic中的数据分成不同的区域然后存储在不同的机器中。这就是Pulsar的分区功能。

对于处理跨多个节点的大量数据,使用分区是一个非常普通的做法,同时还可以实现高吞吐率。默认情况下,创建的主题topic是没有分区的,但是创建有分区的主题topic也很容易,使用简单的CLI命令或者通过调用API,并且指定分区数量即可。

当你创建有分区的主题时,Pulsar自动将数据分区,确保消费者和生产者与分区无关。对一个还没分区但是已经写入数据的主题进行分区之后,无需对原来的代码进行修改,即可继续将数据写入该主题topic。也就是说分区和应用无关

Pulsar使用一个叫做broker的进程来处理主题的分区,Pulsar集群中的每个节点都运行一个自己的broker进程,下图显示了broker节点如何如果处理分区的细节。

应用程序无需修改代码即可使用分区的优点,Pulsar还额外提供了一些hooks让数据在不同分区和不同消费者之间的分布能达到最佳的效果。Pulsar提供四种不同的路由策略,根据你选择的路由策略决定数据是如何路由到指定的分区。四种分区策略如下:

  • Single partitioning(单一分区):生产者随机获取一个分区,并将数据写入到该分区。该模式和无分区主题提供一样的保证,但是对多个生产者写入数据到主题topic的场景非常有用。
  • Round robin partitioning(轮询调度分区):在该应用场景,生产者将数据均匀的分布到所有的分区,第一条消息写入到第一个分区,第二条消息写入到第二个分区,以此类推。
  • Hash partitioning(哈希分区):在该应用场景下是如何选择分区接入数据的呢?每条消息都有一个key,然后对key调用哈希函数生成一个哈希值,根据该值来选择消息要写入的分区。哈希分区保证消息的按照key的顺序分布。
  • Custom partitioning(自定义分区):生产者使用自定义的函数接收消息并生成分区号,下次直接写入对应的分区中,自定义分区模式保证应用程序完全控制分区逻辑。

数据持久性

一旦Pulsar broker接收并确认数据是来自生成者写入到主题topic中的,它需要保证数据在任何情况下都不丢失,不像其他的消息管理系统,Pulsar使用Apache BookKeeper提供的低延迟持久化存储特性保证数据的持久性。一旦Pulsar接收到数据,它会数据发送到多个BookKeeper节点,接收到数据的BookKeeper节点会数据写入到内存和预写日志(write-ahead log)中。在对数据确认之前会强制将日志写入到持久化存储设备中。通过将数据写入到存储设备中,即使出现断电的情况,数据也不会丢失。只有当数据写入到大多数的BookKeeper节点中,Pulsar才会发送确认消息给生产者。

零数据丢失和满足性能要求是消息管理系统的最基本的两个功能,这两个功能在雅虎公司内部已经得到了验证,自从2015年正式在生产环境中使用以来,Pulsar服务了雅虎公司多个重要的系统,例如雅虎财经、雅虎运动、雅虎邮箱、Gemini广告平台以及雅虎分布式存储服务平台Sherpa,目前Pulsar已经在雅虎公司大规模的使用:

  • 部署在全球10大数据中心,具有全网复制能力。
  • 每天处理超过100亿的数据发布。
  • 服务超过140万个主题。
  • 发布延迟时间的平均值低于5毫秒。

转载于https://www.cnblogs.com/airnew/p/9727188.html

Pulsar快速了解相关推荐

  1. 360度无死角 | Pulsar与Kafka对比全解析

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 2020 年,Pulsar 受到持续关注,Pulsar 的应用场景也越来越广泛. 本文分别从性能. ...

  2. 初试Pulsar---私有云离线安装部署Pulsar

    前一段时间了解了Pulsar这个开源项目,感觉是一个替换kafka的好东西!它具体的特性各位自行搜索吧! 为了自己项目尝试使用Pulsar,我决定进行部署实验.但是,目前网上看到的都是在公网上公有云部 ...

  3. Redis、Kafka 和 Pulsar 消息队列对比

    点击关注公众号,Java干货及时送达 导语 | 市面上有非常多的消息中间件,rabbitMQ.kafka.rocketMQ.pulsar. redis等等,多得令人眼花缭乱.它们到底有什么异同,你应该 ...

  4. Pulsar:下一代消息引擎真的这么强吗?

    背景 我们最近在做新业务的技术选型,其中涉及到了对消息中间件的选择:结合我们的实际情况希望它能满足以下几个要求: 友好的云原生支持:因为现在的主力语言是 Go,同时在运维上能够足够简单. 官方支持多种 ...

  5. Redis、Kafka 和 Pulsar 消息队列对比,写得太好了!

    市面上有非常多的消息中间件,rabbitMQ.kafka.rocketMQ.pulsar. redis等等,多得令人眼花缭乱.它们到底有什么异同,你应该选哪个? 本文尝试通过技术演进的方式,以redi ...

  6. 对 Kafka 和 Pulsar 进行性能测试后,拉卡拉将消息平台统一换成了 Pulsar

    拉卡拉支付成立于 2005 年,是国内领先的第三方支付企业,致力于整合信息科技,服务线下实体,从支付切入,全维度为中小微商户的经营赋能.2011 年成为首批获得<支付业务许可证>企业的一员 ...

  7. 急需降低系统复杂性,我们从 Kafka 迁移到了 Pulsar

    要点总结 分布式消息系统支持流和队列两种语义,这两种语义最适合使用的场景有所不同. Pulsar 的独特之处在于它同时支持流和队列使用场景. Pulsar 采用多层架构,可以轻松扩展 topic 的数 ...

  8. Apache Pulsar中的地域复制,第1篇:概念和功能

    灾难恢复规划,甚至更理想情况下使用的防灾规划,它们的重要性怎么强调都不为过,每周都会有相关的头条新闻报道证明这个结论的正确性.无论什么行业,如果遭遇无法预见的事件并影响到日常运维,组织都需要尽可能快速 ...

  9. 今日直播 | Apache Hudi x Apache Pulsar Meetup线上专场如期而至 大咖齐聚

    简介:Apache Hudi 与 Apache Pulsar 联合 Meetup 线上专场将于2021 年 8 月 30 日(今天) 14:00开启直播,你准备好了吗? Apache Hudi 与 A ...

最新文章

  1. sap运维要做哪些工作_社会工作师可以做哪些工作?考试难不难?
  2. 【Caffe实践】基于Caffe的人脸识别实现
  3. 在OpenWrt中上传文件至路由器
  4. 高考特长计算机2017,2017年北京理工大学计算机学院申请竞赛获奖与特长生推荐.PDF...
  5. DCMTK:从命令行修改DICOM文件的类
  6. 图像的熵、灰度平均值、灰度中值、方差
  7. ping cat.flag.php,关于2020年强网杯-强网先锋-主动的赛题解析
  8. html 适配 android,Android 版本适配 6~11
  9. linux nexus启动_Linux一键部署Nexus 3私服仓库自动化部署脚本
  10. c语言数码管的动态显示时间,8位数码管动态显示时间,可调节,调节的数闪烁显示...
  11. Java生产环境下性能监控与调优详解 第2章 基于JDK命令行工具的监控
  12. opencv ppt效果_opencv几何图形画法
  13. VSCode Vim
  14. 吴恩达机器学习2——单变量线性回归
  15. repast HPC初探(运行其自带例子过程中出现的问题)
  16. Excel如何快速制作文件目录
  17. linux,centos7环境下,安装RabbitMQ
  18. 9门主流编程语言---详细对比
  19. 【Java】我的世界Java版外挂制作 [2] - 游戏内GUI
  20. opc java_Java OPC 代码

热门文章

  1. Windows系统电脑桌面无响应解决方法
  2. 支付宝支付 - 电脑网站支付
  3. android开机启动界面,26_自定义 Android 启动页面
  4. 求解1+(1+2)+(1+2+3)...(1+2+3+....+n),n由键盘输入。
  5. 新华三云计算的深度与温度
  6. 请替费城球迷好好照顾艾弗森
  7. 重庆北大青鸟解放碑校区J12班 五杀摇滚乐队【权限管理系统】
  8. 【FZU】Problem 2217 Taxi 【暴力状压dp】
  9. 【计算视觉】用Python识别人脸,表情,性别,颜值,人种...
  10. 获取硬盘和卷或分区相关信息(容量,ID,卷标名字等)