单机运行请看:
Linux MacBook单机部署Pulsar并开启认证功能
集群组成- 搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、BookKeeper 集群和 broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:
-
ZooKeeper 集群(3(或多) 个 ZooKeeper 节点组成)
-
bookie 集群(也称为 BookKeeper 集群,3(或多) 个 BookKeeper 节点组成)
-
broker 集群(3(或多) 个 Pulsar 节点组成)
- Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。
在所需服务器上安装 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台机器.
3台机器集群为例192.168.1.17
192.168.1.18
192.168.1.19
先搭建zookeeper的集群#在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配置部署 BookKeeper 集群
#分别每个节点执行 #创建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 集群
#修改配置文件 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



