Apache Pulsar部署搭建

news2025/1/11 11:10:57

1.部署规划

部署 Pulsar 集群包括以下步骤(按顺序):

  • 1.部署一个 ZooKeeper 集群,初始化 Pulsar 集群元数据。
  • 2.部署一个 Bookeeper 集群。
  • 3.部署一个或多个 Pulsar brokers。
  • 4.部署 Pulsar manager(可选)。

2.节点规划

主机名IP地址角色端口号
zookeeper1192.168.1.191zookeeper2181
zookeeper2192.168.1.192zookeeper2181
zookeeper3192.168.1.193zookeeper2181
bookeeper1192.168.1.194bookeeper3181
bookeeper2192.168.1.195bookeeper3181
bookeeper3192.168.1.196bookeeper3181
pulsar1192.168.1.147broker8080(http协议),6650(pulsar协议)
pulsar2192.168.1.148broker8080(http协议),6650(pulsar协议)
pulsar3192.168.1.149broker8080(http协议),6650(pulsar协议)
pulsar1192.168.1.149pulsar-manager7750

3.下载二进制包

下载 pulsar 发行版的二进制的包,里面包含了 zookeeper,bookeeper,pulsar 所需要的文件:

wget https://archive.apache.org/dist/pulsar/pulsar-2.7.1/apache-pulsar-2.7.1-bin.tar.gz

包下载完成后,解压并进入到解压后的目录:

tar xvzf apache-pulsar-2.7.1-bin.tar.gz
cd apache-pulsar-2.7.1

解压后的文件目录包含以下子目录:

目录内容
binPulsar 命令行工具,比如 pulsar 和 pulsar-admin
conf配置文件,包含ZooKeeper,Bookeeper,Pulsar 等等
dataZookeeper 和 Bookeeper 保存数据的目录
libPulsar 使用的 JAR 文件
logs日志目录

4.部署 Zookeeper 集群

修改 Zookeeper 配置文件
修改所有 Zookeeper 节点的 conf/zookeeper.conf 配置文件:

# 设置Zookeeper数据存放目录。
dataDir=data/zookeeper

# 在配置文件中为每个节点添加一个 server.N行,其中N是ZooKeeper节点的编号。
server.1=192.168.1.191:2888:3888
server.2=192.168.1.192:2888:3888
server.3=192.168.1.193:2888:3888

在每个 Zookeeper 节点的 myid 文件中配置该节点在集群中的唯一ID。myid 文件应放在 dataDir 指定的目录下:

# 创建目录
mkdir -p data/zookeeper
# 每个Zookeeper节点的ID号不能重复,并且和server.N的编号对应,依次为1,2,3
echo 1 > data/zookeeper/myid

启动 Zookeeper 集群
在每台 Zookeeper 节点启动 Zookeeper 服务:

bin/pulsar-daemon start zookeeper

初始化集群元数据
Zookeeper 集群启动成功后,需要将一些 Pulsar 集群的元信息写入 ZooKeeper 集群的每个节点,由于数据在 ZooKeeper 集群内部会互相同步,因此只需要将元信息写入 ZooKeeper 的一个节点即可:

bin/pulsar initialize-cluster-metadata \
  --cluster pulsar-cluster-1 \
  --zookeeper 192.168.1.191:2181 \
  --configuration-store 192.168.1.191:2181 \
  --web-service-url http://192.168.1.147:8080,192.168.1.148:8080,192.168.1.149:8080 \
  --broker-service-url pulsar://192.168.1.147:6650,192.168.1.148:6650,192.168.1.149:6650

参数说明如下:

参数说明
—clusterpulsar 集群名字
–zookeeperzookeeper 地址,只需要包含 zookeeer 集群中的任意一台机器即可
–configuration-store配置存储地址,只需要包含 zookeeer 集群中的任意一台机器即可
–web-service-urlpulsar 集群 web 服务的 URL 以及端口,默认的端口是8080
–broker-service-urlbroker 服务的URL,用于与 pulsar 集群中的 brokers 进行交互,默认端口是 6650

5.部署 Bookeeper 集群

Pulsar 集群中所有持久数据的存储都由 Bookeeper 负责。

