最好的学习一个组件的方法就是先用起来,遇见问题再去查找资料。但是往往就卡在了装软件、配置组件这一步。本文主要记录自己在装分布式pulsar时遇到的问题,希望能对读者有所帮助。

1 先验知识

Apache Pulsar安装有两种模式:

  • 本地local模式:最简单的安装方式, 此种方式仅适用于测试学习使用, 并无法作为开发中使用。Pulsar可用于64位macOS、Linux和Windows。使用Pulsar需要安装64位JRE/JDK 8或更高版本
  • 分布式集群模式:实际生产中用到的模式。

本文主要介绍分布式集群模式安装。搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群BookKeeper 集群broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:

  • ZooKeeper 集群(3 个 ZooKeeper 节点组成)
  • bookie 集群(也称为 BookKeeper 集群,3 个BookKeeper 节点组成)
  • broker 集群(3 个 Pulsar 节点组成)

安装方式有:

  • 6台机器:3台用于zookeeper,3台用于bookie集群和broker集群。
  • 3台机器:每台机器上同时部署zookeeper、bookie和broker。
  • 9台机器:分别用3台机器部署zookeeper、bookie和broker集群。

奈何我的小电脑通过虚拟机构建三个机器就已经够呛了,所以采用第二个安装方案。

2 部署流程

我的电脑配置,三台centos7.5机器,8G运存,已安装JDK8,zookeeper3.5.7。

  • hadoop100:IP地址196.168.10.100
  • hadoop102:IP地址196.168.10.102
  • hadoop103:IP地址196.168.10.103

2.1 安装zookeeper

Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独下载 ZooKeeper 安装包和 BookKeeper 安装包。(在实际中,zookeeper我们并不仅仅应用在pulsar上, 包括HBase等其他的组件也需要依赖, 所以我们此处zookeeper使用外置zk集群环境)

zookeeper的安装和基本原理可以看我之前的文章:zookeeper原理与实操

但是,zookeeper部署后, 3.5以后的版本, 会自动占用8080端口. 需要修改配置文件。这会和后边的端口有冲突,因此需要将这个改掉。具体做法为:

vim /opt/module/zookeeper-3.5.7/conf/zoo.cfg

然后添加或修改内容:admin.serverPort=8887

这个很重要,否则后面会报错。

2.2 bookie与broker配置

下载最新版本pulsar
官方下载地址:https://pulsar.apache.org/download/
本文下载的是:apache-pulsar-2.8.1-bin.tar.gz

(1)上传解压、构建软连接

tar -zxvf apache-pulsar-2.8.1-bin.tar.gz -C /opt/module
ln -s apache-pulsar-2.8.1-bin puslar_2.8.1

(2)修改bookkeeper配置文件

vim /opt/module/puslar_2.8.1/conf/bookkeeper.conf

修改其第56行:修改本地ip地址
advertisedAddress=hadoop100
修改其39行:
journalDirectory=/opt/module/pulsar_2.8.1/tmp/journal
修改其389行:
ledgerDirectories=/opt/module/pulsar_2.8.1/tmp/ledger
修改602行:
zkServers=hadoop100:2181,hadoop102:2181,hadoop103:2181

(3)修改broker集群配置文件

vim /opt/module/puslar_2.8.1/conf/broker.conf
修改第98行: 修改集群的名称
clusterName=pulsar-cluster
修改第23行: 配置zookeeper地址
zookeeperServers=hadoop100:2181,hadoop102:2181,hadoop103:2181
修改第26行: 配置zookeeper地址
configurationStoreServers=hadoop100:2181,hadoop102:2181,hadoop103:2181
修改第44行: 更改为本地ip地址
advertisedAddress=hadoop100

(4)将puslar_2.8.1这个文件夹分配到另外两台机器。我用的是xsync脚本,但是也可以用scp -r apache-pulsar-2.8.1/ node2:$PWD 进行分发
(5)修改第二台和第三台的broker地址和bookie地址。

2.3 集群启动

(1)先启动zookeeper集群,详细的看我之前的博客:zookeeper原理与实操
(2)初始化元数据,在pulsar_2.8.1/bin目录下执行一下内容:

./pulsar initialize-cluster-metadata \
--cluster pulsar-cluster \
--zookeeper hadoop100:2181,hadoop102:2181,hadoop103:2181 \
--configuration-store hadoop100:2181,hadoop102:2181,hadoop103:2181 \
--web-service-url http://hadoop100:8080,hadoop102:8080,hadoop103:8080 \
--web-service-url-tls https://hadoop100:8443,hadoop102:8443,hadoop103:8443 \
--broker-service-url pulsar://hadoop100:6650,hadoop102:6650,hadoop103:6650 \
--broker-service-url-tls pulsar+ssl://hadoop100::6651,hadoop102:6651,hadoop103:6651

