Docker容器化部署zookeeper+kafka集群详细步骤
目录
一、前言
写在前面:下面将介绍使用三台云服务器,用docker部署zookeeper+kafka+kafka-connect-ui集群。(如果大家掌握基础Linux命令、docker常用命令以及DockerCompose基础知识的话应该可以顺利完成部署)
背景介绍:为了测试使用kafka connect插件读取Oracle数据库日志从而达到实时获取Oracle数据库数据变化的目的,而搭建的三个节点的zookeeper+kafka集群,顺便将自己的步骤记录下来加深印象也希望能对大家有些许的帮助。
最后我还是没能找到一个稳定监控Oracle数据库的kafka connect插件,如果大佬们有好的方案,希望能告诉我一下,有任何问题也可在下方评论,大家一起讨论一起学习一起进步。
二、准备三台云服务器
这里我用的是三台云服务器,大家可以白嫖三家的云服务器新用户优惠,也可以通过流量付费的方式购买三个配置高一些的服务器,当然也可以使用虚拟机。
这里我以kafka01、kafka02、kafka03代指三台服务器
以下操作默认使用root权限
三、安装Docker
1 卸载旧版本Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2 安装yum工具包
yum install -y yum-utils
3 设置阿里云镜像
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4 安装Docker
yum install docker-ce docker-ce-cli containerd.io #安装最新版本 docker-ce 社区版 docker-ce 企业版
yum list docker-ce --showduplicates | sort -r #显示docker历史版本
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io #安装指定版本docker
5 启动Docker
systemctl start docker
查看docker是否安装成功
docker version
6 Docker命令
四、下载Docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod 777 docker-compose # chmod 777 给文件授权 可读可写可执行
五、拉取zookeeper和kafka相关镜像
我这里用的是zookeeper、wurstmeister/kafka和landoop/kafka-connect-ui镜像
这个也可以先不拉取,后续启动docker-compose文件时会自动下载
docker pull zookeeper
docker pull wurstmeister/kafka
docker pull landoop/kafka-connect-ui
查看docker已有镜像
docker images
六、给各服务器开启相关端口
如果使用的是云服务器一定要在控制台安全组中打开所需要的端口,如果使用的虚拟机的话可以直接关闭防火墙
systemctl stop firewalld ## 关闭防火墙
systemctl status firewalld ## 查看防火墙状态
systemctl start firewalld ## 打开防火墙
七、编写compose文件
如果大家有对zookeeper和kafka的部署或者其中配置有问题的话可以参考这篇Canal监控MySQL数据到Kafka详细步骤(jdk+zookeeper+kafka+canal+mysql),其中对部分参数有所解释,步骤也较为详细,或者大家也可以在下方评论交流。
1 在/home/docker目录创建docker-compose.yml以及zoo.cfg文件
2 编写第一个节点的compose文件以及zoo.cfg文件
compose文件
version: '1.1'
services:
zookeeper:
image: 'zookeeper:latest'
restart: always
environment:
ZOO_MY_ID: 1
volumes:
- /home/docker/zoo.cfg:/conf/zoo.cfg
ports:
- 2181:2181
- 2888:2888
- 3888:3888
container_name: 'zookeeper01'
kafka01:
image: wurstmeister/kafka
ports:
- "9092:9092"
- "8083:8083"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka01ip
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka01ip:9092
KAFKA_ZOOKEEPER_CONNECT: "kafka01ip:2181,kafka02ip:2181,kafka03ip:2181"
KAFKA_ADVERTISED_PORT: 9092
KAFKA_BROKER_ID: 1
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
depends_on:
- zookeeper
container_name: kafka01
kafkaconnectui:
image: landoop/kafka-connect-ui
ports:
- "8000:8000"
environment:
CONNECT_URL: kafka01ip:8083
container_name: kafkaconnectui
depends_on:
- kafka01
zoo.cfg文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data
dataLogDir=/data
clientPort=2181
audit.enable=true
server.1=0.0.0.0:2888:3888
server.2=kafka02ip:2888:3888
server.3=kafka03ip:2888:3888
3 编写第二个节点的compose文件以及zoo.cfg文件
compose文件
version: '1.1'
services:
zookeeper:
image: 'zookeeper:latest'
restart: always
environment:
ZOO_MY_ID: 2
volumes:
- /home/docker/zoo.cfg:/conf/zoo.cfg
ports:
- 2181:2181
- 2888:2888
- 3888:3888
container_name: 'zookeeper02'
kafka02:
image: wurstmeister/kafka
ports:
- "9092:9092"
- "8083:8083"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka02ip
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka02ip:9092
KAFKA_ZOOKEEPER_CONNECT: "kafka01ip:2181,kafka02ip:2181,kafka03ip:2181"
KAFKA_ADVERTISED_PORT: 9092
KAFKA_BROKER_ID: 2
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
depends_on:
- zookeeper
container_name: kafka02
kafkaconnectui:
image: landoop/kafka-connect-ui
ports:
- "8000:8000"
environment:
CONNECT_URL: kafka02ip:8083
container_name: kafkaconnectui
depends_on:
- kafka02
zoo.cfg文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data
dataLogDir=/data
clientPort=2181
audit.enable=true
server.1=kafka01ip:2888:3888
server.2=0.0.0.0:2888:3888
server.3=kafka03ip:2888:3888
4 编写第三个节点的compose文件以及zoo.cfg文件
compose文件
version: '1.1'
services:
zookeeper:
image: 'zookeeper:latest'
restart: always
environment:
ZOO_MY_ID: 3
volumes:
- /home/docker/zoo.cfg:/conf/zoo.cfg
ports:
- 2181:2181
- 2888:2888
- 3888:3888
container_name: 'zookeeper03'
kafka03:
image: wurstmeister/kafka
ports:
- "9092:9092"
- "8083:8083"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka03ip
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka03ip:9092
KAFKA_ZOOKEEPER_CONNECT: "kafka01ip:2181,kafka02ip:2181,kafka03ip:2181"
KAFKA_ADVERTISED_PORT: 9092
KAFKA_BROKER_ID: 3
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
depends_on:
- zookeeper
container_name: kafka03
kafkaconnectui:
image: landoop/kafka-connect-ui
ports:
- "8000:8000"
environment:
CONNECT_URL: kafka03ip:8083
container_name: kafkaconnectui
depends_on:
- kafka03
zoo.cfg文件
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data
dataLogDir=/data
clientPort=2181
audit.enable=true
server.1=kafka01ip:2888:3888
server.2=kafka02ip:2888:3888
server.3=0.0.0.0:2888:3888
八、启动docker-compose
cd到/home/docker文件夹下,此时当前目录下有一个docker-compose.yml文件以及zoo.cfg文件
docker-compose up ## 启动
docker-compose stop ## 停止
三个节点都启动后查看每个节点正在运行的镜像
docker ps
九、启动kafka-connect
镜像都正常启动后,进入各个kafka容器中启动kafka-connect
docker exec -it kafka01 bash ## 进入kafka01容器
cd /opt/kafka_2.13-2.8.1/bin/ ## 进入到bin目录下
connect-distributed.sh -daemon /opt/kafka_2.13-2.8.1/config/connect-distributed.properties
## 启动connect
十、在浏览器输入kafka01ip:8000进入kafka ui界面
十一、结语
至此,已经完成所有操作,可以通过kafka来进行一些测试了。以上应该有很多可以更加简便的操作或者不对的地方,如有发现还行大家指正,不胜感激。大家有什么问题也可以在下方评论或者私信我,我会尽力帮大家解答。如果这篇文章对大家还算有所帮助,希望帮忙点个赞支持一下。最后祝大家工作顺利,心想事成!