文章目录
Apache Pulsar集群部署手册
1 集群组成
-
搭建
Pulsar
集群至少需要 3 个组件:ZooKeeper
集群、BookKeeper
集群和broker
集群(Broker
是Pulsar
的自身实例)。这三个集群组件如下:ZooKeeper
集群(多 个ZooKeeper
节点组成)bookie
集群(也称为BookKeeper
集群,多个BookKeeper
节点组成)broker
集群(多 个Pulsar
节点组成)
-
Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。
2 准备工作
- 在所需服务器上安装JDK(要求版本不低于 JDK 8),安装略过
- 将pulsar安装包上传至所需服务器,目前安装包可以在https://pulsar.apache.org/en/download/中下载
- 解压安装包,以/home/kafka路径为例,$
tar -zxvf apache-pulsar-2.6.1-bin.tar.gz -C /home/kafka/
-
安装建议
官方建议需要6台机器:
- 3 台用于运行
ZooKeeper
集群,建议使用性能较弱的机器,Pulsar
仅将ZooKeeper
用于与协调有关的定期任务和与配置有关的任务,而不用于基本操作。 - 3 用于运行
bookie
集群和broker
集群,建议使用性能强劲的机器。
但是也可以在一台机器上同时部署
ZooKeeper
,bookie
,broker
,也就是最少需要三台机器就可以部署一个Pulsar 集群。其实也还可以在3台机器上部署
ZooKeeper
集群,另外3台机器部署bookie
集群,另3台机器部署broker
集群,也就是共需要消耗9台机器。总结,部署一个Pulsar 集群(包含一个ZooKeeper 集群(3 个 ZooKeeper 节点组成),一个bookie 集群(也称为 BookKeeper 集群,3 个 BookKeeper 节点组成),一个broker 集群(3 个 Pulsar 节点组成)),最少需要3台机器,官方建议6台机器,最多需要9台机器。
下文将以3台机器为例介绍部署方法,三台机器IP地址分别为:
- IP1
- IP2
- IP3
- 3 台用于运行
3 部署流程
3.1 zookeeper安装
Pulsar安装包内包含了zookeeper,也可以自建zookeeper,自建zookeeper的方式略。安装Pulsar安装包内的zookeeper方法如下:
-
通过
cd /home/kafka/apache-pulsar-2.6.1-bin
进入到Pulsar根目录 -
通过
vim ./conf/zookeeper.conf
修改配置文件(三个节点上都需执行此操作),新增或修改如下关键配置项:#dataDir是修改,其他都是新增 dataDir=/home/kafka/data/zookeeper/data dataLogDir=/home/kafka/data/zookeeper/log server.1=IP1:2888:3888 server.2=IP2:2888:3888 server.3=IP3:2888:3888
参数说明:
dataDir:当前zookeeper节点的数据存放目录
dataLogDir:当前zookeeper节点的日志存放目录
server.1~3:为zookeeper集群的各节点指定编号
-
在每个zookeeper节点的机器上,新建如下文件目录:
-
data:ZooKeeper使用的数据存储目录
mkdir -pv /home/kafka/data/zookeeper/data
-
log:ZooKeeper使用的日志存储目录
mkdir -pv /home/kafka/data/zookeeper/log
-
-
为每个zookeeper节点新建myid,分别在指定的sever上写入配置文件中指定的编号:
-
在server.1服务器上执行bash命令:
echo 1 > /home/kafka/data/zookeeper/data/myid
-
在server.2服务器上执行bash命令:
echo 2 > /home/kafka/data/zookeeper/data/myid
-
在server.3服务器上执行bash命令:
echo 3 > /home/kafka/data/zookeeper/data/myid
-
执行后台运行命令,这个命令是启动zookeeper:
bin/pulsar-daemon start zookeeper
-
执行zookeeper客户端连接命令:
bin/pulsar zookeeper-shell
客户端正常连接,就算zookeeper启动好了
-
在另外两台服务器上也执行
bin/pulsar-daemon start zookeeper
之后,在其中一个zookeeper节点的机器上,初始化集群元数据(总共只需执行一次):例如在IP1上:
bin/pulsar initialize-cluster-metadata \ --cluster pulsar-cluster-zk \ --zookeeper IP1:2181 \ --configuration-store IP1:2181 \ --web-service-url http://IP1:8080,IP2:8080,IP3:8080 \ --web-service-url-tls https://IP1:8443,IP2:8443,IP3:8443 \ --broker-service-url pulsar://IP1:6650,IP2:6650,IP3:6650 \ --broker-service-url-tls pulsar+ssl://IP1:6651,IP2:6651,IP3:6651
集群元数据说明
- cluster
集群名称 - zookeeper
ZooKeeper集群连接参数,仅需要包含ZooKeeper集群中的一个节点即可 - configuration-store
Pulsar实例的配置存储集群(ZooKeeper),多集群部署时才会发挥作用,需要另外部署ZooKeeper集群,但是单集群部署时可以和–zookeeper参数设置一样,只需要包含ZooKeeper集群中的一个节点即可 - web-service-url
集群Web服务的URL+端口,URL是一个标准的DNS名称,默认端口8080,不建议修改。 - web-service-url-tls
集群Web提供TLS服务的URL+端口,端口默认8443,不建议修改。 - broker-service-url
集群brokers服务URL,URL中DNS的名称和Web服务保持一致,URL使用pulsar替代http/http,端口默认6650,不建议修改。 - broker-service-url-tls
集群brokers提供TLS服务的URL,默认端口6551,不建议修改。
ps:如果没有DNS服务器,也可以使用多主机(multi-host)格式的service-url设置web-service-url,web-service-url-tls,broker-service-url,broker-service-url-tls
- cluster
-
bin/pulsar zookeeper-shell
进入zk控制台,通过ls /查看所有zk节点。能看到bookies,ledgers等节点,则说明初始化成功了。如果需要关闭zookeeper,可使用命令
bin/pulsar-daemon stop zookeeper
3.2 bookkeeper部署
-
在每个部署bookkeeper的机器上,通过vim conf/bookkeeper.conf来编辑bookkeeper配置文件,修改如下关键配置项:
advertisedAddress=IP1 zkServers=IP1:2181,IP2:2181,IP3:2181 journalDirectories=/home/kafka/data/bookkeeper/journal ledgerDirectories=/home/kafka/data/bookkeeper/ledgers prometheusStatsHttpPort=8100
注意:
- prometheusStatsHttpPort默认是8000,但实际上在bookkeeper.conf中,httpServerPort默认也是8000,会导致端口被占用。
- 上面的
advertisedAddress
需要设置为对应机器的ip,而不是全设置为同一个
参数说明:
advertisedAddress:指定当前节点的主机名或IP地址
zkServers:指定zookeeper集群,用来将bookkeeper节点的元数据存放在zookeeper集群
journalDirectories:当前bookkeeper节点的journal数据存放目录。
如果需要提高磁盘写入性能,可以指定多个目录用来存放journal数据,关键是每一个目录必须在不同的磁盘,不然反而会影响写入性能ledgerDirectories:当前bookkeeper节点的ledger存放目录
-
在每个部署bookkeeper的机器上,创建bookie所需要目录:
mkdir -pv /home/kafka/data/bookkeeper/
mkdir -pv /home/kafka/data/bookkeeper/journal
mkdir -pv /home/kafka/data/bookkeeper/ledgers
-
执行初始化元数据命令,若出现提示,输入Y继续(该步骤只需在一个bookie节点执行一次,总共只需执行一次):
bin/bookkeeper shell metaformat
-
在三台机器上,分别输入以下命令来以后台进程启动bookie:
bin/pulsar-daemon start bookie
-
验证是否启动成功:
bin/bookkeeper shell bookiesanity
出现
Bookie sanity test succeeded
则代表启动成功。如果需要关闭bookkeeper,可使用命令
bin/pulsar-daemon stop bookie
3.3 Broker集群部署
-
在每个部署Broker的机器上,通过
vim conf/broker.conf
来编辑Broker配置文件,修改如下关键配置项:zookeeperServers=IP1:2181,IP2:2181,IP3:2181 configurationStoreServers=IP1:2181,IP2:2181,IP3:2181 advertisedAddress=IP1 #clusterName与前面zookeeper初始化的cluster一致 clusterName=pulsar-cluster-zk
注意:
上面的advertisedAddress需要设置为对应机器的ip,而不是全设置为同一个
参数说明:
zookeeperServers:指定zookeeper集群,用来将broker节点的元数据存放在zookeeper集群
configurationStoreServers:多集群部署时管理多个pulsar集群元数据的zookeeper集群地址,单集群部署时可以和zookeeperServers设置一样
advertisedAddress:指定当前节点的主机名或IP地址
clusterName:指定pulsar集群名称
-
在每个部署Broker的机器上,以后台进程启动broker
bin/pulsar-daemon start broker
如果需要关闭broker,可使用命令
bin/pulsar-daemon stop broker
-
查看集群 brokers 节点情况
bin/pulsar-admin brokers list pulsar-cluster
我们的示例部署正常的话,这一步会显示如下结果;
IP1:8080 IP2:8080 IP3:8080
代表此时集群内有存活的节点: IP1、IP2、IP3,端口号都是8080。到这一步,Pulsar的部署就完成了。
如果报错
可以查看broker log看看什么情况cat logs/pulsar-broker-dev53207.log
发现是因为8080端口被占用了
通过命令 lsof -i:8080
,发现8080确实被占用
此时有两个解决方案:
- 把占用端口的进程kill掉,前提是该进程不重要
- 命令
vi conf/broker.conf
修改broker 的webServicePort为8070
重新bin/pulsar-admin brokers list pulsar-cluster
,成功
Conf文件说明
文件名 | 说明 |
---|---|
bookkeeper.conf | BookKeeper是一个复制的日志存储系统,Pulsar使用它来持久化存储所有消息。 |
broker.conf | Pulsar broker负责处理来自生产者的传入消息,将消息分发给使用者,在集群之间复制数据等等。 |
client.conf | pulsar-client CLI工具可用于将消息发布到Pulsar并消费来自Pulsar主题的消息。可以使用此工具代替客户端库。 |
discovery.conf | Service discovery配置文件,连接到Pulsar Broker的客户端需要能够使用单个URL与整个Pulsar实例进行通信。Pulsar提供了一个内置的服务发现机制 |
zookeeper.conf | 为Local ZooKeeper处理配置,ZooKeeper为Pulsar处理各种与配置和协调相关的基本任务。 |
global_zookeeper.conf | 为configuration store处理配置。多集群Pulsar实例时需要单独配置,单集群Pulsar实例不需要 |
proxy.conf | Pulsar 代理配置文件 |
schema_example.conf | |
standalone.conf | 单机版配置文件 |
websocket.conf | websocket配置文件 |