(安装docker、docker-compose 略过,请参考docker安装文档)
pull相关服务镜像
docker pull canal/canal-server docker pull canal/canal-admindocker pull zookeeperdocker pull sheepkiller/kafka-managerdocker pull wurstmeister/kafka docker pull portainer/portainer docker pull rabbitmqdocker pull rabbitmq:management
创建docker-compose文件夹
mkdir -p /data/docker-containers/zk-kafka-servermkdir /data/docker-containers/zk-kafka-server/kafka{1,2,3}/logs -p mkdir -p /data/docker-containers/zk-kafka-server/zoo{1,2,3}/datamkdir -p /data/docker-containers/zk-kafka-server/zoo{1,2,3}/datalog
创建YAML配置文件
cd /data/docker-containers/zk-kafka-servervim docker-compose.yaml---## by author:albert-dongversion: '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