集群元数据说明

  • cluster 集群名称
  • zookeeper
  • ZooKeeper
    集群连接参数,仅需要包含ZooKeeper集群中的一个节点即可,在哪个机器初始化,就写那个集群的zookeeper地址,我这里在hadoop01local初始化的元数据。
  • 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
    bin/pulsar zookeeper-shell进入zk控制台,通过ls /查看所有zk节点。能看到bookies,ledgers等节点,则说明初始化成功了。

(3)启动bookkeeper服务和启动broker,这里通过脚本实现,因为不想一台一台机器去启动。

#!/bin/bash

case $1 in
"start"){
        for i in hadoop100 hadoop102 hadoop103
        do
        echo ---------- zookeeper $i 启动 ------------
        ssh $i "/opt/module/pulsar_2.8.1/bin/pulsar-daemon start bookie"
        sleep 1s
        ssh $i "/opt/module/pulsar_2.8.1/bin/pulsar-daemon start broker"
        done
};;
"stop"){
        for i in hadoop100 hadoop102 hadoop103
        do
        echo ---------- zookeeper $i 停止 ------------ 
        ssh $i "/opt/module/pulsar_2.8.1/bin/pulsar-daemon stop bookie"
        sleep 3s
        ssh $i "/opt/module/pulsar_2.8.1/bin/pulsar-daemon stop broker"
        done
};;
"status"){
        for i in hadoop100
        do
        echo ---------- zookeeper $i 状态 ------------ 
        ssh $i "/opt/module/pulsar_2.8.1/bin/pulsar-admin brokers list pulsar-cluster"
        done
};;
esac

测试结果如下,启动后:
在这里插入图片描述
可以看到每台机器上对开起了broker进程和bookkeeper服务。由以上脚本可以看到/opt/module/pulsar_2.8.1/bin/pulsar-admin brokers list pulsar-cluster可以判断broker是否启动成功。如果成功,会出现类似于下图的结果:
在这里插入图片描述

当时我这里一直报错404。原因是zookeeper占用了8080端口,上面已经介绍了该怎么处理这个问题。注意,需要先改完端口后,再重启zk。

还需要说明一下,需要修改vim /etc/hosts将localhost映射为本机静态IP。

3 可视化监控部署

(1)下载
下载地址:https://dist.apache.org/repos/dist/release/pulsar/pulsar-manager/pulsar-manager-0.2.0/apache-pulsar-manager-0.2.0-bin.tar.gz
(2)解压
解压操作:

tar -zxf apache-pulsar-manager-0.2.0-bin.tar.gz -C /opt/module/
cd /opt/module/pulsar-manager
# 接着再次解压:
tar -xvf pulsar-manager.tar

(3)拷贝dist包到 pulsar-manager目录下并更名为ui

cd /opt/module/pulsar-manager/pulsar-manager
cp -r ../dist ui

(4)启动

cd /export/server/pulsar-manager/pulsar-manager
./bin/pulsar-manager

启动之后这是一个SpringBoot的前台进程,会出现:
在这里插入图片描述

(5)初始化超级用户密码
因为是前台进程,所以我们需要新建一个shell连接执行初始化操作。在新建的shell连接下,直接将下面的代码改成你安装的信息,运行就好了。

CSRF_TOKEN=$(curl http://hadoop100: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://hadoop100:7750/pulsar-manager/users/superuser \
-d '{"name": "hhhSir", "password": "***", "description": "hhh", "email": "abc@qq.com"}'

运行成功会出现下图信息。
在这里插入图片描述

(6)访问主页:http://hadoop100:7750/ui/index.html。注意这里的hadoop100需要改成你的服务器IP。使用刚刚设置的用户名和密码登录,之后进行如下设置:

① 新建环境,连接pulsar。设置pulsar集群名字,这里是配置文件中的集群名。以及链接URL,这里也是初始化时配置的url。

在这里插入图片描述
然后就可以进行topic的监控和管理了。可以查看租户、名称空间、topic等信息。
在这里插入图片描述
个人认为这个可视化监控管理还是有必要安装的,特别是对于初学者来说,会方便很多。

总结

学会从繁杂的事情中静下来学点东西。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