修改 Bookeeper 配置文件
修改所有 Bookeeper 节点的 conf/bookeeper.conf 配置文件,设置 Bookeeper 集群连接的 Zookeeper 信息:

zkServers=192.168.1.191:2181,192.168.1.192:2181,192.168.1.193:2181

启动 Bookeeper 集群
在每台 Bookeeper 节点启动 Bookeeper 服务:

bin/pulsar-daemon start bookie

验证 Bookeeper 集群状态
在任意一台 Bookeeper 节点上使用 Bookeeper shell 的 simpletest 命令,去校验集群内所有的 bookie 是否都已经启动,3 为 Bookeeper 节点数量。

bin/bookkeeper shell simpletest --ensemble 3 --writeQuorum 3 --ackQuorum 3 --numEntries 3

参数含义如下:

-a,--ackQuorum <arg>     Ack quorum size (default 2)  当指定数量的 bookie ack 响应时,认为消息写入成功
-e,--ensemble <arg>      Ensemble size (default 3)  写入数据的 bookie 节点数量
-n,--numEntries <arg>    Entries to write (default 1000) 一批消息的消息数量
-w,--writeQuorum <arg>   Write quorum size (default 2) 每条消息副本数量

这个命令会在集群上创建和 bookie 同等数量的 ledger,并往里面写一些条目,然后读取它,最后删除这个 ledger。
在这里插入图片描述

6.部署 Pulsar 集群

修改 Pulsar 配置文件
修改所有 Pulsar 节点的 conf/broker.conf 配置文件:

# 配置pulsar broker连接的zookeeper集群地址
zookeeperServers=192.168.1.191:2181,192.168.1.192:2181,192.168.1.193:2181
configurationStoreServers=192.168.1.191:2181,192.168.1.192:2181,192.168.1.193:2181

# broker数据端口
brokerServicePort=6650

# broker web服务端口
webServicePort=8080

# pulsar 集群名字,和前面zookeeper初始化集群元数据时配置的一样
clusterName=pulsar-cluster-1

# 创建一个ledger时使用的bookie数量
managedLedgerDefaultEnsembleSize=2

# 每个消息的副本数量
managedLedgerDefaultWriteQuorum=2

# 完成写操作前等待副本ack的数量
managedLedgerDefaultAckQuorum=2

启动 Pulsar 集群
在每台 Pulsar 节点启动 broker:

bin/pulsar-daemon start broker

7.客户端连接 Pulsar 集群

修改客户端配置文件
修改 conf/client.conf 文件。

# pulsar集群web服务url
webServiceUrl=http://192.168.1.147:8080,192.168.1.148:8080,192.168.1.149:8080

# pulsar服务端口
# URL for Pulsar Binary Protocol (for produce and consume operations)
brokerServiceUrl=pulsar://192.168.1.147:6650,192.168.1.148:6650,192.168.1.149:6650

客户端生产和消费消息
consumer 使用如下命令订阅 pulsar-test 这个主题的消息:

  • -n:订阅消息的数量
  • -s:订阅组名
  • -t:订阅类型,有以下值Exclusive, Shared, Failover, Key_Share
bin/pulsar-client consume \
  persistent://public/default/pulsar-test \
  -n 100 \
  -s "consumer-test" \
  -t "Exclusive"

如果不指定 --url 参数并且没有在 conf/client.conf 文件中指定 pulsar 集群连接信息,则默认连接的是 pulsar://localhost:6650/。可以指定 --url pulsar://192.168.1.147:6650 或者 --url http://192.168.1.147:8080 与 broker 进行交互。

新开一个终端, producer 使用如下命令向 pulsar-test 主题生产一条消息,消息内容为 “Hello Pulsar”:

  • -n:生产消息的数量
  • -m:消息内容
bin/pulsar-client produce \
  persistent://public/default/pulsar-test \
  -n 1 \
  -m "Hello Pulsar"

在 consumer 终端可以看到成功消费到了消息:

23:20:47.418 [pulsar-client-io-1-1] INFO  com.scurrilous.circe.checksum.Crc32cIntChecksum - SSE4.2 CRC32C provider initialized
----- got message -----
key:[null], properties:[], content:Hello Pulsar

