(安装docker、docker-compose 略过,请参考docker安装文档)
pull相关服务镜像
docker pull canal/canal-server
docker pull canal/canal-admin
docker pull zookeeper
docker pull sheepkiller/kafka-manager
docker pull wurstmeister/kafka
docker pull portainer/portainer
docker pull rabbitmq
docker pull rabbitmq:management
创建docker-compose文件夹
mkdir -p /data/docker-containers/zk-kafka-server
mkdir /data/docker-containers/zk-kafka-server/kafka{1,2,3}/logs -p
mkdir -p /data/docker-containers/zk-kafka-server/zoo{1,2,3}/data
mkdir -p /data/docker-containers/zk-kafka-server/zoo{1,2,3}/datalog
创建YAML配置文件
cd /data/docker-containers/zk-kafka-server
vim docker-compose.yaml
---
## by author:albert-dong
version: '3.6'
services:
zoo1:
image: zookeeper
restart: always
hostname: zoo1
container_name: zoo1
ports:
- 2181:2181
volumes:
- "$PWD/zoo1/zk-conf/zoo.cfg:/conf/zoo.cfg"
- "./zoo1/data:/data"
- "./zoo1/datalog:/datalog"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
networks:
default:
ipv4_address: 172.27.0.11
zoo2:
image: zookeeper
restart: always
hostname: zoo2
container_name: zoo2
ports:
- 2180:2181
volumes:
- "$PWD/zoo1/zk-conf/zoo.cfg:/conf/zoo.cfg"
- "./zoo2/data:/data"
- "./zoo2/datalog:/datalog"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo3:2888:3888
networks:
default:
ipv4_address: 172.27.0.12
zoo3:
image: zookeeper
restart: always
hostname: zoo3
container_name: zoo3
ports:
- 2179:2181
volumes:
- "$PWD/zoo1/zk-conf/zoo.cfg:/conf/zoo.cfg"
- "./zoo3/data:/data"
- "./zoo3/datalog:/datalog"
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=0.0.0.0:2888:3888
#KAFKA_ADVERTISED_HOST_NAME: 192.168.199.207
networks:
default:
ipv4_address: 172.27.0.13
kafka1:
image: wurstmeister/kafka
restart: always
container_name: kafka1
hostname: kafka1
ports:
- 9092:9092
- 9999:9999
environment:
#KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.161.62: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:
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
- "$PWD/kafka1/logs:/kafka"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.27.0.16
kafka2:
image: wurstmeister/kafka
restart: always
container_name: kafka2
hostname: kafka2
ports:
- 9093:9092
- 9998:9999
environment:
#KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.161.62: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: 0 #
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
JMX_PORT: 9999 # jmx
volumes:
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
- "$PWD/kafka2/logs:/kafka"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.27.0.17
kafka3:
image: wurstmeister/kafka
restart: always
container_name: kafka3
hostname: kafka3
ports:
- 9094:9092
- 9997:9999
environment:
#KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.161.62: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: 0 #
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094
JMX_PORT: 9999 # jmx
volumes:
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
- "$PWD/kafka3/logs:/kafka"
links:
- zoo1
- zoo2
- zoo3
networks:
default:
ipv4_address: 172.27.0.18
kafka-manager:
image: sheepkiller/kafka-manager
restart: always
hostname: kafka-manager
container_name: kafka-manager1
ports:
- 9500:9000
links:
- kafka1
- kafka2
- kafka3
- zoo1
- zoo2
- zoo3
volumes:
- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"
# - "./zoo3/data:/data"
# - "./zoo3/datalog:/datalog"
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.27.0.15
#docker-compose scale kafka=3
networks:
default:
external:
name: zookeeper_network
配置文件测试及服务启动
docker-compose config
docker-compose up -d
初始化集群
#### 初始化zk kafka集群
cd /data/docker-containers/zk-kafka-server/
docker-compose stop &&echo y| docker-compose rm&&docker-compose up -d
ls -laskht zoo{1,2,3}/data/
ls -laskht zoo{1,2,3}/datalog/
rm zoo{1,2,3}/data/* -rf
rm zoo{1,2,3}/datalog/* -rf
ls -lakht kafka{1,2,3}/logs/
rm kafka{1,2,3}/logs/* -rf
查看kafka集群状态 # mode 为leader或follower正常
docker exec -it zoo1 bash bin/zkServer.sh status
docker exec -it zoo2 bash bin/zkServer.sh status
docker exec -it zoo3 bash bin/zkServer.sh status
创建topic 测试
docker exec -it kafka1 bash
kafka-topics.sh --create --zookeeper zoo1:2181 --replication-factor 1 --partitions 3 --topic test001
kafka-topics.sh --list --zookeeper zoo1:2181
kafka-topics.sh --list --zookeeper zoo2:2181
kafka-topics.sh --list --zookeeper zoo3:2181
生产消息
kafka-console-producer.sh --broker-list kafka1:9092,kafka2:9093,kafka3:9094 --topic test001
消费消息
kafka-console-consumer.sh --bootstrap-server kafka1:9092,kafka2:9093,kafka3:9094 --topic test001 --from-beginning