深入拆解消息队列 47 讲
许文强
前腾讯云 Kafka 技术负责人
5385 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
深入拆解消息队列 47 讲
15
15
1.0x
00:00/00:00
登录|注册

13|从基础功能拆解Pulsar的架构设计与实现

单条确认
累积确认
Key_Shared
共享
灾备
独占
CustomPartition
SinglePartition
RoundRobinPartition
WaitForExclusive
Exclusive
Shared
ZooKeeper
Bookies
取消确认
消费确认
持久化和非持久化订阅
订阅类型
Pull 消费模型
同步写入和异步写入
批量发送
路由模式
访问模式
Entry
Ledger
分区维度组织
可插拔的元数据存储框架
ZooKeeper
Message Commands
Simple Commands
BookKeeper
Consumer
ZooKeeper
Broker
Producer
HTTP 协议支持和管控操作
消费者
生产者
消息数据存储
元数据存储
Netty 框架
自定义协议
存储层
计算层
总结
生产者和消费者
数据存储
协议和网络层
Pulsar 系统架构
Pulsar 架构设计与实现

该思维导图由 AI 生成,仅供参考

你好,我是文强。
上节课我们分析了 Kafka 在协议、网络、存储、生产者、消费者这五个模块的设计实现。这节课我们用同样的思路来分析一下 Pulsar。
近几年,作为消息队列后起之秀的 Pulsar,因为其存算分离、多租户、多协议、丰富的产品特性、支持百万 Topic 等特点,逐渐为大家所熟知。从定位来看,Pulsar 希望同时满足消息和流的场景。从技术上来看,它当前主要对标的是 Kafka,解决 Kafka 在流场景中的一些技术缺陷,比如计算层弹性、超大分区支持等等。
接下来我们就围绕着基础篇的知识点来拆解一下 Pulsar。

Pulsar 系统架构

我们先来看一下 Pulsar 的架构图。
如上图所示,Pulsar 的架构就复杂很多了,它和其他消息队列最大的区别在于 Pulsar 是基于计算存储分离的思想设计的架构,所以 Pulsar 整体架构要分为计算层和存储层两层。我们通常说的 Pulsar 是指计算层的 Broker 集群和存储层的 BookKeeper 集群两部分。
计算层包含 Producer、Broker、ZooKeeper、Consumer 四个组件,用来完成 MQ 相关的功能。存储层是独立的一个组件 BookKeeper,是一个专门用来存储日志数据的开源项目,它由 Bookies(Node)和 ZooKeeper 组成。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Pulsar的架构设计与实现是本文的主题,文章首先介绍了Pulsar的系统架构,包括计算层和存储层的设计。与Kafka相比,Pulsar采用了计算存储分离的思想,使用BookKeeper作为存储层,而Broker集群作为计算层。在架构部署上,存储层和计算层是独立的,且可以共用一套ZooKeeper集群。此外,Pulsar还引入了一些新概念,如Bundle、Bookie、Ledger等,以满足其架构设计的需求。 文章接着分析了Pulsar Broker的协议和网络模块,指出Pulsar Broker的协议是自定义的私有协议,采用行格式解析,同时使用Protobuf组织部分元数据。此外,Pulsar Broker的网络层基于Netty框架开发实现。 最后,文章介绍了Pulsar的数据存储,包括元数据存储和消息数据存储两部分。Pulsar的元数据存储目前主要依赖于ZooKeeper,但也支持可插拔的元数据存储框架,以缓解ZooKeeper的压力。 Pulsar的架构设计与实现充分体现了其与Kafka的差异和创新之处。文章内容涵盖了Pulsar的架构设计、协议与网络模块以及数据存储等方面,对于想要了解Pulsar技术特点的读者来说,是一份全面而深入的技术资料。 Pulsar的架构设计与实现充分体现了其与Kafka的差异和创新之处。文章内容涵盖了Pulsar的架构设计、协议与网络模块以及数据存储等方面,对于想要了解Pulsar技术特点的读者来说,是一份全面而深入的技术资料。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解消息队列 47 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • 虚竹
    老师好,作为新一代的mq,为何pulsar会在明知zk会成为瓶颈的情况下,依然选择zk呢?另外,pulsar的明显优势是哪些呢?

    作者回复: 我说一下我个人的技术判断。 在我看来,跟项目发展的时间点、业务需求、数据量有关。 有个前提我们需要知道,zookeeper可能会有一些隐患和不足,但是作为一个分布式协调服务,它的功能和稳定性都是很优秀的。比如Kafka 也是选择了zookeeper作为其协调和元数据存储服务。kafka是在2010年开发的,至今的架构中zookeeper还是很重要。 也就是说 zookeeper 完全可以满足作为一个分布式系统的协调服务,只是存在一些不足和隐患。 Pulsar 由 Pulsar Broker 和 Bookkeeper两个部分组成,Pulsar 和 Bookeeper都是雅虎内部孵化的。Bookeeper是2009年开始开发的,Pulsar是2015年开始开发的。 在09年的时候,Bookeeper选择zookeeper作为其协调服务是一个很标准的架构设计,也是一个被验证可行的技术方案。而pulsar 在2015年开发的时候,依赖zookeeper也成了一个顺其自然的选择。 另外,就是依赖zookeeper来实现架构,可以节省很多工作量,极大的加快项目周期。一个开源的项目,总是先有,再优化。按照这个思路来思考,就比较容易理解的。 最后一点就是,随着 Pulsar 功能和架构的迭代,越来越多的数据存在了zookeeper 中。这样无形放大了zookeeper的劣势,让问题更加明显。 当存在zookeeper中的数据量不大的时候,其实现网问题暴露的并不明显,zookeeper是很好用的。

    2023-10-10归属地:北京
    2
    1
  • 张申傲
    请教下强哥:像Pulsar这类存算分离架构,存储性能不会存在瓶颈吗?像RocketMQ、Kafka消息都是存本地文件,最多就是一次磁盘IO,而Pulsar要存远程BookKeeper,相当于是网络IO+磁盘IO,虽然会有PageCache、WAL顺序写等优化机制,但是理论上性能还是不如本地存储吧? 还是说存算分离架构就是要牺牲存储性能来换取架构的弹性?
    2023-07-19归属地:北京
    1
    1
  • Pulsar底层也是一个分区数据一个文件存放的,为什么能支持百万topic?不会产生随机IO带来的性能影响吗?
    2023-07-31归属地:广东
    1
  • Geek_ec80d2
    ",TTL 仅用于 ACK 掉在 TTL 范围内应被 ACK 的消息,不执行删除操作。真正删除的操作是依靠 Retention 策略来执行的" 这个帮忙代码上确定一下,看日志,5分钟周期ack消息后,马上把满足条件的ledger删除,而不是走retention的删除周期,多谢。
    2023-07-20归属地:北京
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部