Apache Pulsar 消息、流、存储的融合
Apache Pulsar 消息、流、存储的融合
消息队列在大层面有两种不同类型的应用,一种是在线系统的message queue,一种是流计算,data pipeline的streaming高throughout,一致性较低,延迟较差的过程。
存算分离 扩容和缩容快速
segment 打散(时间和容量切分)多机器能力
多租户的能力,配额
原来的架构,多种消息中间件不同场景不同选型
统一兼容旧系统协议,统一存储bookkeeper
内部二级分层存储,统一批存储和流存储(之前外部系统计算存储到HDFS)
统一抽象管理,统一视图topic抽象,但是优化存储位置历史数据列存等
云原生的能力
Apache BookKeeper:Apache Pulsar的高可用强一致低延迟的存储实现
可调整(带宽,灾备等级,一致性等级)
新起一份fragment承载写
writer变成master,底层存储是对等节点(区别raft一致性)
两个writer有点像paxos
磁盘隔离WAL,数据盘隔离(可变换)
PMEM,快,容量小,寿命高,比SSD更适合做journal
Apache Pulsar 依赖的 Apache BookKeeper 作为其底层存储引擎,其架构设计与优化机制具有鲜明的分布式系统特征。以下从架构概念、适用场景、高可用优化及一致性保障等维度进行结构化解析:
一、核心架构概念
-
存储单元与数据结构
- Entry:最小存储单元,每个 Entry 包含唯一递增的序列号,支持随机访问和批量读取2。
- Ledger:由多个 Entry 组成的有序日志段,具有不可变性(一旦关闭无法追加)和原子性(写入成功或全失败)26。
- Stream:逻辑上的无限数据流,由多个 Ledger 组成;当单个 Ledger 达到空间或时间阈值时,自动创建新 Ledger2。
- Bookie 节点:存储节点,每个节点包含 Journal(预写日志)、Entry Log(Entry 持久化文件)和 Index Files(索引文件)6。
-
分片存储架构
Pulsar 将 Topic 分区的数据切分为多个 Segment(即 BookKeeper Ledger),每个 Segment 独立存储于不同 Bookie 节点,实现细粒度负载均衡和扩展性37。
二、适用场景
- 消息系统:为 Pulsar 提供持久化存储,支持低延迟(<5ms)的流式追尾写入25。
- 分布式日志:适用于需要强一致性与容错的日志存储(如 HDFS NameNode 的 Edit Log)6。
- WAL(预写日志):为数据库或分布式系统提供事务日志的高可靠存储6。
- 跨数据中心复制:支持多集群间的数据同步与一致性保障2。
三、读写高可用优化
- Quorum 机制
写入时客户端并行发送 Entry 至多个 Bookie 节点,需多数节点(例如 3/5)确认成功,确保数据冗余且容忍节点故障1。 - 动态 Ensemble 调整
根据负载动态调整写入的 Bookie 节点组合,避免热点问题并提升吞吐量1。 - 并行读取优化
读操作可并发从多个副本获取数据,优先返回最快响应,降低延迟16。 - 分片存储负载均衡
通过 Segment 切分策略,将数据均匀分布至集群,避免单节点瓶颈37。
四、一致性保障机制
- 写入一致性
基于 Quorum 的多数确认策略,保证至少多数副本持久化成功后才返回客户端确认16。 - LastAddConfirmed (LAC)
客户端通过 LAC 标记追踪已持久化的最新 Entry,确保读操作仅访问已确认数据18。 - Fencing 机制
当检测到旧 Writer 可能异常时,新 Writer 通过 fencing 操作标记旧 Ledger 为不可写,避免多 Writer 冲突(脑裂)18。 - Ledger 不可变性
已关闭的 Ledger 不可修改,防止数据篡改并简化一致性管理2。
五、Writer 脑裂避免
- Fencing 流程:新 Writer 启动时会对旧 Ledger 发起 fencing 请求,通过元数据服务(如 ZooKeeper)验证所有权,确保同一时刻仅一个有效 Writer18。(实际上也就是用外部选主,简化存储层设计,达到对等节点)
- 原子性元数据更新:Ledger 元数据(如状态、Owner)需通过原子操作更新,避免并发冲突6。
六、其他重要概念
- 跨机房复制:通过异步复制机制实现多集群间数据同步,支持地理容灾2。
- 分层存储:支持将冷数据迁移至廉价存储(如 HDFS),降低存储成本6。
- 计算存储分离:Pulsar Broker 处理计算逻辑,BookKeeper 专注存储,提升系统弹性与扩展性37。
通过上述设计,BookKeeper 在高吞吐、低延迟与强一致性之间取得平衡,成为云原生场景下可靠的分布式存储基石。
深入对比 Apache Pulsar 与 Kafka
kafka横向扩展困难,以及kafka的弹性伸缩困难
以下从追尾读、切Segment、容错恢复迁移速度、存算分离等角度对Kafka与Pulsar进行深度对比分析:
一、追尾读(Tailing Reads)
-
Kafka
- 采用消费者主动拉取机制,尾部读取延迟受消费者轮询频率影响。在高吞吐场景下,若Topic分区数过多或消费者组协调复杂,可能出现尾部延迟波动现象25。
- Broker同时承担计算与存储职责,尾部读取可能因磁盘IO压力导致性能下降8。
-
Pulsar
- 通过无状态Broker和预读缓存机制优化尾部读取性能,在同等负载下延迟可稳定低于5ms5。
- 存储与计算分离架构减少了Broker的磁盘IO竞争,结合BookKeeper的条带化写入策略,尾部读取吞吐量更高38。
二、切Segment机制
-
Kafka
- 每个分区由多个Segment文件组成,按时间或大小拆分。切Segment时需同步更新索引文件,若写入速率极高可能导致短暂写入阻塞3。
- Segment文件本地存储,扩容时需跨节点迁移数据,影响集群整体性能6。
-
Pulsar
- 基于BookKeeper存储层,Segment(Ledger)以分布式副本形式存储在多个Bookie节点上,切Segment仅需关闭当前Ledger并创建新Ledger,过程无阻塞38。
- 新Segment写入直接分配到可用Bookie节点,天然支持水平扩展,无需数据迁移3。
三、容错恢复与迁移速度
-
Kafka
- 副本恢复依赖ISR(In-Sync Replicas)机制,副本同步过程需全量复制数据,迁移速度受网络带宽和磁盘I/O限制6。
- 分区再平衡时需重新选举Leader并同步数据,大规模集群下耗时显著增长3。
-
Pulsar
- 存储层BookKeeper采用多副本Quorum写入(Write Quorum + Ack Quorum),单Bookie故障时自动切换至健康节点,恢复无需数据拷贝,仅需重放未确认的Entry8。
- Broker无状态设计,故障节点可快速替换,Topic分区自动迁移至新Broker,延迟仅取决于ZooKeeper元数据同步时间36。
四、存算分离架构
-
Kafka
- 存算一体架构,Broker同时负责消息处理和存储,扩容需同时调整计算与存储资源,难以独立扩展6。
- 云原生适配性较弱,需依赖外部工具(如Kubernetes StatefulSets)实现动态扩缩容3。
-
Pulsar
- 计算层(Broker)与存储层(Bookie)完全解耦,支持独立扩缩容。Broker无状态,可快速水平扩展;Bookie节点动态增减不影响数据一致性38。
- 原生适配云原生环境,结合Kubernetes可实现秒级弹性伸缩,资源利用率提升30%以上36。
- 数据存储采用分层设计,冷热数据可分离至不同存储介质(如SSD/HDD),进一步降低成本8。
五、其他关键差异
维度 | Kafka | Pulsar |
---|---|---|
多租户支持 | 需手动隔离,依赖外部管控工具7 | 原生支持租户级资源配额及Namespace隔离3 |
Topic扩展性 | 单集群支持约数万Topic6 | 单集群支持超50万Topic且性能稳定3 |
数据一致性 | 依赖ISR机制,极端场景可能丢数8 | Quorum写入+强一致性模型,金融级可靠性8 |
总结
- Kafka更适合对吞吐量要求极高且集群规模相对固定的场景,但运维复杂度较高。
- Pulsar在动态扩缩容、低延迟追尾读、快速容错恢复等方面优势显著,尤其适合云原生环境及需要强一致性的金融级应用35。
相关文章:

Apache Pulsar 消息、流、存储的融合
Apache Pulsar 消息、流、存储的融合 消息队列在大层面有两种不同类型的应用,一种是在线系统的message queue,一种是流计算,data pipeline的streaming高throughout,一致性较低,延迟较差的过程。 存算分离 扩容和缩容快…...

最优化方法Python计算:有约束优化应用——线性可分问题支持向量机
设问题的数据样本点 ( x i , y i ) (\boldsymbol{x}_i,y_i) (xi,yi), x i ∈ R n \boldsymbol{x}_i\in\text{R}^n xi∈Rn, y i 1 y_i\pm1 yi1, i 1 , 2 , ⋯ , m i1,2,\cdots,m i1,2,⋯,m。由于标签数据 y i ∈ { − 1 , 1 } y_i\…...
Linux 离线安装 Docker 和 Docker Compose 最新版 的完整指南
一、准备工作 1. 下载安装包(需在有网络的机器操作): Docker 引擎:从官方仓库下载最新二进制包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgzDocker Compose:下载最新二进制…...

SpringBoot学习(上) , SpringBoot项目的创建(IDEA2024版本)
目录 1. SpringBoot介绍 SpringBoot特点 2. SpringBoot入门 2.1 创建SpringBoot项目 Spring Initialize 第一步: 选择创建项目 第二步: 选择起步依赖 第三步: 查看启动类 2.2 springboot父项目 2.3 测试案例 2.3.1 数据库 2.3.2 生成代码 1. SpringBoot介绍 Spring B…...
数据结构(四)——栈的应用—数制转换
利用栈进行数制转换: 十进制转换八进制:先将十进制数除以八得到余数,余数入栈,然后将得到的商继续除以八,直到商为零 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 100//数制转换//定义链表节…...
多视角系统,视角之间的切换,输入操作。无人机Pawn视角的实现
一.创建自己的PlayerController。它相当于是灵魂,穿梭在不同Pawn之间。也即是切换视角。不同输入的响应也写在这里。这样即使,都有鼠标操作,也能区分。避免了代码的重复耦合。也可以叫做视角系统。 class LZJGAMEMODE_API ALZJPlayerControl…...