8.部署 Pulsar manager

Pulsar manager 是用于管理和监控 Pulsar 集群的 WebUI 工具。Pulsar manager 可以管理多个 Pulsar 集群。github 地址:https://github.com/apache/pulsar-manager

安装 Pulsar manager

wget https://dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz
tar -zxvf apache-pulsar-manager-0.2.0-bin.tar.gz
cd pulsar-manager
tar -xvf pulsar-manager.tar
cd pulsar-manager
cp -r ../dist ui
./bin/pulsar-manager

创建 Pulsar manager 账号
创建用户名为 admin,密码为 apachepulsar 的超级管理员账号:

CSRF_TOKEN=$(curl http://192.168.1.147:7750/pulsar-manager/csrf-token)
curl \
    -H "X-XSRF-TOKEN: $CSRF_TOKEN" \
    -H "Cookie: XSRF-TOKEN=$CSRF_TOKEN;" \
    -H 'Content-Type: application/json' \
    -X PUT http://192.168.1.147:7750/pulsar-manager/users/superuser \
    -d '{"name": "admin", "password": "apachepulsar", "description": "myuser", "email": "chengzw258@163.com"}'

Pulsar manager 界面
访问 http://192.168.1.147:7750/ui/index.html 登录 Pulsar manager:
在这里插入图片描述
点击 New Environment 添加 Pulsar 集群:
在这里插入图片描述
添加完成后可以查看并设置 Pulsar 集群的相关信息,例如查看 topic 信息:
在这里插入图片描述
访问 http://192.168.1.147:7750/bkvm 查看 bookie 信息,用户名:admin,密码:admin。
在这里插入图片描述
查看 ledger 信息:
在这里插入图片描述

9.Perf 压力测试

pulsar 提供了压力测试的命令行工具,使用以下命令生产消息:

  • -r:每秒生产的消息总数(所有生产者)
  • -n:生产者数量
  • -s:每条消息的大小(bytes)
  • 最后跟上 topic 名字
bin/pulsar-perf produce -r 100 -n 2 -s 1024 test-perf

# 输出内容,从左到右依次是:
# 每秒生产的消息数量:87.2条
# 每秒流量大小:0.7Mb
# 每秒生产失败的消息数:0
# 平均延迟:5.478ms
# 延迟中位数:4.462ms
# 95%的延迟在 11.262ms以内
# 99%的延迟在 25.802ms以内
# 99.9%的延迟在 43.757ms以内
# 99.99%的延迟在 51.956ms以内
# 最大延迟:51.956ms

... Throughput produced:   87.2  msg/s ---      0.7 Mbit/s --- failure      0.0 msg/s --- Latency: mean:   5.478 ms - med:   4.642 - 95pct:  11.263 - 99pct:  25.802 - 99.9pct:  43.757 - 99.99pct:  51.956 - Max:  51.956

使用以下命令消费消息:

bin/pulsar-perf consume test-perf


# 输出内容,从左到右依次是:
# 每秒消费的消息数量:100.007条
# 每秒流量大小:0.781Mb
# 平均延迟:9.273ms
# 延迟中位数:9ms
# 95%的延迟在 14ms以内
# 99%的延迟在 15ms以内
# 99.9%的延迟在 28ms以内
# 99.99%的延迟在 34ms以内
# 最大延迟:34ms
... Throughput received: 100.007  msg/s -- 0.781 Mbit/s --- Latency: mean: 9.273 ms - med: 9 - 95pct: 14 - 99pct: 15 - 99.9pct: 28 - 99.99pct: 34 - Max: 34

在 Pulsar manager 界面可以 test-perf 这个 topic 有两个生产者在生产消息,有一个消费者正在消费消息:
在这里插入图片描述
查看 topic 的 存储状况:
在这里插入图片描述

10.参考链接

  • https://livebook.manning.com/book/pulsar-in-action/chapter-1/v-8/1
  • https://pulsar.apache.org/en/
  • https://www.jianshu.com/p/4664de047c71
  • https://mp.weixin.qq.com/s?__biz=MzUyMjkzMjA1Ng==&mid=2247487414&idx=1&sn=850ec2ccc4d2847066a98a899bd0ce1f&chksm=f9c51581ceb29c973a87c2548c45755225198ecfa2b235abec61623adfcc70c3d381be8cf501&scene=21#wechat_redirect
  • https://alexstocks.github.io/html/pulsar.html
  • https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】函数重载 - 给代码增添多彩的魔法

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、函数重载概述 3、函数重载注意事项 4、总结 1、缘起 函数重载&#xff0c;是编程世界中的一抹迷人色彩&#xff0c…

IMX6ULL平台I2C数据结构分析

IMX6ULL平台I2C数据结构分析 文章目录 IMX6ULL平台I2C数据结构分析i2c_clienti2c_adapterimx_i2c_structimx_i2c_hwdataimx_i2c_dma 在 i.MX 平台的 I2C 驱动中&#xff0c;存在多个相关的结构体&#xff0c;它们之间的联系和在内核中的作用如下&#xff1a; struct i2c_client…

CentOS 7 上安装 Anaconda

一、在 CentOS 7 上安装 Anaconda 的步骤如下&#xff1a; 在官网下载 Anaconda 的最新版本&#xff0c;链接&#xff1a;https://www.anaconda.com/products/distribution 打开终端&#xff0c;进入下载目录&#xff0c;使用以下命令来安装 Anaconda&#xff1a;# 也可直接在…

【JavaScript】线程和进程,JavaScript线程,事件队列,事件循环 ,微任务、宏任务

❤️ Author&#xff1a; 老九 ☕️ 个人博客&#xff1a;老九的CSDN博客 &#x1f64f; 个人名言&#xff1a;不可控之事 乐观面对 &#x1f60d; 系列专栏&#xff1a; 文章目录 进程和线程JavaScript线程事件队列、事件循环微任务、宏任务面试题1面试题2 进程和线程 进程&a…

有符号定点小数的31bit问题

背景 定点小数就是小数位恒定的小数&#xff0c;在信号处理等领域应用广泛&#xff0c;它的表示格式类似于S1.7&#xff08;有符号&#xff0c;整数部分1bit&#xff0c;小数部分7bit&#xff09;、U0.8&#xff08;无符号&#xff0c;没有整数部分&#xff0c;小数部分8bit&a…

基于java的班级综合测评管理系统的设计与实现

背景 本系统的主要目的在于加速信息化进程&#xff0c;充分利用计算机技术和现代通讯的手段面向学校的服务。建立信息交流平台&#xff0c;方便信息资源的共享&#xff0c;加强各个部门之间的交流。提高整体的办公效率&#xff0c;为管理员以及教师提供辅助的班级综合测评管理…

Java如何远程调试线上项目

远程调试java项目 [Remote Debug JVM] 一、前提二、配置IntelliJ IDEA2.1、打开 IntelliJ IDEA 并打开您的 Java 项目2.2、单击 "Run" 菜单&#xff0c;然后选择 "Edit Configurations..."2.3、在 "Run/Debug Configurations" 对话框中&#xff…

c++ ffmpeg 开发之配置文件(1)

第一 目录结构 D:\work\c\ffmpeg //项目根目录 D:\work\c\ffmpeg\depend //ffmpeg ffmpeg c开发包点击下载 D:\work\c\ffmpeg\include D:\work\c\ffmpeg\depend\lib D:\work\c\ffmpeg\source //源码根目录 第二&#xff1a;测试源码&#xff0c;名字自己随意起…

AntDB数据库参加开源数据库技术沙龙,分享全栈业务能力

5月12日&#xff0c;由PostgreSQL中文社区和PolarDB开源数据库举办的开源数据库技术沙龙温州站于温州大学举办。此次活动邀请了众多数据库领域的专家和技术大咖&#xff0c;旨在促进数据库与温州产业界和学术界的交融发展与合作&#xff0c;共同探讨数据库产业未来的发展趋势&a…

Java高并发核心编程—CAS与JUC原子类

注&#xff1a;本笔记是阅读《Java高并发核心编程卷2》整理的笔记&#xff01; CAS原理 JUC原子类一Atomic 基本原子类 数组原子类 引用原子类 字段更新原子类 AtomicInteger 线程安全原理 引用类型原子类 属性更新原子类 ABA问题 提升高并发场景下CAS提作的性能 以空间换时间:…

idea 调试远程docker中的spring boot 项目

开发环境 idea-2023&#xff08;放心&#xff0c;旧版本也可以远程调试&#xff09; Java版本&#xff1a;17 生产环境 docker版本&#xff1a;23.0.3 Java版本1&#xff1a;openjdk:17.0.2&#xff08;基于Java17的项目&#xff09; Java版本2&#xff1a;adoptopenjdk:…

开源网安亮相粤港澳大湾区CIO高峰论坛,保障企业数字化安全转型

近日&#xff0c;由深圳市工业化与信息化局、深圳市科学技术协会指导&#xff0c;深圳市CIO协会主办的“2023中国(深圳)数字化转型大会暨粤港澳大湾区CIO高峰论坛”圆满完成。开源网安作为拥有软件安全领域全链条产品的厂商&#xff0c;携多年来打造的国产化软件安全替代方案&a…

EMC模式如何助力新能源服务商攻坚克难

01. 什么是合同能源管理&#xff1f; 合同能源管理(EMC-Energy Management Contract)是一种新型的市场化节能机制,其实质就是以减少的能源费用来支付节能项目全部成本的节能投资方式。&#xff1a;节能服务公司与用能单位以契约形式约定节能项目的节能目标&#xff0c;节能服务…

【Python脚本】视频稳像(Video Stabilization)

#【Python脚本】视频稳像(Video Stabilization) 参考&#xff1a;博客1 参考&#xff1a; 原文&#xff1a;https://blog.csdn.net/hjl240/article/details/52683738 开源&#xff1a;关键词 Video Stabilization 不错&#xff1a; https://github.com/yaochih/awesome-vide…

秒杀系统常见问题—如何避免库存超卖?

大家好&#xff01;我是sum墨&#xff0c;一个一线的底层码农&#xff0c;平时喜欢研究和思考一些技术相关的问题并整理成文&#xff0c;限于本人水平&#xff0c;如果文章和代码有表述不当之处&#xff0c;还请不吝赐教。 以下是正文&#xff01; 先看问题 首先上一串代码 …

Linux SUID提权脏牛提权

SUID提权 suid就是set user id 。设置了SUID后&#xff0c;文件启动的时候就会以root的权限去运行。就是一个普通用户运行的时候&#xff0c;因为有SUID&#xff0c;所以用root权限去运行它。 加SUID权限chmod ux 这里开始复现。 上传Linux提权信息检测脚本LinEnum find …

堆及其实现

目录 一&#xff1a;堆的概念及结构 1.概念 2.堆的性质 二&#xff1a;堆的实现 1.堆的构建 2.堆的销毁 3.数据的交换 4.堆的插入 5.堆的判空 6.堆的删除 7.取堆顶的数据 8.堆的数据个数 9.示例 三&#xff1a;完整的代码 一&#xff…

十、数据仓库详细介绍(数据质量)理论与经验

数据质量管理是对数据从计划、收集、记录、存储、回收、分析和展示生命周期的每个阶段里可能引发的数据质量问题&#xff0c;进行识别、度量、监控、预警等一系列管理活动&#xff0c;并通过改善和提高组织的管理水平使得数据质量获得进一步提高。数据质量管理的终极目标是通过…

会声会影2023最新完整版免费下载

会声会影2023操作简单&#xff0c;功能同样强大&#xff01;会声会影附带上百种特效、滤镜、转场、模板。同时各类专业级视频工具&#xff0c;如调色、遮罩、绿幕抠像、运动追踪、分屏创建器&#xff0c;满足更高标准的视频需求。这款软件上手操作简单易学&#xff0c;就算你在…

Linux之进程管理类命令

进程管理类命令 ps&#xff1a;查看当前系统进程状态 1&#xff09;基本语法 语法说明ps aux查看系统中所有进程ps -ef可以查看父子进程之间的关系 2&#xff09;选项说明 选项说明a列出带有终端的所有用户的进程x列出当前用户的所有进程&#xff0c;包括没有终端的进程u面…