1、安装docker和docker-compose
docker版本 25.0.5
docker-compose 版本 v2.17.2
安装步骤:略
2.拉取镜像
docker pull zookeeper
docker pull wurstmeister/kafka
docker pull hlebalbau/kafka-manager
这里拉取了 kafka-manager 的镜像,不需要的可以跳过,后面的docker-compose.yml 也相应注释掉。
3.新建网络
docker network create --driver bridge --subnet 172.23.0.0/16 --gateway 172.23.0.1 zookeeper_network
4.选择一目录,创建 docker-compose.yml 文件
注意:文件中的“KAFKA_ADVERTISED_HOST_NAME: 192.168.10.111”这个参数对应的ip地址需要更改成自己宿主机的ip地址,每个人不一样
version: '3.2'
networks:
default:
external:
name: zookeeper_network
services:
zoo1:
image: zookeeper # 镜像
restart: always # 重启
container_name: zoo1
hostname: zoo1
ports:
- "2181:2181"
volumes:
- "./zoo1/data:/data"
- "./zoo1/datalog:/datalog"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=172.23.0.11:2888:3888;2181 server.2=172.23.0.12:2888:3888;2181 server.3=172.23.0.13:2888:3888;2181
networks:
default:
ipv4_address: 172.23.0.11
zoo2:
image: zookeeper # 镜像
restart: always # 重启
container_name: zoo2
hostname: zoo2
ports:
- "2182:2181"
volumes:
- "./zoo2/data:/data"
- "./zoo2/datalog:/datalog"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=172.23.0.11:2888:3888;2181 server.2=172.23.0.12:2888:3888;2181 server.3=172.23.0.13:2888:3888;2181
networks:
default:
ipv4_address: 172.23.0.12
zoo3:
image: zookeeper # 镜像
restart: always # 重启
container_name: zoo3
hostname: zoo3
ports:
- "2183:2181"
volumes:
- "./zoo3/data:/data"
- "./zoo3/datalog:/datalog"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=172.23.0.11:2888:3888;2181 server.2=172.23.0.12:2888:3888;2181 server.3=172.23.0.13:2888:3888;2181
networks:
default:
ipv4_address: 172.23.0.13
kafka1:
image: wurstmeister/kafka # 镜像
restart: always
container_name: kafka1
hostname: kafka1
privileged: true
ports:
- 9092:9092
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.10.111:9092 # 暴露在外的地址,宿主机地址和端口
KAFKA_ADVERTISED_HOST_NAME: 192.168.10.111 # 宿主机地址,KAFKA_ADVERTISED_LISTENERS 配置了,这个可以不配
KAFKA_HOST_NAME: kafka1
KAFKA_ZOOKEEPER_CONNECT: 172.23.0.11:2181,172.23.0.12:2181,172.23.0.13:2181
KAFKA_ADVERTISED_PORT: 9092 # 暴露在外的端口 宿主机端口,KAFKA_ADVERTISED_LISTENERS 配置了,这个可以不配
KAFKA_BROKER_ID: 0 #
KAFKA_LISTENERS: PLAINTEXT://172.23.0.14:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
volumes:
- "./kafka1/data:/kafka"
- "./kafka1/logs:/opt/kafka/logs"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.23.0.14
kafka2:
image: wurstmeister/kafka # 镜像
restart: always
container_name: kafka2
hostname: kafka2
privileged: true
ports:
- 9093:9092
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.10.111:9093 # 暴露在外的地址
KAFKA_ADVERTISED_HOST_NAME: 192.168.10.111
KAFKA_HOST_NAME: kafka2
KAFKA_ZOOKEEPER_CONNECT: 172.23.0.11:2181,172.23.0.12:2181,172.23.0.13:2181
KAFKA_ADVERTISED_PORT: 9093 # 暴露在外的端口
KAFKA_BROKER_ID: 1 #
KAFKA_LISTENERS: PLAINTEXT://172.23.0.15:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
volumes:
- "./kafka2/data:/kafka"
- "./kafka2/logs:/opt/kafka/logs"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.23.0.15
kafka3:
image: wurstmeister/kafka # 镜像
restart: always
container_name: kafka3
hostname: kafka3
privileged: true
ports:
- 9094:9092
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.10.111:9094 # 暴露在外的地址
KAFKA_ADVERTISED_HOST_NAME: 192.168.10.111 #
KAFKA_HOST_NAME: kafka3
KAFKA_ZOOKEEPER_CONNECT: 172.23.0.11:2181,172.23.0.12:2181,172.23.0.13:2181
KAFKA_ADVERTISED_PORT: 9094 # 暴露在外的端口
KAFKA_BROKER_ID: 2 #
KAFKA_LISTENERS: PLAINTEXT://172.23.0.16:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
volumes:
- "./kafka3/data:/kafka"
- "./kafka3/logs:/opt/kafka/logs"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.23.0.16
kafka-manager:
image: hlebalbau/kafka-manager
restart: always
container_name: kafka-manager
hostname: kafka-manager
ports:
- 9000:9000
links:
- kafka1
- kafka2
- kafka3
- zoo1
- zoo2
- zoo3
environment:
ZK_HOSTS: 172.23.0.11:2181,172.23.0.12:2181,172.23.0.13:2181
KAFKA_BROKERS: 172.23.0.14:9092,172.23.0.15:9093,172.23.0.16:9094
APPLICATION_SECRET: letmein
KAFKA_MANAGER_AUTH_ENABLED: "true" # 开启验证
KAFKA_MANAGER_USERNAME: "admin" # 用户名
KAFKA_MANAGER_PASSWORD: "admin" # 密码
KM_ARGS: -Djava.net.preferIPv4Stack=true
5.docker-compose up -d (在yml 文件目录下执行)
6.运行成功结果图
kafka-manager结果: