单机运行请看:
Linux MacBook单机部署Pulsar并开启认证功能
ZooKeeper 集群(3(或多) 个 ZooKeeper 节点组成)
bookie 集群(也称为 BookKeeper 集群,3(或多) 个 BookKeeper 节点组成)
broker 集群(3(或多) 个 Pulsar 节点组成)
在所需服务器上安装 JDK(要求版本不低于 JDK 8)安装请看:
Linux卸载openjdk并安装Oracle jdk
MacBook安装jdk8
下载最新版本pulsar
官方下载地址:https://pulsar.apache.org/download/
上传至服务器
解压安装包到指定目录
tar -zxvf apache-pulsar-2.8.0-bin.tar.gz -C /home/software
官方建议需要6台机器:
3台用于运行Zookeeper集群, 建议使用性能较弱的机器, Pulsar仅将Zookeeper用于与协调有关的定期任务和与配置有关的任务,而不用于基本操作.
3台用于运行bookie集群和broker集群,建议使用性能强劲的机器.
但是也可以在一台机器上同时部署Zookeeper,bookie,broker,也就是最少需要三台机器就可以部署一个Pulsar集群.
其实也还可以在3台机器上部署Zookeeper集群,另外3台机器部署bookie集群,在另外3台机器部署broker集群,也就是一共需要消耗9台机器.
总结: 部署一个Pulsar集群(包含一个Zookeeper集群(3个Zookeeper节点组成), 一个bookie集群(也称为Bookeeper集群,3个Bookeeper节点组成), 一个broker集群(3个Pulsar节点组成)), 最少需要3台机器, 官方建议6台机器, 最多需要9台机器.
192.168.1.17
192.168.1.18
192.168.1.19
#在17 18 19上分别创建目录
mkdir -pv /home/software/zookeeper/logs
#17上执行
echo 1 > /home/software/zookeeper/myid
#18上执行
echo 2 > /home/software/zookeeper/myid
#19上执行
echo 3 > /home/software/zookeeper/myid
#分别修改三台zookeeper配置
vim /home/software/apache-pulsar-2.8.0/conf/zookeeper.conf
#zookeeper数据保存目录
dataDir=/home/software/zookeeper
#日志保存目录
dataLogDir=/home/software/zookeeper/logs
#端口,默认:2181,如果被占用,请修改,我这里修改为:12181
clientPort=12181
#最后加入集群配置,server.后面的数字(编号),要和上面写入myid相对应
#端口一般配置为:2888:3888,我这里修改为了:12888:13888
server.1=192.168.1.17:12888:13888
server.2=192.168.1.18:12888:13888
server.3=192.168.1.19:12888:13888
#分别启动三台zookeeper: 执行后台运行命令
bin/pulsar-daemon start zookeeper
#停止zookeeper命令
bin/pulsar-daemon stop zookeeper
#查看启动情况
ps aux|grep pulsar
#查看端口启动情况
netstat -tpnl |grep 12181
netstat -tpnl |grep 2181
最后验证 ZooKeeper 节点是否启动成功
#执行 zookeeper 客户端连接命令
#如果是默认端口情况下,执行如果命令连接
bin/pulsar zookeeper-shell
#指定ip和端口的情况下,执行如下命令连接
bin/pulsar zookeeper-shell -server 192.168.1.17:12181
bin/pulsar zookeeper-shell -server 192.168.1.18:12181
bin/pulsar zookeeper-shell -server 192.168.1.19:12181
#查看所有zk节点数据,命令如下
ls /
#显示如下,表示zk的集群已经搭建好了
[zookeeper]
#先查看端口占用情况,避免后面启动时会报端口占用错误
netstat -tpnl |grep 8080
netstat -tpnl |grep 8443
netstat -tpnl |grep 6650
netstat -tpnl |grep 6651
# 在任一个 zooKeeper 节点,如:18,初始化集群元数据
# 进入Apache-pulsar 目录
# 执行命令初始化集群元数据
bin/pulsar initialize-cluster-metadata \
--cluster pulsar-cluster-iot \
--zookeeper 192.168.1.18:12181 \
--configuration-store 192.168.1.18:12181 \
--web-service-url http://192.168.1.17:18080,192.168.1.18:1808,192.168.1.19:1808 \
--web-service-url-tls https://192.168.1.17:8443,192.168.1.18:8443,192.168.1.19:8443 \
--broker-service-url pulsar://192.168.1.17:6650,192.168.1.18:6650,192.168.1.19:6650 \
--broker-service-url-tls pulsar+ssl://192.168.1.17:6651,192.168.1.18:6651,192.168.1.19:6651
#注意: 这个命令只设置了一个节点的元数据, 后面访问其他节点有问题, 请用上面的命令
bin/pulsar initialize-cluster-metadata \
--cluster pulsar-cluster-iot \
--zookeeper 192.168.1.18:12181 \
--configuration-store 192.168.1.18:12181 \
--web-service-url http://192.168.1.18:18080 \
--web-service-url-tls https://192.168.1.18:8443 \
--broker-service-url pulsar://192.168.1.18:6650 \
--broker-service-url-tls pulsar+ssl://192.168.1.18:6651
#连接任意一台zookeeper,比如:17
bin/pulsar zookeeper-shell -server 192.168.1.17:12181
#查询数据
ls /
#显示如下,有bookies,pulsar等信息,表示成功初始化
[admin, bookies, ledgers, managed-ledgers, namespace, pulsar, stream, zookeeper]
建议: 先停掉zookeeper, 然后直接删除三台zookeeper数据目录,然后在重新启动
重新初始化,删除zookeeper里的数据, 除了这个zookeeper不删除
这样删除启动bookie 报错,把zookeeper集群停了,删除目录数据
#删除命令
delete /bookies
delete /counters
报错:
Node not empty: /counters
#deleteall命令。它将递归删除路径下的所有节点
deleteall /counters
#分别每个节点执行
#创建bookie所需要目录
mkdir -pv /home/software/bookkeeper/tmp/journal
mkdir -pv /home/software/bookkeeper/tmp/ledger
#注意下面的配置:修改每个节点对应的ip
# 进入bookie 配置文件目录,编辑 bookkeeper.conf 文件
vim bookkeeper.conf
# advertisedAddress 修改为服务器对应的ip,在另外两台服务器也做对应的修改advertisedAddress=192.168.1.17
advertisedAddress=192.168.1.17
# 修改以下两个文件目录地址
journalDirectory=/home/software/bookkeeper/tmp/journal
ledgerDirectories=/home/software/bookkeeper/tmp/ledger
# 修改zk地址和端口信息
zkServers=192.168.1.17:12181,192.168.1.18:12181,192.168.1.19:12181
#查看8000端口是否占用, 如果占用,修改为8100
netstat -tpnl |grep 8000
#httpServerPort默认也是8000,建议修改,我这里修改为:8100
prometheusStatsHttpPort=8100
# 初始化元数据,并启动 bookie 集群
# 执行初始化元数据命令;若出现提示,输入 Y,继续(只需在任意一个bookie节点执行一次)
bin/bookkeeper shell metaformat
#初始化成功
#修改端口
vim bookkeeper.conf
prometheusStatsHttpPort=8100
#bookie关闭命令
bin/pulsar-daemon stop bookie
#启动bookie命令,以后台进程启动bookie
bin/pulsar-daemon start bookie
#查看日志,因为8000端口被占用,如果上面修改为:8100,就不会报此错误
vim logs/pulsar-bookie-rabbitmq1.log
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8000
Caused by: java.net.BindException: 地址已在使用
#按照以上步骤,启动另外两个 bookie 节点。
#验证是否启动成功
bin/bookkeeper shell bookiesanity
#出现如下显示,表示启动成功Bookie
Bookie sanity test succeeded
#修改配置文件 broker.conf
vim conf/broker.conf
# 修改集群名,和 ZooKeeper 里初始化元数据时指定的集群名(--cluster pulsar-cluster-iot)相同
clusterName=pulsar-cluster-iot
# 修改如下两个配置,指定的都是 ZooKeeper 集群地址和端口号zookeeperServers=192.168.1.17:12181,192.168.1.18:12181,192.168.1.19:12181
configurationStoreServers=192.168.1.17:12181,192.168.1.18:12181,192.168.1.19:12181
# 修改如下参数为本服务器ip地址,另外两个 broker 节点配置文件也做对应修改
advertisedAddress=192.168.1.17
#由于8080端口被占用,修改为18080
webServicePort=18080
#启动 broker 节点
# 以后台进程启动 broker
bin/pulsar-daemon start broker
#停止 broker
bin/pulsar-daemon stop broker
# 查看集群 brokers 节点情况
bin/pulsar-admin brokers list pulsar-cluster-iot
#报错:
HTTP 404 Not Found
#客户端修改,需要修改端口:18080
vim conf/client.conf
修改为18080端口
webServiceUrl=http://localhost:18080/
bin/pulsar-admin brokers list pulsar-cluster-iot
bin/pulsar-admin brokers list pulsar-cluster
bin/pulsar-admin --admin-url http://192.168.1.17:18080 brokers list pulsar-cluster-iot
#显示如下:表式集群搭建成功
"192.168.1.17:18080"
"192.168.1.18:18080"
"192.168.1.19:18080"
#查看端口启动情况
netstat -tpnl |grep 8080
netstat -tpnl |grep 18080
#报错如下,都是端口占用情况
Caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080
Caused by: java.net.BindException: 地址已在使用
#订阅
bin/pulsar-client consume \
persistent://public/default/test \
-n 100 \
-s "consumer-test" \
-t "Exclusive"
#发送
bin/pulsar-client produce \
persistent://public/default/test \
-n 1 \
-m "Hello Pulsar"
----- 收到消息 -----
Hello Pulsar
参考链接:
https://www.jianshu.com/p/715ead13ecce
https://blog.51cto.com/u_536410/2408686
https://blog.csdn.net/daydreameri/article/details/105031977
https://www.jianshu.com/p/dd328bdd2a32