- Docker容器化部署zookeeper+kafka集群详细步骤
- 一、前言
- 二、准备三台云服务器
- 三、安装Docker
- 1 卸载旧版本Docker
- 2 安装yum工具包
- 3 设置阿里云镜像
- 4 安装Docker
- 5 启动Docker
- 6 Docker命令
- 四、下载Docker-compose
- 五、拉取zookeeper和kafka相关镜像
- 六、给各服务器开启相关端口
- 七、编写compose文件
- 1 在/home/docker目录创建docker-compose.yml以及zoo.cfg文件
- 2 编写第一个节点的compose文件以及zoo.cfg文件
- 3 编写第二个节点的compose文件以及zoo.cfg文件
- 4 编写第三个节点的compose文件以及zoo.cfg文件
- 八、启动docker-compose
- 九、启动kafka-connect
- 十、在浏览器输入kafka01ip:8000进入kafka ui界面
- 十一、结语
写在前面:下面将介绍使用三台云服务器,用docker部署zookeeper+kafka+kafka-connect-ui集群。(如果大家掌握基础Linux命令、docker常用命令以及DockerCompose基础知识的话应该可以顺利完成部署)
背景介绍:为了测试使用kafka connect插件读取Oracle数据库日志从而达到实时获取Oracle数据库数据变化的目的,而搭建的三个节点的zookeeper+kafka集群,顺便将自己的步骤记录下来加深印象也希望能对大家有些许的帮助。
最后我还是没能找到一个稳定监控Oracle数据库的kafka connect插件,如果大佬们有好的方案,希望能告诉我一下,有任何问题也可在下方评论,大家一起讨论一起学习一起进步。
二、准备三台云服务器这里我用的是三台云服务器,大家可以白嫖三家的云服务器新用户优惠,也可以通过流量付费的方式购买三个配置高一些的服务器,当然也可以使用虚拟机。
这里我以kafka01、kafka02、kafka03代指三台服务器
以下操作默认使用root权限
三、安装Docker 1 卸载旧版本Dockeryum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
2 安装yum工具包
yum install -y yum-utils3 设置阿里云镜像
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-5 启动Dockerdocker-ce-cli- containerd.io #安装指定版本docker
systemctl start docker
查看docker是否安装成功
docker version6 Docker命令
官方命令文档
四、下载Docker-composesudo 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:38883 编写第二个节点的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:38884 编写第三个节点的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来进行一些测试了。以上应该有很多可以更加简便的操作或者不对的地方,如有发现还行大家指正,不胜感激。大家有什么问题也可以在下方评论或者私信我,我会尽力帮大家解答。如果这篇文章对大家还算有所帮助,希望帮忙点个赞支持一下。最后祝大家工作顺利,心想事成!



