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

PulsarMQ系列入门篇

文章目录

    • 介绍:
    • 部署安装讲解:
    • 安装单机版本测试(Linux下):

介绍:

PulsarMQ 现托管于apache Apache 软件基金会顶级项目,2016年由雅虎公司开源的分布式多租户消息中间件 ,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、跨区域复制、具有强一致性、高吞吐、低延迟及高可扩展性等流数据存储特性。支持 Pub/Sub 模型和消息队列模型。

官网:

https://pulsar.apache.org/

Pulsar的关键特性如下:

1.云原生架构(计算与存储分离),无缝支持跨集群复制
2.比kafka更高的吞吐量和低延迟
3.无缝支持上百万个topics
4.支持多种消息订阅模式 (exclusive & shared & failover)
5.通过持久化存储BookKeeper保障消息的传递
6.轻量级Serverless计算框架Pulsar Functions提供了流式数据处理能力。
7.提供分层存储能力,释放BookKeeper的空间:将老数据or长期不用的数据放到AWS S3等

消息ACK确定机制:
两种主要是由于pulsar单条,也可以批处理。

1.Being acknowledged individually. With individual acknowledgment, the consumer acknowledges each message and sends an acknowledgment request to the broker.
被单独承认。通过单独的确认,消费者确认每条消息,并向代理发送确认请求。
2.Being acknowledged cumulatively. With cumulative acknowledgment, the consumer only acknowledges the last message it received. All messages in the stream up to (and including) the provided message are not redelivered to that consumer.
被累计承认的。对于累积确认,消费者只确认其接收到的最后一条消息。流中直到(包括)所提供消息的所有消息都不会重新传递给该消费者。

两种方式的API确定(单条,累计)

consumer.acknowledge(msg);
consumer.acknowledgeCumulative(msg);

值的注意的是
累积确认不能在共享订阅类型中使用,因为共享订阅类型涉及有权访问同一订阅的多个使用者。在共享订阅类型中,消息是单独确认的。

部署安装讲解:

pulsar支持单节点以及集群模式都可以,支持使用docker或者k8s,以下是官网的经典图:
在这里插入图片描述

In this diagram, connecting clients need to communicate with the Pulsar cluster using a single URL. In this case, pulsar-cluster.acme.com abstracts over all of the message-handling brokers. Pulsar message brokers run on machines alongside BookKeeper bookies; brokers and bookies, in turn, rely on ZooKeeper.
在该图中,连接客户端需要使用单个URL与Pulsar集群进行通信。在这种情况下,pulser-cluster.ame.com对所有消息处理代理进行了抽象。Pulsar消息代理(broker经纪人)与BookKeeper博彩公司(bookie)一起在机器上运行;而经纪人和博彩公司则依赖ZooKeeper。

乍一看很复杂,怎么说呢,比起其他MQ确实是很复杂,且更加抽象化和组件化,一个完整的pulsar服务需要以上的支持。而zookeeper和broker,bookkeeper的联系如下:

在 Pulsar 中,ZooKeeper 的作用是存储 Pulsar 集群的元数据,例如租户、命名空间、主题等信息。Pulsar Broker 则负责处理客户端的请求,并将消息传递给相应的 BookKeeper 副本进行持久化。而 BookKeeper Bookie 则是实际进行数据存储和检索操作的组件。
具体来说,当客户端发送消息到 Pulsar Broker 时,Broker 会首先将消息写入内存缓冲区,并返回 Acknowledgment(ACK)给客户端。然后,Broker 将消息异步地提交给 BookKeeper 进行持久化。BookKeeper 接收到消息后,会将其写入磁盘,并返回 ACK 给 Broker。当 Broker 接收到来自大多数(通常是半数以上) BookKeeper 副本的 ACK 后,就会确认消息已经成功持久化,并将其从内存缓冲区中删除。
在此过程中,ZooKeeper 负责管理 Pulsar 集群的元数据,例如 Broker 和 BookKeeper 的位置信息、租户的配置信息等。Broker 和 BookKeeper 通过 ZooKeeper 进行注册和发现,并获取集群的配置信息。需要注意的是,Pulsar 支持多个 ZooKeeper 实例进行共享存储,以提高集群的可伸缩性和可用性。

当然ZooKeeper 也是可替换的,可以换成一些其他的注册中心,还有etcd,nacos等等取舍可看一下比较:

