当前位置: 首页 > article >正文

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 作为其底层存储引擎,其架构设计与优化机制具有鲜明的分布式系统特征。以下从架构概念、适用场景、高可用优化及一致性保障等维度进行结构化解析:


一、核心架构概念

  1. 存储单元与数据结构

    • Entry‌:最小存储单元,每个 Entry 包含唯一递增的序列号,支持随机访问和批量读取2。
    • Ledger‌:由多个 Entry 组成的有序日志段,具有不可变性(一旦关闭无法追加)和原子性(写入成功或全失败)26。
    • Stream‌:逻辑上的无限数据流,由多个 Ledger 组成;当单个 Ledger 达到空间或时间阈值时,自动创建新 Ledger2。
    • Bookie 节点‌:存储节点,每个节点包含 Journal(预写日志)、Entry Log(Entry 持久化文件)和 Index Files(索引文件)6。
  2. 分片存储架构
    Pulsar 将 Topic 分区的数据切分为多个 Segment(即 BookKeeper Ledger),每个 Segment 独立存储于不同 Bookie 节点,实现细粒度负载均衡和扩展性37。


二、适用场景

  • 消息系统‌:为 Pulsar 提供持久化存储,支持低延迟(<5ms)的流式追尾写入25。
  • 分布式日志‌:适用于需要强一致性与容错的日志存储(如 HDFS NameNode 的 Edit Log)6。
  • WAL(预写日志)‌:为数据库或分布式系统提供事务日志的高可靠存储6。
  • 跨数据中心复制‌:支持多集群间的数据同步与一致性保障2。

三、读写高可用优化

  1. Quorum 机制
    写入时客户端并行发送 Entry 至多个 Bookie 节点,需多数节点(例如 3/5)确认成功,确保数据冗余且容忍节点故障1。
  2. 动态 Ensemble 调整
    根据负载动态调整写入的 Bookie 节点组合,避免热点问题并提升吞吐量1。
  3. 并行读取优化
    读操作可并发从多个副本获取数据,优先返回最快响应,降低延迟16。
  4. 分片存储负载均衡
    通过 Segment 切分策略,将数据均匀分布至集群,避免单节点瓶颈37。

四、一致性保障机制

  1. 写入一致性
    基于 Quorum 的多数确认策略,保证至少多数副本持久化成功后才返回客户端确认16。
  2. LastAddConfirmed (LAC)
    客户端通过 LAC 标记追踪已持久化的最新 Entry,确保读操作仅访问已确认数据18。
  3. Fencing 机制
    当检测到旧 Writer 可能异常时,新 Writer 通过 fencing 操作标记旧 Ledger 为不可写,避免多 Writer 冲突(脑裂)18。
  4. 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)

  1. Kafka

    • 采用消费者主动拉取机制,尾部读取延迟受消费者轮询频率影响。在高吞吐场景下,若Topic分区数过多或消费者组协调复杂,可能出现尾部延迟波动现象25。
    • Broker同时承担计算与存储职责,尾部读取可能因磁盘IO压力导致性能下降8。
  2. Pulsar

    • 通过无状态Broker和预读缓存机制优化尾部读取性能,在同等负载下延迟可稳定低于5ms5。
    • 存储与计算分离架构减少了Broker的磁盘IO竞争,结合BookKeeper的条带化写入策略,尾部读取吞吐量更高38。

二、切Segment机制

  1. Kafka

    • 每个分区由多个Segment文件组成,按时间或大小拆分。切Segment时需同步更新索引文件,若写入速率极高可能导致短暂写入阻塞3。
    • Segment文件本地存储,扩容时需跨节点迁移数据,影响集群整体性能6。
  2. Pulsar

    • 基于BookKeeper存储层,Segment(Ledger)以分布式副本形式存储在多个Bookie节点上,切Segment仅需关闭当前Ledger并创建新Ledger,过程无阻塞38。
    • 新Segment写入直接分配到可用Bookie节点,天然支持水平扩展,无需数据迁移3。

三、容错恢复与迁移速度

  1. Kafka

    • 副本恢复依赖ISR(In-Sync Replicas)机制,副本同步过程需全量复制数据,迁移速度受网络带宽和磁盘I/O限制6。
    • 分区再平衡时需重新选举Leader并同步数据,大规模集群下耗时显著增长3。
  2. Pulsar

    • 存储层BookKeeper采用多副本Quorum写入(Write Quorum + Ack Quorum),单Bookie故障时自动切换至健康节点,恢复无需数据拷贝,仅需重放未确认的Entry8。
    • Broker无状态设计,故障节点可快速替换,Topic分区自动迁移至新Broker,延迟仅取决于ZooKeeper元数据同步时间36。

