docker network create -d bridge --subnet 172.66.6.0/24 kafka_cluster_network
| hostname | Ip | port | listener |
|---|---|---|---|
| zook1 | 172.66.6.2 | 2186:2181 | |
| zook2 | 172.66.6.3 | 2187:2181 | |
| zook3 | 172.66.6.4 | 2188:2181 | |
| kafka1 | 172.66.6.5 | 9092:9092 | kafka1 |
| kafka2 | 172.66.6.6 | 9093:9092 | kafka2 |
| Kafka3 | 172.66.6.7 | 9094:9092 | Kafka3 |
| kafka manager | 172.66.6.10 | 9000:9000 |
version: '2'
services:
zoo1:
image: zookeeper # 镜像
restart: always # 重启
container_name: zoo1
hostname: zoo1
ports:
- "2186:2181"
volumes:
- "D:\\docker\\volumes\\zookeeper\\zookeeper1\\data:/data"
- "D:\\docker\\volumes\\zookeeper\\zookeeper1\\datalog:/datalog"
environment:
ZOO_MY_ID: 1 # id
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
networks:
default:
ipv4_address: 172.66.6.2
zoo2:
image: zookeeper # 镜像
restart: always # 重启
container_name: zoo2
hostname: zoo2
ports:
- "2187:2181"
volumes:
- "D:\\docker\\volumes\\zookeeper\\zookeeper2\\data:/data"
- "D:\\docker\\volumes\\zookeeper\\zookeeper2\\datalog:/datalog"
environment:
ZOO_MY_ID: 2 # id
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
networks:
default:
ipv4_address: 172.66.6.3
zoo3:
image: zookeeper # 镜像
restart: always # 重启
container_name: zoo3
hostname: zoo3
ports:
- "2188:2181"
volumes:
- "D:\\docker\\volumes\\zookeeper\\zookeeper3\\data:/data"
- "D:\\docker\\volumes\\zookeeper\\zookeeper3\\datalog:/datalog"
environment:
ZOO_MY_ID: 3 # id
ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
networks:
default:
ipv4_address: 172.66.6.4
kafka1:
image: wurstmeister/kafka # 镜像
restart: always
container_name: kafka1
hostname: kafka1
ports:
- 9092:9092
- 9999:9999
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.10:9092
KAFKA_ADVERTISED_HOST_NAME: kafka1 #
KAFKA_HOST_NAME: kafka1
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
KAFKA_ADVERTISED_PORT: 9092 # 暴露在外的端口
KAFKA_BROKER_ID: 0 #
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
JMX_PORT: 9999 # jmx
volumes:
- "D:\\docker\\volumes\\kafka\\kafka1:/kafka"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.66.6.5
kafka2:
image: wurstmeister/kafka # 镜像
restart: always
container_name: kafka2
hostname: kafka2
ports:
- 9093:9092
- 9998:9999
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.10:9093
KAFKA_ADVERTISED_HOST_NAME: kafka2 #
KAFKA_HOST_NAME: kafka2
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
KAFKA_ADVERTISED_PORT: 9093 # 暴露在外的端口
KAFKA_BROKER_ID: 1 #
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
JMX_PORT: 9999 # jmx
volumes:
- "D:\\docker\\volumes\\kafka\\kafka2:/kafka"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.66.6.6
kafka3:
image: wurstmeister/kafka # 镜像
restart: always
container_name: kafka3
hostname: kafka3
ports:
- 9094:9092
- 9997:9999
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.10:9094
KAFKA_ADVERTISED_HOST_NAME: kafka3 #
KAFKA_HOST_NAME: kafka3
KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
KAFKA_ADVERTISED_PORT: 9094 # 暴露在外的端口
KAFKA_BROKER_ID: 2 #
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
JMX_PORT: 9999 # jmx
volumes:
- "D:\\docker\\volumes\\kafka\\kafka3:/kafka"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.66.6.7
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: zoo1:2181,zoo2:2181,zoo3:2181
KAFKA_BROKERS: kafka1:9092,kafka2:9093,kafka3:9094
APPLICATION_SECRET: letmein
KAFKA_MANAGER_AUTH_ENABLED: "true" # 开启验证
KAFKA_MANAGER_USERNAME: "admin" # 用户名
KAFKA_MANAGER_PASSWORD: "admin" # 密码
KM_ARGS: -Djava.net.preferIPv4Stack=true
networks:
default:
ipv4_address: 172.66.6.10
networks:
default:
external:
name: kafka_cluster_network
docker-compose -f docker-compose.yml up -d
进入到zk容器中,cd到bin目录,
zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
进入到kafka容器中,cd到opt目录,进入kafka安装目录,
kafka-topics.sh --zookeeper zoo1:2181 --create --replication-factor 2 --partitions 3 --topic topic-test
kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9093,kafka3:9094 --topic topic-test
>hello world
kafka-console-consumer.sh --bootstrap-server kafka1:9092,kafka2:9093,kafka3:9094 --from-beginning --topic topic-test
http://localhost:9000/ 新建cluster查看相关信息

参考链接
1. https://kafka.apache.org/documentation/
2. https://blog.csdn.net/weixin_45358927/article/details/113841281?spm=1001.2014.3001.5502
3. https://blog.csdn.net/sinat_36053757/article/details/123724748
4. https://segmentfault.com/a/1190000038754768