pulsar使用指南
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。以下从核心架构、功能特性、技术优势及应用场景等方面进行详细介绍:
一、核心架构
-
分层架构设计
Pulsar 采用 计算与存储分离 的云原生架构,由无状态服务层(Broker)和持久化存储层(BookKeeper)组成:- Broker:负责消息的路由、负载均衡和元数据管理,不存储数据,支持快速扩容和故障转移。
- BookKeeper:由多个 Bookie 节点组成,提供分布式日志存储,通过分片(Segment)机制将数据均匀分布,每个分片独立存储并多副本复制,保障数据可靠性和高吞吐。
- ZooKeeper:负责集群元数据协调和一致性管理。
-
分片存储与扩展
- 每个 Topic 分区的数据被拆分为多个分片(Segment),分片作为最小存储单元分布在 Bookie 节点上,支持动态扩容时无需数据迁移。
- 存储层扩容通过新增 Bookie 节点实现,新分片优先写入新节点,避免传统分区存储的容量倾斜问题。
二、核心功能特性
-
多租户与资源隔离
- 支持租户(Tenant)和命名空间(Namespace)两级隔离,可配置存储配额、访问权限和消息过期策略,适合企业级多团队共享集群。
-
灵活的订阅模式
- 独占(Exclusive):单消费者独占订阅,保障严格顺序性。
- 故障转移(Failover):主备消费者自动切换,提升高可用性。
- 共享(Shared):多消费者轮询消费,提高吞吐但无序。
- 键共享(Key_Shared):相同 Key 的消息路由到同一消费者,保证 Key 级有序。
-
跨地域复制与分层存储
- 原生支持跨数据中心数据同步(同步/异步模式),用于灾备和全球化部署。
- 分层存储可将历史数据自动迁移至 S3、HDFS 等低成本存储,减少热数据存储成本。
-
流批一体与轻量计算
- 支持消息队列和流式处理的统一模型,同一数据可多次消费。
- 内置 Pulsar Functions 框架,实现无服务器(Serverless)实时数据处理,如过滤、转换和路由。
三、技术优势
-
性能与可靠性
- 低延迟高吞吐:P99 延迟稳定在 5-15ms,支持每秒百万级消息处理,性能不随分区数增加而下降。
- 强一致性:基于 Quorum 协议的多副本同步写入,保障数据一致性。
-
云原生与扩展性
- 无状态 Broker 和分片存储设计,支持独立扩缩容,适合 Kubernetes 等云环境。
- 单集群可支持百万级 Topic,远超 Kafka 的扩展能力。
-
生态兼容性
- 提供多语言客户端(Java、Go、Python 等),兼容 Kafka API(KoP 组件),支持无缝迁移。
- 与 Flink、Spark 等流计算框架深度集成,支持 SQL 查询和实时分析。
四、典型应用场景
- 金融领域:实时交易处理、风控监控,利用低延迟和强一致性保障业务可靠性。
- 电商与物联网:订单异步处理、设备数据采集,通过共享订阅和分层存储应对高并发。
- 媒体与日志处理:实时推荐、日志流水收集,结合 Pulsar Functions 实现流式 ETL。
- 微服务通信:解耦服务间依赖,支持事务消息和死信队列(DLQ)处理异常场景。
五、安装与部署
-
单机模式(适合开发测试)
- 下载与解压:
wget https://archive.apache.org/dist/pulsar/pulsar-2.8.1/apache-pulsar-2.8.1-bin.tar.gz tar xvfz apache-pulsar-2.8.1-bin.tar.gz
- 启动服务:
bin/pulsar standalone # 自动启动ZooKeeper和BookKeeper
- 验证运行:
查看日志logs/pulsar-standalone.log
,或执行bin/pulsar-admin clusters list
,返回standalone
表示成功。
- 下载与解压:
-
集群模式(生产环境)
- 依赖组件:
- ZooKeeper:管理元数据和协调集群(配置
conf/zookeeper.conf
)。 - BookKeeper:持久化存储消息(配置
conf/bookkeeper.conf
,指定zkServers
)。
- ZooKeeper:管理元数据和协调集群(配置
- Broker配置:
修改conf/broker.conf
,设置zookeeperServers
和configurationStoreServers
指向ZooKeeper集群地址。 - 启动服务:
bin/pulsar-daemon start zookeeper # 启动ZooKeeper bin/pulsar-daemon start bookie # 启动BookKeeper bin/pulsar-daemon start broker # 启动Broker
- 依赖组件:
六、核心概念与使用
-
生产与消费消息
- 命令行工具:
# 生产消息 bin/pulsar-client produce my-topic --messages "Hello Pulsar" # 消费消息 bin/pulsar-client consume my-topic -s "my-subscription"
- Java客户端示例:
// 创建客户端 PulsarClient client = PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build(); // 生产者发送消息 Producer<byte[]> producer = client.newProducer().topic("test-topic").create(); producer.send("Message".getBytes()); // 消费者订阅 Consumer<byte[]> consumer = client.newConsumer().topic("test-topic").subscriptionName("sub").subscribe(); Message<byte[]> msg = consumer.receive();
- 命令行工具:
-
订阅模式
- 独占订阅(Exclusive):仅允许一个消费者连接,适用于严格有序场景。
- 故障转移(Failover):主消费者故障时自动切换备用消费者,适合高可用需求。
- 共享订阅(Shared):多个消费者轮询消费,吞吐量高但无序。
- 键共享(Key_Shared):相同Key的消息路由到同一消费者,保证Key级有序(需消息指定Key)。
七、高级配置与优化
-
负载均衡
- 动态扩缩容:Broker无状态设计,新增节点后负载自动迁移。
- 策略配置:
- 修改
conf/broker.conf
启用loadBalancerEnabled=true
。 - 选择卸载策略(如
ThresholdShedder
)和放置策略(如ModularLoadManager
)。
- 修改
-
存储与性能
- BookKeeper优化:
- 配置I/O隔离路径(写入、追尾读、追赶读分离)。
- 调整
journalSyncData=false
提升写入性能(牺牲部分持久性)。
- 消息批处理:启用
batchingEnabled
减少小消息开销。
- BookKeeper优化:
八、监控与维护
-
日志与指标
- 查看
logs
目录下的Broker/Bookie日志。 - 集成Prometheus监控(配置
metricsProvider=org.apache.bookkeeper.stats.prometheus.PrometheusMetricsProvider
)。
- 查看
-
多租户管理
- 通过租户(Tenant)和命名空间(Namespace)隔离资源:
bin/pulsar-admin tenants create my-tenant bin/pulsar-admin namespaces create my-tenant/my-namespace
- 通过租户(Tenant)和命名空间(Namespace)隔离资源:
九、最佳实践
- 开发建议:
- 使用
persistent://tenant/namespace/topic
规范Topic命名。 - 避免Shared模式下的消息顺序依赖。
- 使用
- 生产环境调优:
- 调整JVM堆内存(
PULSAR_MEM
参数)。 - 启用TLS加密通信(配置
webServiceUrlTls
和brokerServiceUrlTls
)。
- 调整JVM堆内存(
十、总结
Apache Pulsar 凭借其云原生架构、多模式消息处理和高扩展性,成为实时数据场景的优选方案。无论是金融级强一致需求,还是海量物联网数据流,Pulsar 均能提供高效可靠的解决方案。其活跃的社区和持续迭代(如 2024 年发布的 3.1.x 版本增强 Geo-Replication 功能)进一步巩固了其在消息中间件领域的领先地位。
相关文章:
pulsar使用指南
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞…...
底盘---麦克纳姆轮(Mecanum Wheel)
一、基本定义与起源 定义:麦克纳姆轮是一种实现全向移动的特殊轮式结构,通过在主轮周边安装多个倾斜的辊子(小轮),使设备能够在平面上向任意方向移动(包括横向、斜向、旋转等),无需…...
内网文件传输新体验,聊天、传输、自定义,一应俱全
Flix 是一款高效、便捷的跨平台局域网文件传输工具,支持 Windows、macOS、Android、iOS 和 Linux 等多种操作系统。它以简洁直观的聊天式界面为特色,让用户能够像发送消息一样轻松地传输文件,无需复杂的设置或登录。Flix 支持大文件和多种格式…...
深入解析嵌入式Linux系统架构:从Bootloader到用户空间
B站视频链接,请多多关注本人B站: 📌 Yocto项目实战教程:第二章 视频讲解 目录 第2章 Linux系统架构 2.1 GNU/Linux2.2 Bootloader2.3 内核空间2.4 用户空间 总结 第2章 Linux系统架构 {#linux系统架构} 嵌入式Linux系统是Linux内核的精简版…...
一句话,十分钟,一部片!
大家好!我是羊仔,专注AI工具、智能体、编程。 羊仔最近发现一个超有意思的AI工具,简直是为内容创作者量身打造的!啥工具?Story-Flicks! 这玩意儿能干啥呢?简单来说,一句话…...
【橘子大模型】使用streamlit来构建自己的聊天机器人(下)
一、简介 我们之前完成了一个简易的聊天机器人,但是还留下了一些问题没有解决,比如如何开启新的会话。如何切换session_id,如何把对话做成流式的输出。这些我们就会在今天来完成。 二、关于新的会话和session_id from dotenv import load_…...
【合新通信】光纤延迟线(ODL)的原理
光纤延迟线是一种利用光学原理实现信号传输的设备,主要用于雷达、通信和测量等领域。以下是光纤延迟线的基本原理和工作方式: 技术原理 光纤延迟线通过相位控制器和分束器来处理输入信号。具体来说,数据信号和参考信号同时输入分束器&#x…...
Altium Designer——规则设置
规则 间距规则: 线宽:6mil > x > 4mil 1.在菜单栏中选择 设计 ——》 规则 根据下图双击对应的Clearance规则,更改红圈中的数字为6mil,然后点击应用再点击确定。 这个间距是元素之间(走线、铺铜、元器件&#x…...
智谛达科技:以创新为翼,翱翔AI人形机器人蓝海
在科技创新的浩瀚星空中,智谛达科技集团犹如一颗璀璨的明星,以其独特的创新光芒,照亮了AI人形机器人的广阔蓝海。这家在AI领域深耕多年的企业,始终秉持着创新为翼的发展理念,不断突破技术瓶颈,拓展应用场景,以卓越的实力和前瞻性的思维,引领着人形机器人行业的未来发展。 智谛达…...
前后端接口参数详解与 Mock 配置指南【大模型总结】
前后端接口参数详解与 Mock 配置指南 一、前端请求参数类型及 Mock 处理 1.1 URL 路径参数 (Path Parameters) 场景示例: GET /api/users/{userId}/orders/{orderId}Mock.js 处理: Mock.mock(/\/api\/users\/(\d)\/orders\/(\d)/, get, (options) &g…...
RPC与其他通信技术的区别,以及RPC的底层原理
1、什么是 RPC? 远程过程调用(RPC) 是一种协议,它允许程序在不同计算机之间进行通信,让开发者可以像调用本地函数一样发起远程请求。 通过 RPC,开发者无需关注底层网络细节,能够更专注于业务逻…...
汽车售后ODX 和 OTX 详细分析
在汽车售后诊断领域,ODX 和 OTX 都是重要的标准,但它们的应用场景和特点有所不同,难以简单地评判哪个是绝对的主流。以下是对它们的详细分析。 ODX(Open Diagnostic data eXchange) 概述:ODX 是由 ASAM 制…...
深度学习天崩开局
李沐大神的d2l包导入, 这玩意需要python311版本,我现在版本已经313了,作为一个天生要强的男人,我是坚决不向低版本低头的。 然后我就研究啊,各种翻资料啊,然后deepseek加豆包都翻烂了, 最终所…...
面试算法高频04-分治与回溯
分治与回溯 分治和回溯算法,包括其概念、特性、代码模板,并结合具体题目进行讲解,旨在帮助学员理解和掌握这两种算法的应用。 分治与回溯的概念 分治(Divide & Conquer):本质上基于递归,先…...
整数编码 - 华为OD统一考试(A卷、C++)
题目描述 实现一种整数编码方法,使得待编码的数字越小,编码后所占用的字节数越小。 编码规则如下: 编码时7位一组,每个字节的低7位用于存储待编码数字的补码。字节的最高位表示后续是否还有字节,置1表示后面还有更多的字节&…...
对访问者模式的理解
对访问者模式的理解 一、场景二、不采用访问者模式1、代码2、特点 三、采用访问者模式1、代码2、特点 四、思考 一、场景 我们有一个图形系统,系统中有多种图形对象(如圆形、方形等),每种图形对象都有不同的属性和行为。现在需要对…...
第三次PID状态机
以下是 apply_params 函数的实现步骤和代码示例: 1. 定义参数结构体 在头文件中定义 PID_Params 结构体,包含需要动态调整的 PID 参数: // ms_hal_photo_sensor.h typedef struct {float Kp; // 比例系数float Ki; // …...
如何在大型项目中有效使用TypeScript进行类型定义?
嗨,大家好,我是莫循,Typescript是JavaScript的超集,现在已经广泛用于前端开发,那么在项目中如何用好类型定义呢?以下是一些可以提供参考的案例实践。 一、类型组织策略 1. 模块化类型定义 按功能/模块划分…...
C4D XP 粒子动画云端渲染指南
在 C4D 动画制作领域,XP 粒子特效因其复杂的动力学计算常成为渲染瓶颈。传统本地渲染不仅耗时漫长,还需持续占用高配置硬件。而借助专业云渲染平台,创作者可突破物理限制,高效完成 XP 粒子动画的最终输出。 以渲染 101 平台为例&a…...
mysql知识总结 基础篇
Mysql知识总结 1. 执行一条sql语句 期间发生了什么?1. 如何查看mysql服务被多少个客户端链接了2. 空闲链接会一直闲置嘛?3. mysql的链接数量有限制嘛?4. 我们如何知道mysql要使用哪个索引5. 什么是覆盖索引 2. MySQL 一行记录是怎么存储的&am…...
基于条码数据生成校验密码的C++实现方案
前言 在医疗试剂、工业产品等需要严格追踪管理的领域,条码系统常被用于标识产品信息。本文将详细介绍4种用C实现的条码密码生成算法,这些算法可以根据条码前11位数据生成2位校验密码(第9、10位),用于数据校验或简单防…...
前端工具方法整理
文章目录 1.在数组中找到匹配项,然后创建新对象2.对象转JSON字符串3.JSON字符串转JSON对象4.有个响应式对象,然后想清空所有属性5.判断参数不为空6.格式化字符串7.解析数组内容用逗号拼接 1.在数组中找到匹配项,然后创建新对象 const modifi…...
[数据结构]图krusakl算法实现
目录 Kruskal算法 Kruskal算法 我们要在连通图中去找生成树 连通图:在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小…...
18-产品经理-跟踪进度
禅道是一个可以帮助产品经理跟踪研发进度的系统。通过禅道,产品经理可以从多个角度了解产品的研发状态。在仪表盘中,可以展示所有产品或单一产品的概况,包括需求、计划和发布数量,研发需求状态,Bug修复率和计划发布数。…...
华为机试—挑7
题目 你需要统计 1 到 n 之间与 7 有关的数字的个数。 与 7 有关的数字包括: 是 7 的倍数(如 7,14,21 等);包含数字 7(如 17,27,37,⋯ ,70,71,72,⋯等)。 示例 输入:20 输出:3 说…...
【区块链安全 | 第三十四篇】合约审计之重入漏洞
文章目录 概念漏洞代码代码审计攻击代码攻击过程总结示例修复建议审计思路 概念 以太坊的智能合约可以互相调用,也就是说,一个合约可以调用另一个合约的函数。除了外部账户,合约本身也可以持有以太币并进行转账。当合约接收到以太币时&#…...
Java虚拟机——JVM(Java Virtual Machine)解析一
1.JVM是什么? 1.1 JVM概念 Java Virtual Machine (JVM) 是JDK的核心组件之一,它使得 Java 程序能够在任何支持 JVM 的设备或操作系统上运行,而无需修改源代码 JDK是什么,JDK和JVM是什么关系?1.Java IDE(Integrated …...
【JVM】question
问题 JVM线程是用户态还是内核态 java线程在jdk1.2之前,是基于名为“绿色线程”的用户线程实现的,这导致绿色线程只能同主线程共享CPU分片,从而无法利用多核CPU的优势。 由于绿色线程和原生线程比起来在使用时有一些限制, jdk1.2…...
页面编辑器CodeMirror初始化不显示行号或文本内容
延迟刷新 本来想延迟100毫秒的,但是会出现样式向左偏移的情况,于是试了试500毫秒,发现就没有问题了,可能是样式什么是需要一个加载过程吧。 useEffect(() > {editorRef.current?.setValue(value || );setTimeout(() > {edi…...
顺序表——C语言实现
目录 一、线性表 二、顺序表 1.实现动态顺序表 SeqList.h SeqList.c Test.c 问题 经验:free 出问题,2种可能性 解决问题 (2)尾删 (3)头插,头删 (4)在 pos 位…...
OpenCV 图形API(21)逐像素操作
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV的G-API模块中,逐像素操作指的是对图像中的每个像素单独进行处理的操作。这些操作可以通过G-API的计算图(Graph …...
车载联网终端4G汽车TBOX介绍定义与概述
汽车 TBOX(Telematics Box)是专为汽车设计的远程通信终端设备,属于车联网系统的关键组成部分。车联网系统一般包含主机、汽车 T - BOX、手机 APP 及后台系统。融合了车身网络和 4G 无线通信技术,为汽车提供丰富的 Telematics 服务…...
CentOS无法安装Vim文本编辑器问题以及解决方法
1.问题一:用户权限不够 解决方法一:切换到root用户 解决方法二:给本用户添加权限 2.问题二:镜像源问题:官方镜像源可能已经失效 解决方法: 1. 检查网络连接 2. 检查和配置 DNS 3. 更换镜像源&#…...
Kettle如何与应用集成
Kettle(Pentaho Data Integration,PDI)可以通过多种方式与应用程序集成,以下是7种主流方法及具体实现示例: 一、命令行调用(最基础) # 执行转换(Transformation) ./pan.…...
Pytorch torch.nn.utils.rnn.pad_sequence 介绍
torch.nn.utils.rnn.pad_sequence 是 PyTorch 中一个用于填充序列的实用函数,它主要用于处理长度不一的序列数据,将这些序列填充到相同的长度,以便能将它们组合成一个批量(batch)输入到神经网络中。以下是详细介绍&…...
4.7正则表达式
1.字符匹配 一般字符匹配自身. 匹配任意字符(换行符\n除外),一个点占一位\转义字符,使其后一个字符改变原来的意思(\.就是.)[......]字符集,对应的位置可以是字符集中的任意字符.字符集中的字符可以逐个列出,也可以给出范围如[abc]或[a-c] [^abc] 表示取反…...
CogPatInspectTool工具
CogPatInspectTool是康耐视中的一种模板比对的视觉检测工具,主要用于产品不良检测。其核心功能是通过将输入图像与预先训练好的模板进行对比,识别出两者之间的差异,并生成高亮差异图,从而判断产品是否存在缺陷。 效果图 CogPatIn…...
牛客周赛 + 洛谷刷题
秘藏 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N 200010; ll a[N], b[N]; int n, k; ll dp[2][N];//dp[i][j]是在i界中取了j之前的最大值 int main(){ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);cin >> n >&…...
【数据结构】图论存储革新:十字链表双链设计高效解决有向图入度查询难题
十字链表 导读一、邻接表的优缺点二、十字链表2.1 结点结构2.2 原理解释2.2.1 顶点表2.2.2 边结点2.2.3 十字链表 三、存储结构四、算法评价4.1 时间复杂度4.2 空间复杂度 五、优势与劣势5.1 优势5.2 劣势5.3 特点 结语 导读 大家好,很高兴又和大家见面啦ÿ…...
【JavaScript】十五、事件对象与环境对象
文章目录 1、事件对象1.1 获取事件对象1.2 常用属性1.3 案例:回车发布评论 2、环境对象this3、回调函数4、案例:tab切换5、案例:全选文本框📖 1、事件对象 事件对象: 也是个对象,object,里面存…...
OJ--第N个泰波那契数列
1137. 第 N 个泰波那契数 - 力扣(LeetCode) 1 题干部分 2 拆解 1 状态表示:dp[i] 2 状态转移方程:dp[i]dp[i-1]dp[i-2]dp[i-3] 3 初始化:让dp[0]0,dp[1]dp[2]1 4 填表顺序:从dp[3]开始填从左往右填 5 返回值:dp[n]即为返回的…...
Python从入门到高手8.1节-元组类型详解
目录 8.1.1 理解元组类型 8.1.2 元组的类型名 8.1.3 元组的定义 8.1.4 元组的解包 8.1.5 元组是可迭代的 8.1.6 假期就这么结束了 8.1.1 理解元组类型 元组与列表有着相同的数据结构,区别在于,元组是不可变的数据类型,而列表是可变的数…...
使用 Qt 和 OBS 工具检测系统硬件编码器支持情况(NVENC、QSV、AMF)
在开发涉及视频处理的软件时,判断系统是否支持硬件加速编码器(如 NVIDIA NVENC、Intel QSV、AMD AMF)对于性能优化至关重要。本文将介绍如何结合 Qt 与 OBS Studio 附带的小工具程序,实现一个完整、异步且不会卡住 UI 的硬件加速检测模块。 一、背景与目标 硬件加速编码器…...
Python爬虫生成CSV文件的完整流程
引言 在当今数据驱动的时代,网络爬虫已成为获取互联网数据的重要工具。Python凭借其丰富的库生态系统和简洁的语法,成为了爬虫开发的首选语言。本文将详细介绍使用Python爬虫从网页抓取数据并生成CSV文件的完整流程,包括环境准备、网页请求、…...
图论:多源最短路
多源最短路 B3647 【模板】Floyd - 洛谷 #include<iostream> #include<cstring> using namespace std;const int N 110; int f[N][N]; int n, m;int main() {memset(f, 0x3f, sizeof(f));//对于重边的处理取较小值,所以要把全部都初始化成无穷大&…...
2024年已备案大模型发展趋势分析
2024年已备案大模型发展趋势分析 随着生成式人工智能技术的快速发展,其在各个领域的应用逐渐深入。为了规范和促进生成式人工智能服务的健康发展,国家互联网信息办公室发布了《生成式人工智能服务已备案信息》。本文将基于已备案信息,分析生成式人工智能服务的发展趋势,并…...
spring功能汇总
1.创建一个dao接口,实现类;service接口,实现类并且service里用new创建对象方式调用dao的方法 2.使用spring分别获取dao和service对象(IOC) 注意 2中的service里面获取dao的对象方式不用new的(DI) 运行测试: 使用1的方式创建servic…...
Transformer - Feed Forward前馈网络
一、数学原理 1. 前馈神经网络公式 2. Dropout公式 二、代码实现 import math import torchimport torch.nn as nnclass FeedForward(nn.Module):def __init__(self, d_model, dff, dropout):super().__init__()self.W1 nn.Linear(d_model, dff)self.W2 nn.Linear(dff, d_mo…...
Compose Multiplatform+Kotlin Multiplatfrom 第五弹跨平台 截图
截图功能 Compose MultiplatformKotlin Multiplatfrom下实现桌面端的截图功能,起码搞了两星期,最后终于做出来了,操作都很流畅,截取的文件大小也正常,可参考支持讨论! 功能效果 代码实现 //在jvmMain下创…...
算法题(119):高精度减法
审题: 本题高精度减法主要是要区分正负号,然后进行模拟 思路: 方法一:模拟法 首先本题需要我们利用字符串进行大数相减 第一步:区分s1和s2谁更大 先从数的位数进行判断,然后再从高到低的位数进行判断 第二步…...