准备工作

1,不使用pulsar内部的zookeeper(zk)所以要自己pull zk的镜像

2,版本准备zookeeper:3.6.3    apachepulsar/pulsar:2.9.1    mysql:8(这个就不部署了吧)

3,我这里 部署在一台机器上了,尽量要分在三台,我只是为了说部署过程

4, 创建好docker 内网 mynet

5,关闭防火墙

开始

1,搭建 zk 

创建文件夹

mkdir -p  ~/zookeeper/zoo1/conf

mkdir -p  ~/zookeeper/zoo1/data

创建容器

docker run -tid \

--name zoo1  \

zookeeper:3.6.3

拷贝配置文件

docker cp -r zoo1:/apache-zookeeper-3.6.3-bin/conf/*  ~/zookeeper/zoo1/conf/

删除容器

docker rm -f zoo1

修改配置文件(这里不太一样  它的监听端口 是在第三个端口号不是以前的clientPort了,另外是分号)

dataDir=/data

server.1=172.18.0.11:2888:3888;18881

server.2=172.18.0.12:2888:3888;18882

server.3=172.18.0.13:2888:3888;18883

zk的部署这里不详细展开了,网上太多了.

cp -r ~/zookeeper/zoo1/conf/ ~/zookeeper/zoo2/conf/

cp -r ~/zookeeper/zoo1/conf/ ~/zookeeper/zoo3/conf/

echo 1 > ~/zookeeper/zoo1/data/myid

echo 2 > ~/zookeeper/zoo1/data/myid

echo 3 > ~/zookeeper/zoo1/data/myid

docker run -tid \
--name zoo1  \
--network=mynet --ip 172.18.0.11 \
-v /home/code/zookeeper/zoo1/conf:/apache-zookeeper-3.6.3-bin/conf \
-v /home/code/zookeeper/zoo1/data:/data  \
-p 18881:18881 \
zookeeper:3.6.3


docker run -tid \
--name zoo2  \
--network=mynet --ip 172.18.0.12 \
-v /home/code/zookeeper/zoo2/conf:/apache-zookeeper-3.6.3-bin/conf \
-v /home/code/zookeeper/zoo2/data:/data  \
-p 18882:18882 \
zookeeper:3.6.3


docker run -tid \
--name zoo3  \
--network=mynet --ip 172.18.0.13 \
-v /home/code/zookeeper/zoo3/conf:/apache-zookeeper-3.6.3-bin/conf \
-v /home/code/zookeeper/zoo3/data:/data  \
-p 18883:18883 \
zookeeper:3.6.3

查看状态

[code@ec1 conf]$ docker exec -it zoo1 zkServer.sh status

2,搭建pulsar

mkdir -p  /home/code/pulsar/p1/conf

mkdir -p  /home/code/pulsar/p1/data

mkdir -p /home/code/pulsar/p1/data/bookkeeper/journal

mkdir -p /home/code/pulsar/p1/data/bookkeeper/ledgers

创建镜像

docker run -itd \

--name p1 \

apachepulsar/pulsar:2.9.1

拷贝conf

docker cp -r p1:/pulsar/conf  /home/code/pulsar/p1/conf

配置booker

vim  bookkeeper.conf

改成本机 ip

advertisedAddress=最好是 局域网ip
prometheusStatsHttpPort=8100
ledgerDirectories=/pulsar/data/bookkeeper/ledgers
journalDirectory=/pulsar/data/bookkeeper/journal
# 我这里用的是本机的外网ip
zkServers=118.195.***.***:18881,118.195.***.***:18882,118.195.***.***:18883

配置broker

zookeeperServers=118.195.***.***:18881,118.195.***.***:18882,118.195.***.***:18883
configurationStoreServers=118.195.***.***:18881,118.195.***.***:18882,118.195.***.***:18883
# 这里我只把zoo1 写成了 外网地址  zoo2和zoo3 都是内网地址,下面会告诉你为啥
advertisedAddress=118.195.***.***
clusterName=pulsar-cluster

复制两份

cp -r /home/code/pulsar/p1/conf /home/code/pulsar/p2/conf

cp -r /home/code/pulsar/p1/conf /home/code/pulsar/p3/conf

cp -r /home/code/pulsar/p1/data/home/code/pulsar/p2/data

cp -r /home/code/pulsar/p1/data/home/code/pulsar/p3/data

不要忘记了把  p2 p3 的 book 和 broke 配置文件的advertisedAddress 改成对应ip

删除重新创建镜像

docker rm -f zoo1

创建

docker run -itd \
--name p1 \
--network=mynet --ip 172.18.0.21 \
-p 6650:6650 \
-p 8091:8080 \
-p 12881:12881 \
-p 13881:13881 \
-p 12181:12181 \
-v /home/code/pulsar/p1/data:/pulsar/data \
-v /home/code/pulsar/p1/conf:/pulsar/conf \
apachepulsar/pulsar:2.9.1


docker run -itd \
--name p2 \
--network=mynet --ip 172.18.0.22 \
-p 6652:6650  \
-p 8092:8080 \
-p 12882:12882 \
-p 13882:13882 \
-p 12182:12182 \
-v /home/code/pulsar/p2/data:/pulsar/data \
-v /home/code/pulsar/p2/conf:/pulsar/conf \
apachepulsar/pulsar:2.9.1


docker run -itd \
--name p3 \
--network=mynet --ip 172.18.0.23 \
-p 6653:6650  \
-p 8093:8080 \
-p 12883:12883 \
-p 13883:13883 \
-p 12183:12183 \
-v /home/code/pulsar/p3/data:/pulsar/data \
-v /home/code/pulsar/p3/conf:/pulsar/conf \
apachepulsar/pulsar:2.9.1

3 ,进入容器开始初始化

docker exec -it zoo1 bash

初始化,我这里没有添加tls的配置

./bin/pulsar initialize-cluster-metadata \
  --cluster pulsar-cluster \
  --zookeeper 118.195.***.***:18881 \
  --configuration-store  118.195.***.***:18881,118.195.***.***:18882,118.195.***.***:18883 \
  --web-service-url http://118.195.***.***:8091,118.195.***.***:8092,118.195.***.***:8093 \
  --broker-service-url pulsar://118.195.***.***:6651,118.195.***.***:6652,118.195.***.***:6653

成功的截图

初始化 bookkeeper

bin/bookkeeper shell metaformat

会有一个让你按Y 的步骤

在三台机器运行 来启动  bookie:

bin/pulsar-daemon start bookie

(停止 bin/pulsar-daemon stop bookie)

验证是否启动成功:

bin/bookkeeper shell bookiesanity

启动broker

三台机器都要启动

bin/pulsar-daemon start broker

(关闭 bin/pulsar-daemon stop broker)

查看集群 brokers 节点情况

bin/pulsar-admin brokers list pulsar-cluster

这里使用zoo1的外网地址 是因为我在用java连接zk的时候会报172.18.0.21:18881连接不上的异常,所以为了展示就用的外网ip

三台都这样的话就是成功了

监听 mysql8的 配置请走传送门

CSDN    Pulsar集群 监听mysql8的binlog

报错:

1,Client port not found in static config file. Looking in dynamic config

zk的版本和pulsar不匹配

参考

Pulsar 集群安装-阿里云开发者社区

Pulsar IO之CDC Debezium Connector_bright_qian的博客-CSDN博客

Pulsar 集群搭建以及如何使用 debezium mysql connector_ヾ临江仙的博客-CSDN博客

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