pulsar集群搭建_亲测成功

pulsar集群搭建_亲测成功

单机运行请看:

Linux MacBook单机部署Pulsar并开启认证功能

集群组成

  1. 搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、BookKeeper 集群和 broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:
  • ZooKeeper 集群(3(或多) 个 ZooKeeper 节点组成)

  • bookie 集群(也称为 BookKeeper 集群,3(或多) 个 BookKeeper 节点组成)

  • broker 集群(3(或多) 个 Pulsar 节点组成)

  1. Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。

环境准备

安装JDK

在所需服务器上安装 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的集群

shell 复制代码
#在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 节点是否启动成功

shell 复制代码
#执行 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]

初始化集群元数据

shell 复制代码
#先查看端口占用情况,避免后面启动时会报端口占用错误
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集群停了,删除目录数据

shell 复制代码
#删除命令
delete /bookies

delete /counters
报错:
Node not empty: /counters

#deleteall命令。它将递归删除路径下的所有节点
deleteall /counters

配置部署 BookKeeper 集群

shell 复制代码
#分别每个节点执行

#创建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 集群

shell 复制代码
#修改配置文件 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: 地址已在使用

测试

shell 复制代码
#订阅
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

相关推荐
Hello-Brand8 天前
RocketMQ系列3:核心技术介绍
消息队列·rabbitmq·rocketmq·mq·消息中间件·削峰填谷
serene13129 天前
Modbus新手教程
物联网·mqtt·教程·modbus·工业网关·iec104·iec101
Frank学习路上12 天前
【Arduino】ESP8266获取NTP时间及连接MQTT实现远程控制示例
c++·mqtt·arduino·esp8266
GreaterBuilder17 天前
docker安装Emqx并使用自签名证书开启 SSL/TLS 连接
mqtt·ssl·emqx
带刺的坐椅20 天前
solon 集成 kafka-clients
java·kafka·solon·mq
太阳伞下的阿呆1 个月前
kafka-clients之生产者发送流程
分布式·kafka·高并发·mq
尽兴-1 个月前
Redis模拟延时队列 实现日程提醒
java·redis·java-rocketmq·mq
唐诺1 个月前
android MQTT使用示例
android·mqtt
crossoverJie1 个月前
推荐一些值得学习的开源项目和框架
starrocks·开源·pulsar
skywalk81631 个月前
esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器
单片机·物联网·mqtt·esp32·micropython