四、存算分离架构

  1. Kafka

    • 存算一体架构,Broker同时负责消息处理和存储,扩容需同时调整计算与存储资源,难以独立扩展6。
    • 云原生适配性较弱,需依赖外部工具(如Kubernetes StatefulSets)实现动态扩缩容3。
  2. Pulsar

    • 计算层(Broker)与存储层(Bookie)完全解耦‌,支持独立扩缩容。Broker无状态,可快速水平扩展;Bookie节点动态增减不影响数据一致性38。
    • 原生适配云原生环境,结合Kubernetes可实现秒级弹性伸缩,资源利用率提升30%以上36。
    • 数据存储采用分层设计,冷热数据可分离至不同存储介质(如SSD/HDD),进一步降低成本8。

五、其他关键差异

维度KafkaPulsar
多租户支持需手动隔离,依赖外部管控工具7原生支持租户级资源配额及Namespace隔离3
Topic扩展性单集群支持约数万Topic6单集群支持超50万Topic且性能稳定3
数据一致性依赖ISR机制,极端场景可能丢数8Quorum写入+强一致性模型,金融级可靠性8

总结

  • Kafka‌更适合对吞吐量要求极高且集群规模相对固定的场景,但运维复杂度较高。
  • Pulsar‌在动态扩缩容、低延迟追尾读、快速容错恢复等方面优势显著,尤其适合云原生环境及需要强一致性的金融级应用35。

相关文章:

Apache Pulsar 消息、流、存储的融合

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

最优化方法Python计算:有约束优化应用——线性可分问题支持向量机

设问题的数据样本点 ( x i , y i ) (\boldsymbol{x}_i,y_i) (xi​,yi​)&#xff0c; x i ∈ R n \boldsymbol{x}_i\in\text{R}^n xi​∈Rn&#xff0c; y i 1 y_i\pm1 yi​1&#xff0c; i 1 , 2 , ⋯ , m i1,2,\cdots,m i1,2,⋯,m。由于标签数据 y i ∈ { − 1 , 1 } y_i\…...

Linux 离线安装 Docker 和 Docker Compose 最新版 的完整指南

一、准备工作 1. 下载安装包​&#xff08;需在有网络的机器操作&#xff09;&#xff1a; Docker 引擎&#xff1a;从官方仓库下载最新二进制包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz​Docker Compose&#xff1a;下载最新二进制…...

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…...

数据结构(四)——栈的应用—数制转换

利用栈进行数制转换&#xff1a; 十进制转换八进制&#xff1a;先将十进制数除以八得到余数&#xff0c;余数入栈&#xff0c;然后将得到的商继续除以八&#xff0c;直到商为零 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 100//数制转换//定义链表节…...

多视角系统,视角之间的切换,输入操作。无人机Pawn视角的实现

一.创建自己的PlayerController。它相当于是灵魂&#xff0c;穿梭在不同Pawn之间。也即是切换视角。不同输入的响应也写在这里。这样即使&#xff0c;都有鼠标操作&#xff0c;也能区分。避免了代码的重复耦合。也可以叫做视角系统。 class LZJGAMEMODE_API ALZJPlayerControl…...

【Redis 进阶】哨兵模式

思维导图&#xff1a; 一、哨兵模式概述 &#xff08;一&#xff09;传统主从复制模式的局限性 在传统的Redis主从复制架构中&#xff0c;若主节点发生故障&#xff0c;运维人员需手动执行故障转移操作&#xff0c;将一个从节点提升为新主节点&#xff0c;并逐一通知所有客户…...

掌控随心 - 服务网格的流量管理艺术 (Istio 实例)

掌控随心 - 服务网格的流量管理艺术 (Istio 实例) 想象一下,没有服务网格的时候,我们要实现像“将 1% 的用户流量导入到新版本应用”、“根据用户设备类型访问不同后端”、“模拟下游服务故障”这类高级流量策略,通常需要在代码、负载均衡器、API 网关等多个地方进行复杂且分…...

在服务器排查java某个线程导致CPU飙高教程

&#x1f9e9; 第一步&#xff1a;确定是哪个线程占用 CPU 高 1.1 使用 top 或 htop 命令查看高 CPU 的 Java 进程 top -Hp <Java进程PID>-H 表示显示线程级别&#xff1b;-p 后面跟 Java 主进程的 PID&#xff1b;你会看到各个线程的 CPU 使用情况&#xff0c;找出使用…...

电子商城后台管理平台-Flask Vue项目开发

电子商城后台管理系统 电子商城后台管理平台-Flask 项目开发 文章目录 前言网课内容数据库参数用户模块/user/前端LESS 的语法使用LESS 的特点 ui登录页面主页页面头部左边aside 菜单main主体后端main页面设置用户-角色-权限商品分类商品信息图片保存到项目里面订单数据展示 网…...

Lettuce 节点刷新、连接优化与 Spring 升级适配全解析:从环境约束到生产验证

引言 在分布式系统中&#xff0c;Redis 作为高性能缓存中间件被广泛使用。随着 Spring 生态的迭代&#xff08;尤其是 Spring Boot 2.0 的普及&#xff09;&#xff0c;Lettuce 逐渐取代 Jedis 成为 Redis 客户端的 “默认选择”。但开发者常面临三个核心问题&#xff1a;Let…...