【Redis 进阶】哨兵模式
思维导图: 一、哨兵模式概述 (一)传统主从复制模式的局限性 在传统的Redis主从复制架构中,若主节点发生故障,运维人员需手动执行故障转移操作,将一个从节点提升为新主节点,并逐一通知所有客户…...
掌控随心 - 服务网格的流量管理艺术 (Istio 实例)
掌控随心 - 服务网格的流量管理艺术 (Istio 实例) 想象一下,没有服务网格的时候,我们要实现像“将 1% 的用户流量导入到新版本应用”、“根据用户设备类型访问不同后端”、“模拟下游服务故障”这类高级流量策略,通常需要在代码、负载均衡器、API 网关等多个地方进行复杂且分…...
在服务器排查java某个线程导致CPU飙高教程
🧩 第一步:确定是哪个线程占用 CPU 高 1.1 使用 top 或 htop 命令查看高 CPU 的 Java 进程 top -Hp <Java进程PID>-H 表示显示线程级别;-p 后面跟 Java 主进程的 PID;你会看到各个线程的 CPU 使用情况,找出使用…...
电子商城后台管理平台-Flask Vue项目开发
电子商城后台管理系统 电子商城后台管理平台-Flask 项目开发 文章目录 前言网课内容数据库参数用户模块/user/前端LESS 的语法使用LESS 的特点 ui登录页面主页页面头部左边aside 菜单main主体后端main页面设置用户-角色-权限商品分类商品信息图片保存到项目里面订单数据展示 网…...
Lettuce 节点刷新、连接优化与 Spring 升级适配全解析:从环境约束到生产验证
引言 在分布式系统中,Redis 作为高性能缓存中间件被广泛使用。随着 Spring 生态的迭代(尤其是 Spring Boot 2.0 的普及),Lettuce 逐渐取代 Jedis 成为 Redis 客户端的 “默认选择”。但开发者常面临三个核心问题:Let…...

