前言

本文主要介绍了如何通过docker搭建一个可以用于生产环境的kafka集群。

kafka集群使用了3个节点,依赖zookeeper进行协调,所以会同时搭建一套3节点的zookeeper集群。

准备工作

本次实践准备了三台CentOS8服务器,ip地址如下:

192.168.1.34

192.168.1.36

192.168.1.73

实践目标

在每台机器上安装一个zookeeper和一个kafka组成整体的集群。

前提条件

三台机器上已经安装了docker和docker-compose。

docker的安装本文不会介绍,docker-compose的安装如下:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

 

说明:不一定非要安装docker-compose,此处安装docker-compose是因为在本文的实践中使用了docker-compose,你完全可以把yml文件翻译成docker run命令,来完成整个集群的搭建工作。

开启防火墙端口

正常使用kafka集群需要开放一些端口,如果你的机器没有开启防火墙,可以忽略。

开启端口命令如下:

firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

 

搭建zookeeper集群

进入三台服务器,创建目录/home/zk,并创建zk.yml文件

mkdir /home/zk
cd /home/zk
touch zk.yml

zk.yml是docker-compose的编排文件,三台服务器的zk.yml文件内容分别如下:

192.168.1.34中的zk.yml

version: '3.1'

services:
  zk1:
    image: 'zookeeper:3.7'
    restart: always
    hostname: zoo1
    container_name: zk1
    network_mode: host
    ports:
      - 2181:2181
      - 2888:2888
      - 3888:3888
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

 

192.168.1.36中的zk.yml

version: '3.1'

services:
  zk2:
    image: 'zookeeper:3.7'
    restart: always
    hostname: zoo2
    container_name: zk2
    network_mode: host
    ports:
      - 2181:2181
      - 2888:2888
      - 3888:3888
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

 

192.168.1.73中的zk.yml

version: '3.1'

services:
  zk3:
    image: 'zookeeper:3.7'
    restart: always
    hostname: zoo3
    container_name: zk3
    network_mode: host
    ports:
      - 2181:2181
      - 2888:2888
      - 3888:3888
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

 

分别在三台机器的/home/zk目录下执行以下命令,开启zk集群

docker-compose -f zk.yml up -d

 

进入容器内部查看是否启动成功:

docker exec -it zk1 bash
zkServer.sh status

docker exec -it zk2 bash
zkServer.sh status

docker exec -it zk3 bash
zkServer.sh status

 

如果启动成功,可以看到如下内容:

 

docker搭建kafka集群实践_Zookeeper

 

 

至此,一个部署在三台服务器上的3节点zookeeper集群就搭建成功了。

搭建kafka集群

进入三台服务器,创建目录/home/kafka,并创建zk.yml文件

mkdir /home/kafka
cd /home/kafka
touch kafka.yml

 

kafka.yml是docker-compose的编排文件,三台服务器的kafka.yml文件内容分别如下:

192.168.1.34中的kafka.yml

version: '2'

services:
  k1:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k1
    network_mode: host
    ports:
      - 9092:9092
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=1
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.34:9092
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_CFG_NUM_PARTITIONS=3
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3

 

192.168.1.36中的kafka.yml

version: '2'

services:
  k2:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k2
    network_mode: host
    ports:
      - 9092:9092
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=2
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.36:9092
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_CFG_NUM_PARTITIONS=3
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3

 

192.168.1.73中的kafka.yml

version: '2'

services:
  k3:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k3
    network_mode: host
    ports:
      - 9092:9092
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=3
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.73:9092
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_CFG_NUM_PARTITIONS=3
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3

 

分别在三台机器的/home/kafka目录下执行以下命令,开启kafka集群

docker-compose -f kafka.yml up -d

 

创建topic并验证消费者和生产者

进入192.168.1.34的kafka容器内部

docker exec -it k1 bash
cd /opt/bitnami/kafka/bin
./kafka-topics.sh --create --bootstrap-server 192.168.1.34:9092 --replication-factor 1 --partitions 3 --topic chattest

 

进入其他机器的kafka容器内部,查看是否存在刚创建的topic,如果存在则说明Kafka集群搭建成功。

docker exec -it k2 bash
kafka-topics.sh --list --bootstrap-server 192.168.1.36:9092
docker exec -it k3 bash
kafka-topics.sh --list --bootstrap-server 192.168.1.73:9092

 

搭建kafka-manager

kafka-manager是一个kafka集群的可视化监控工具,在一台机器上安装即可,我们选择在192.168.1.36这台服务器上安装

进入目录/home/kafka,并创建manager.yml文件

cd /home/kafka
touch manager.yml

 

manager.yml是docker-compose的编排文件,内容如下:

version: '3.0'

services:
  kafka-manager:
    image: hlebalbau/kafka-manager
    restart: always
    container_name: kafka-manager
    hostname: kafka-manager
    network_mode: host
    ports:
    - 9000:9000
    environment:
      ZK_HOSTS: 192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
      KAFKA_BROKERS: 192.168.1.34:9092,192.168.1.36:9092,192.168.1.73:9092
      APPLICATION_SECRET: letmein
      KAFKA_MANAGER_AUTH_ENABLED: "true" # 开启验证
      KAFKA_MANAGER_USERNAME: "admin" # 用户名
      KAFKA_MANAGER_PASSWORD: "admin" # 密码
      KM_ARGS: -Djava.net.preferIPv4Stack=true

 

在/home/kafka目录下执行以下命令,开启监控工具

docker-compose -f manager.yml up -d

 

浏览器访问192.168.1.36:9000,输入用户名密码即可进入监控页面。

按照下图操作增加对kafka集群的监控。

 

docker搭建kafka集群实践_docker_02

 

 

docker搭建kafka集群实践_Zookeeper_03

 

 

大功告成了!

微信搜索“HUC思梦”关注我吧,关注有惊喜,不定时有免费资源分享!