CVE-2025-31258 macOS远程视图服务沙箱逃逸漏洞PoC已公开

苹果公司近日针对macOS系统中新披露的CVE-2025-31258漏洞发布补丁&#xff0c;该漏洞可能允许恶意应用程序突破沙箱限制&#xff0c;获取未授权的系统资源访问权限。在安全研究员Seo Hyun-gyu公开概念验证&#xff08;PoC&#xff09;利用代码后&#xff0c;该漏洞已在macOS Se…...

UDP协议详细讲解及C++代码实例

目录 一、UDP协议概述二、UDP通信流程1)数据传输2)无连接 三、关键点解析1&#xff09; 套接字创建2&#xff09;无连接特性3&#xff09;数据传输 四、总结 UDP协议详细讲解及C代码实例 一、UDP协议概述 UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&a…...

武汉大学无人机视角下的多目标指代理解新基准!RefDrone:无人机场景指代表达理解数据集

作者&#xff1a;Zhichao Sun, Yepeng Liu, Huachao Zhu, Yuliang Gu, Yuda Zou, Zelong Liu, Gui-Song Xia, Bo Du, Yongchao Xu 单位&#xff1a;武汉大学计算机学院 论文标题&#xff1a;RefDrone: A Challenging Benchmark for Drone Scene Referring Expression Compreh…...

【递归、搜索和回溯】二叉树中的深搜

个人主页 &#xff1a; 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的申请配置安装【以踩坑解决版】

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…...

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&#xff1a;用 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&#xff0c;全称为Web Real-Time Communication&#xff0c;是一项开创性的开源技术&#xff0c;为Web和移动应用开启了实时通信的大门。它打破了传统通信的束缚&#xff0c;使得应用之间无需依赖繁琐的中间服务器&#xff0c;就能实现直接的点对点通信&#xff0c;这是…...

关于vue 本地代理

接口调用&#xff1a;其中我们可以约定一个拦截的标识&#xff0c; 用来给本地 http://localhost/ 进行代理要请求的测试地址https:abc.com 例子&#xff1a; axios.post(/OwnRateReport/-------------------------------------------------------00001)devServer: {proxy: {/…...

#跟着若城学鸿蒙#HarmonyOS NEXT学习之Blank组件详解

一、组件介绍 Blank&#xff08;空白&#xff09;组件是HarmonyOS NEXT中一个简单但非常实用的UI组件&#xff0c;它主要用于在布局中创建空白区域&#xff0c;帮助开发者更灵活地控制界面元素之间的间距和布局结构。虽然Blank组件本身不显示任何内容&#xff0c;但它在界面设…...

PX4开始之旅(二)通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信

核心知识点&#xff1a;通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信 1. 通俗易懂的解释 想象一下&#xff0c;MAVLink 就像是无人机&#xff08;飞控&#xff09;和地面站&#xff08;QGroundControl&#xff09;之间约定好的一种“语言”。这种语言有很多标准的“…...

数据结构基础--蓝桥杯备考

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

2.4GHz无线通信芯片选型指南:集成SOC与低功耗方案解析

今天给大家分享几款2.4GHz无线通信芯片方案&#xff1a; 一、集成SOC芯片方案 XL2407P&#xff08;芯岭技术&#xff09; 集成射频收发机和微控制器&#xff08;如九齐NY8A054E&#xff09; 支持一对多组网和自动重传 发射功率8dBm&#xff0c;接收灵敏度-96.5dBm&#xff08…...

安卓刷机模式详解:Fastboot、Fastbootd、9008与MTK深刷

安卓刷机模式详解&#xff1a;Fastboot、Fastbootd、9008与MTK深刷 一、刷机模式对比 1. Fastboot模式 简介&#xff1a;传统安卓底层刷机模式&#xff0c;通过USB连接电脑操作优点&#xff1a;支持大多数安卓设备&#xff0c;操作相对简单缺点&#xff1a;需要设备进入特定…...

Unity_JK框架【5】音效系统实现

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

鸿蒙 从打开一个新窗口到Stage模型的UIAbility组件

打开一个新的窗口 我们首先来实现如何在一个应用中打开一个新窗口&#xff0c;使用的模型是 Stage 模型 在项目文件里&#xff0c;新建一个 newWindow.ets 新文件 src/main/ets/pages/newWindow.ets newWindow.ets文件里面随便写点什么都行&#xff0c;这里是第一步创建的文件…...

MySQL数据库——视图

目录 一、视图是什么&#xff1f; 二、特点 三、创建视图 四.查询视图 五.更新视图 六.视图的作用 总结 一、视图是什么&#xff1f; 视图是从一个或多个表中导出的虚拟表&#xff0c;它本身不存储数据&#xff0c;而是基于 SQL 查询的结果集。 二、特点 1.虚拟性&#xff1…...