1.部署规划
部署 Pulsar 集群包括以下步骤(按顺序):
- 1.部署一个 ZooKeeper 集群,初始化 Pulsar 集群元数据。
- 2.部署一个 Bookeeper 集群。
- 3.部署一个或多个 Pulsar brokers。
- 4.部署 Pulsar manager(可选)。
2.节点规划
主机名 | IP地址 | 角色 | 端口号 |
---|---|---|---|
zookeeper1 | 192.168.1.191 | zookeeper | 2181 |
zookeeper2 | 192.168.1.192 | zookeeper | 2181 |
zookeeper3 | 192.168.1.193 | zookeeper | 2181 |
bookeeper1 | 192.168.1.194 | bookeeper | 3181 |
bookeeper2 | 192.168.1.195 | bookeeper | 3181 |
bookeeper3 | 192.168.1.196 | bookeeper | 3181 |
pulsar1 | 192.168.1.147 | broker | 8080(http协议),6650(pulsar协议) |
pulsar2 | 192.168.1.148 | broker | 8080(http协议),6650(pulsar协议) |
pulsar3 | 192.168.1.149 | broker | 8080(http协议),6650(pulsar协议) |
pulsar1 | 192.168.1.149 | pulsar-manager | 7750 |
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
解压后的文件目录包含以下子目录:
目录 | 内容 |
---|---|
bin | Pulsar 命令行工具,比如 pulsar 和 pulsar-admin |
conf | 配置文件,包含ZooKeeper,Bookeeper,Pulsar 等等 |
data | Zookeeper 和 Bookeeper 保存数据的目录 |
lib | Pulsar 使用的 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
参数说明如下:
参数 | 说明 |
---|---|
—cluster | pulsar 集群名字 |
–zookeeper | zookeeper 地址,只需要包含 zookeeer 集群中的任意一台机器即可 |
–configuration-store | 配置存储地址,只需要包含 zookeeer 集群中的任意一台机器即可 |
–web-service-url | pulsar 集群 web 服务的 URL 以及端口,默认的端口是8080 |
–broker-service-url | broker 服务的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