CVE-2025-31258 macOS远程视图服务沙箱逃逸漏洞PoC已公开
苹果公司近日针对macOS系统中新披露的CVE-2025-31258漏洞发布补丁,该漏洞可能允许恶意应用程序突破沙箱限制,获取未授权的系统资源访问权限。在安全研究员Seo Hyun-gyu公开概念验证(PoC)利用代码后,该漏洞已在macOS Se…...
UDP协议详细讲解及C++代码实例
目录 一、UDP协议概述二、UDP通信流程1)数据传输2)无连接 三、关键点解析1) 套接字创建2)无连接特性3)数据传输 四、总结 UDP协议详细讲解及C代码实例 一、UDP协议概述 UDP(User Datagram Protocol,用户数据报协议&a…...

武汉大学无人机视角下的多目标指代理解新基准!RefDrone:无人机场景指代表达理解数据集
作者:Zhichao Sun, Yepeng Liu, Huachao Zhu, Yuliang Gu, Yuda Zou, Zelong Liu, Gui-Song Xia, Bo Du, Yongchao Xu 单位:武汉大学计算机学院 论文标题:RefDrone: A Challenging Benchmark for Drone Scene Referring Expression Compreh…...

【递归、搜索和回溯】二叉树中的深搜
个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录 前言1 2331. 计算布尔二叉树的值1.1 分析1.2 代码 2 129. 求根节点到叶节点数字之和2.1 分析2.2 代码 3 814. 二叉树剪枝3.1 分析3.2 代码 4 98. 验证…...

Algolia - Docsearch的申请配置安装【以踩坑解决版】
👨🎓博主简介 🏅CSDN博客专家 🏅云计算领域优质创作者 🏅华为云开发者社区专家博主 🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入!…...

Linux513 rsync本地传输 跨设备传输 一
ping节点bPing通 仅主机模式不需要设置网关节点a也可以Ping通节点b 同步成功 下载文件夹成功 今日源码 节点a 节点b...

leetcode 383. Ransom Note
题目描述 代码 class Solution { public:bool canConstruct(string ransomNote, string magazine) {vector<int> table(26,0);for(char ch : magazine){table[ch-a];}for(char ch : ransomNote){table[ch-a]--;if(table[ch-a] < 0)return false;}return true;} };...

Skyvern:用 AI+视觉驱动浏览器自动化
Skyvern:用 AI视觉驱动浏览器自动化 一、前言二、项目概览2.1 Skyvern 项目简介2.2 代码结构与模块划分 三、环境搭建与快速上手3.1 环境准备3.1.1 系统与依赖3.1.2 克隆项目3.1.3 安装 Python 依赖3.1.4 配置环境变量3.1.5 启动服务 3.2 验证安装 四、核心功能与实…...

数据库原理期末考试速成--最后附带两套题
引言 为什么从3开始呢,毕竟是速成吗,总要放弃一些东西 前两章1.概论 2.关系数据库:这里面都是一些运算符什么的,我感觉都学这个:笛卡尔积之列的都会算 这两章比较重要的我就放在这里了 选择、投影、连接、除、并、交、差,其中选择、投影、并、差、笛卡尔积是5种基本关…...
《探索React Native社交应用中WebRTC实现低延迟音视频通话的奥秘》
WebRTC,全称为Web Real-Time Communication,是一项开创性的开源技术,为Web和移动应用开启了实时通信的大门。它打破了传统通信的束缚,使得应用之间无需依赖繁琐的中间服务器,就能实现直接的点对点通信,这是…...
关于vue 本地代理
接口调用:其中我们可以约定一个拦截的标识, 用来给本地 http://localhost/ 进行代理要请求的测试地址https:abc.com 例子: axios.post(/OwnRateReport/-------------------------------------------------------00001)devServer: {proxy: {/…...
#跟着若城学鸿蒙#HarmonyOS NEXT学习之Blank组件详解
一、组件介绍 Blank(空白)组件是HarmonyOS NEXT中一个简单但非常实用的UI组件,它主要用于在布局中创建空白区域,帮助开发者更灵活地控制界面元素之间的间距和布局结构。虽然Blank组件本身不显示任何内容,但它在界面设…...
PX4开始之旅(二)通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信
核心知识点:通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信 1. 通俗易懂的解释 想象一下,MAVLink 就像是无人机(飞控)和地面站(QGroundControl)之间约定好的一种“语言”。这种语言有很多标准的“…...

数据结构基础--蓝桥杯备考
1.优缺点总述 STL中各容器对比图 各类线性数据结构优缺点 1.数组 1.优点 1.简单,容易理解 2.访问快捷,只需要用下标就可以 3.有某些应用场景直接对应,例如二维数组对应平面 2.缺点 删除和插入数据非常耗时 2.链表 1.优点 插入和删…...

2.4GHz无线通信芯片选型指南:集成SOC与低功耗方案解析
今天给大家分享几款2.4GHz无线通信芯片方案: 一、集成SOC芯片方案 XL2407P(芯岭技术) 集成射频收发机和微控制器(如九齐NY8A054E) 支持一对多组网和自动重传 发射功率8dBm,接收灵敏度-96.5dBm(…...
安卓刷机模式详解:Fastboot、Fastbootd、9008与MTK深刷
安卓刷机模式详解:Fastboot、Fastbootd、9008与MTK深刷 一、刷机模式对比 1. Fastboot模式 简介:传统安卓底层刷机模式,通过USB连接电脑操作优点:支持大多数安卓设备,操作相对简单缺点:需要设备进入特定…...

Unity_JK框架【5】音效系统实现
在游戏开发中,音频是不可或缺的一部分,它能够极大地增强游戏的沉浸感和趣味性。今天,我们就用JK框架 探讨一下如何在Unity中实现一个强大的音频系统,并且通过实际的测试脚本来验证其功能👏。 一、音频模块类࿱…...

鸿蒙 从打开一个新窗口到Stage模型的UIAbility组件
打开一个新的窗口 我们首先来实现如何在一个应用中打开一个新窗口,使用的模型是 Stage 模型 在项目文件里,新建一个 newWindow.ets 新文件 src/main/ets/pages/newWindow.ets newWindow.ets文件里面随便写点什么都行,这里是第一步创建的文件…...
MySQL数据库——视图
目录 一、视图是什么? 二、特点 三、创建视图 四.查询视图 五.更新视图 六.视图的作用 总结 一、视图是什么? 视图是从一个或多个表中导出的虚拟表,它本身不存储数据,而是基于 SQL 查询的结果集。 二、特点 1.虚拟性࿱…...