etcd、ZooKeeper 和 Nacos 都是分布式存储和协调工具,用于管理和维护分布式系统中的元数据信息,例如配置信息、服务发现、任务调度等。它们各自有一些优点和适用场景,下面进行简要对比:
1)etcd:etcd 是一个高可用的键值存储系统,支持分布式部署和数据复制,并且拥有以下特点:
简单易用:API 设计清晰明了,操作简单;
性能高效:读写性能均较优;
可靠性高:支持多数派复制机制,保证数据的可靠性和一致性;
安全性好:支持 TLS 加密传输和访问控制。
2)ZooKeeper:ZooKeeper 是一个分布式协调服务,提供共享配置管理和分布式锁等功能,具有以下特点:
一致性高:采用 ZooKeeper Atomic Broadcast(ZAB)协议,可以保证分布式系统中各个节点间的数据一致性;
功能强大:提供了多种 API 和工具,支持分布式锁、选举、任务调度等常见的分布式应用场景;
生态丰富:已经被广泛应用于 Hadoop、Kafka、Pulsar 等开源项目和商业产品中。
3)Nacos:Nacos 是一个分布式的配置中心和服务发现平台,旨在帮助企业实现微服务的构建和管理,具有以下特点:
功能全面:支持服务注册、配置管理、服务发现、流量管理等多个功能;
可扩展性好:支持集群部署和主从复制,可以提高系统的可用性和容错性;
易用性强:提供了丰富的客户端和工具,可以快速地接入和使用。
综上所述,etcd 适合对性能要求较高的应用场景;ZooKeeper 适合需要高一致性和更多功能的应用场景;而 Nacos 则适合构建和管理微服务架构。选择使用哪种工具应该根据具体需求和场景进行综合考虑,并进行权衡取舍。

安装单机版本测试(Linux下):

根据我们要使用的PulsarMQ版本选择jdk,本案例使用3.0.0,故先先安装jdk17,可参考帖子:https://blog.csdn.net/xtho62/article/details/131229216

1.下载

## 官方链接,如果直接shell中下载较慢,建议使用迅雷下载后传上去
wget https://archive.apache.org/dist/pulsar/pulsar-3.0.0/apache-pulsar-3.0.0-bin.tar.gz

2.解压安装

mkdir /usr/local/pulsar
tar -zxvf apache-pulsar-3.0.0-bin.tar.gz -C pulsar/

3.开两个窗口在pulsar安装目录下的bin目录执行生产和消费操作:
生产者

可以使用命令行客户端生产消息、消费消息,执行./pulsar-client produce my-topic --messages “hello-pulsar”,即往"my-topic"这个topic生产了一条消息,内容是"hello-pulsar"。

消费者

执行./pulsar-client consume my-topic -s “first-subscription”,即可从"my-topic"这个topic消费消息。生产者客户端和消费者客户端都会自动创建topic,如果操作的topic不存在的话

先投递消息,后消费,日志打印消费成功。

相关文章:

PulsarMQ系列入门篇

文章目录 介绍:部署安装讲解:安装单机版本测试(Linux下): 介绍: PulsarMQ 现托管于apache Apache 软件基金会顶级项目,2016年由雅虎公司开源的分布式多租户消息中间件 ,是下一代云原生分布式消息…...

编程的实践理论 第九章 交互

第九章 交互 根据状态的初始值和终止值,我们已经描述了计算。一个状态变量的声明如下: var x: T S ∃x, x′: T S 它说的是一个状态变量有两个数学变量,一个是初始值,一个是终止值。在这个 声明的作用域内,x和x…...

BSN全球技术创新发展峰会在武汉举办,“延安链”正式发布

