前言
本文主要介绍了如何通过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
如果启动成功,可以看到如下内容:
至此,一个部署在三台服务器上的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集群的监控。
大功告成了!
标签:--,192.168,kafka,2181,集群,docker,KAFKA From: https://www.cnblogs.com/lm970585581/p/17085724.html