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-ui界面

十一、结语

至此,已经完成所有操作,可以通过kafka来进行一些测试了。以上应该有很多可以更加简便的操作或者不对的地方,如有发现还行大家指正,不胜感激。大家有什么问题也可以在下方评论或者私信我,我会尽力帮大家解答。如果这篇文章对大家还算有所帮助,希望帮忙点个赞支持一下。最后祝大家工作顺利,心想事成!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