原标题:《第二届BSN全球技术创新发展峰会在武汉成功举行》 6月9日,由湖北省人民政府指导,湖北省发展改革委、国家信息中心联合主办,中国移动、中国电信、中国联通、武汉市江汉区人民政府、区块链服务网络(BSN&#xf…...

8.4 IP地址与端口号

目录 IP地址 IP地址及编址方式 IP 地址及其表示方法 点分十进制记法举例 IP 地址采用 2 级结构 分类的 IP 地址 分类的 IP 地址 多归属主机 各类 IP 地址的指派范围 ​编辑 一般不使用的特殊的 IP 地址 ​编辑 分类的 IP 地址的优点和缺点 划分子网 无分类编址 CIDR 无…...

day56_springmvc

今日内容 零、 复习昨日 零、 复习昨日 一、JSON处理【重点】 springmvc支持json数据交互,但是自己本身没有对应jar,使用的是第三方Jackson,只需要导入对应依赖,springmvc即可使用 如果需要换用到FastJson 导入依赖配置文件中指定json转换的类型为FastJson本次课程没有替换,用的…...

SQL Server Management Studio (SSMS)下载,安装以及连接数据库配置

目录 (一)前言 (二)下载与安装 1. 下载 (1)下载地址 (2)SSMS对操作系统的要求 2. 安装 (1)存放下载好的安装包 (2) 双击进入安…...

go 错误 异常

自定义错误 Go语言中 错误使用内建的 error 类型表示, error类型是一个接口类型:定义如下: error 有一个 Error() 的方法‘所有实现该接口的类型 都可以当做一个错误的类型;Error()方法输入具体错误描述,在打印错误时…...

智慧加油站卸油作业行为分析算法 opencv

智慧加油站卸油作业行为分析系统通过opencvpython网络模型技术,智慧加油站卸油作业行为分析算法实现对卸油作业过程的实时监测。当现场出现卸油作业时人员离岗,打电话人员抽烟等违规行为,灭火器未正确摆放,明火和烟雾等异常状态&a…...

LiangGaRy-学习笔记-Day22

1、shell工具-tput 这个是tput bash工具 具体的操作如下: tput clear:清屏tput cup Y X 第Y行,第X列的位置 tput bold:字体加粗tput sgr0 : 重置命令tput setaf n n:代表数字0-7 0黑色1红色2绿色3黄色4蓝…...

数据库横表和竖表有什么区别

横表和竖表是描述数据库表结构的两种形式,它们之间的主要区别在于数据的组织方式和用途。 横表(宽表): 横表是一种常见的表结构,其特点是每一行数据包含所有相关属性,字段通常作为列出现。横表中的每行代表…...

哈希表--day1--基本理论介绍

文章目录 哈希表哈希函数哈希碰撞拉链法线性探测法 常见的三种哈希函数数组setmap 总结 哈希表 Hash table是根据关键码的值来直接进行访问的数据结构。 其实直白来讲其实数组就是一张哈希表,不过其索引是十分简单的,我们通过0来访问num[0]&#xff0c…...

基于OpenMV的疲劳驾驶检测系统的设计

一、前言 借助平台将毕业设计记录下来,方便以后查看以及与各位大佬朋友们交流学习。如有问题可以私信哦。 本文主要从两个方面介绍毕业设计:硬件,软件(算法)。以及对最后的实验结果进行分析。感兴趣的朋友们可以评论区…...

chatgpt赋能python:使用Python来寻找两个列表不同元素的方法

使用Python来寻找两个列表不同元素的方法 在编写Python程序时,我们经常需要比较两个列表的元素,找出它们之间的不同之处。在搜索引擎优化(SEO)方面,这种比较对于找出两个网站内容的差异也非常有用。在这篇文章中&…...

简单学生管理系统

简单学生管理系统(Java)_封奚泽优的博客-CSDN博客https://blog.csdn.net/weixin_64066303/article/details/130667107?spm1001.2014.3001.5501 转载请注明出处,尊重作者劳动成果。 目录 前期准备: 数据库的连接: 用户账号类:…...

图像金字塔

​ 图像金字塔是由一幅图像的多个不同分辨率的子图构成的图像集合。是通过一个图像不断的降低采样率产生的,最小的图像可能仅仅有一个像素点。下图是一个图像金子塔的示例。从图中可以看到,图像金字塔是一系列以金字塔形状排列的、自底向上分辨率逐渐降低…...

Springboot整合Camunda工作流引擎实现审批流程实例

环境&#xff1a;Spingboot2.6.14 camunda-spring-boot-starter7.18.0 环境配置 依赖配置 <camunda.version>7.18.0</camunda.version> <dependency><groupId>org.camunda.bpm.springboot</groupId><artifactId>camunda-bpm-spring-boo…...

PHP设计模式21-工厂模式的讲解及应用

文章目录 前言基础知识简单工厂模式工厂方法模式抽象工厂模式 详解工厂模式普通的实现更加优雅的实现 总结 前言 本文已收录于PHP全栈系列专栏&#xff1a;PHP快速入门与实战 学会好设计模式&#xff0c;能够对我们的技术水平得到非常大的提升。同时也会让我们的代码写的非常…...

【玩转Docker小鲸鱼叭】理解Docker的核心概念

Docker核心概念 Docker有三大核心概念&#xff1a;镜像&#xff08;Image&#xff09;、容器&#xff08;Container&#xff09;、仓库&#xff08;Repository&#xff09; 1、镜像&#xff08;Image&#xff09; Docker镜像 是我们创建和运行Docker容器的基础&#xff0c;它…...

Eureka 心跳和服务续约源码探秘——图解、源码级解析

🍊 Java学习:社区快速通道 🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想 🍊 绝对不一样的职场干货:大厂最佳实践经验指南 📆 最近更新:2023年5月25日 🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力! 文章目录 分布式系统的心跳机制心跳机制的实…...

代码随想录二刷 530 二叉搜索树的最小绝对差 98. 验证二叉搜索树 700. 二叉搜索树中的搜索

530 二叉搜索树的最小绝对差 代码如下 func getMinimumDifference(root *TreeNode) int { var pre *TreeNode res : math.MaxInt var traverse func(root * TreeNode) traverse func(root * TreeNode) { if root nil { return } traverse(root.Left) …...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

GB/T 43887-2024 核级柔性石墨板材检测

核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标&#xff1a; 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...

docker容器互联

1.docker可以通过网路访问 2.docker允许映射容器内应用的服务端口到本地宿主主机 3.互联机制实现多个容器间通过容器名来快速访问 一 、端口映射实现容器访问 1.从外部访问容器应用 我们先把之前的删掉吧&#xff08;如果不删的话&#xff0c;容器就提不起来&#xff0c;因…...

SpringSecurity+vue通用权限系统

SpringSecurityvue通用权限系统 采用主流的技术栈实现&#xff0c;Mysql数据库&#xff0c;SpringBoot2Mybatis Plus后端&#xff0c;redis缓存&#xff0c;安全框架 SpringSecurity &#xff0c;Vue3.2Element Plus实现后台管理。基于JWT技术实现前后端分离。项目开发同时采 …...