跳到主要内容

pulsar

nomad部署

规划端口:

bookie两个端口
8000
3181
zookeeper端口
8100
2181
9990
eth0IP:38888

broker端口
6650
8080

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

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

-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。

image-20240329195550437

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:

image-20240329195920351

点击 New Environment 添加 Pulsar 集群:

image-20240329195940599

添加完成后可以查看并设置 Pulsar 集群的相关信息,例如查看 topic 信息:

访问 http://192.168.1.147:7750/bkvm 查看 bookie 信息,用户名:admin,密码:admin。

image-20240329200005585

查看 ledger 信息:

image-20240329200027722

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 有两个生产者在生产消息,有一个消费者正在消费消息:

image-20240329200118810

查看 topic 的 存储状况:

image-20240329200141713