1.环境准备 :

1.1 安装好的docker

查看 docker 是否安装 :

  1. docker --version

image.png

1.2 物理机目录

新建docker 总目录,注意这里将来放一些关于docker的数据目录,名字随便取。

  1. mkdir docker

image.png

1.3 拉取 zookeeper3.5 镜像

  1. docker pull zookeeper:3.5

image.png

1.4 拉取 kafka 最新的镜像

kafka其实就是2.6版本,注意改下image 名称 ,变成 kafka

docker pull wurstmeister/kafka

image.png

1.5 拉取manager

注意改下image 名称 变成kafka-manager

docker pull kafkamanager/kafka-manager:latest

2.创建kafka相关文件&文件夹

2.1 日志挂载目录

mkdir -p /docker/kafka/kafka1/logs
mkdir -p /docker/kafka/kafka2/logs
mkdir -p /docker/kafka/kafka3/logs

3 创建 zookepeer配置文件及目录

3.1 日志数据挂载目录

mkdir -p /docker/zookeeper/zk2/data
mkdir -p /docker/zookeeper/zk2/log
mkdir -p /docker/zookeeper/zk3/data
mkdir -p /docker/zookeeper/zk3/log
mkdir -p /docker/zookeeper/zk4/data
mkdir -p /docker/zookeeper/zk4/log

3.2 创建 zk 配置文件

mkdir -p /docker/zookeeper/zk2/conf

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/data
dataLogDir=/datalog
clientPort=2181
maxClientCnxns=60
server.1=172.19.0.2:2888:3888
server.2=172.19.0.3:2888:3888
server.3=172.19.0.4:2888:3888

mkdir -p /docker/zookeeper/zk3/conf

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/data
dataLogDir=/datalog
clientPort=2181
maxClientCnxns=60
server.1=172.19.0.2:2888:3888
server.2=172.19.0.3:2888:3888
server.3=172.19.0.4:2888:3888

mkdir -p /docker/zookeeper/zk4/conf

tickTime=2000
initLimit=5
syncLimit=2
dataDir=/data
dataLogDir=/datalog
clientPort=2181
maxClientCnxns=60
server.1=172.19.0.2:2888:3888
server.2=172.19.0.3:2888:3888
server.3=172.19.0.4:2888:3888

文件配置结构展示
image.png

4 文件夹授权

文件目录授权

cd /docker 
chmod 777 kafka -R
chmod 777 zookeeper -R

5 编排kafka&zookeeper节点容器

通常docker集群部署我们都会编写编排脚本,这个相对于单独一个一个run,出错率低且高效。
vi docker-compose.yml

version: '3'

services:
  zoo2:
    image: zookeeper:3.5
    restart: always
    hostname: zoo2
    container_name: zoo2
    privileged: true
    ports:
      - 2184:2181
    volumes:
      - /Users/hezhaoming/Documents/docker/zookeeper/zk2/conf/zoo.cfg:/conf/zoo.cfg
      - /Users/hezhaoming/Documents/docker/zookeeper/zk2/data:/data
      - /Users/hezhaoming/Documents/docker/zookeeper/zk2/logs:/datalog
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zoo3:2888:3888 server.3=zoo4:2888:3888
    networks:
      zk-net:
        ipv4_address: 172.19.0.2
  zoo3:
    image: zookeeper:3.5
    restart: always
    hostname: zoo3
    container_name: zoo3
    privileged: true
    ports:
      - 2185:2181
    volumes:
      - /Users/hezhaoming/Documents/docker/zookeeper/zk3/conf/zoo.cfg:/conf/zoo.cfg
      - /Users/hezhaoming/Documents/docker/zookeeper/zk3/data:/data
      - /Users/hezhaoming/Documents/docker/zookeeper/zk3/logs:/datalog
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo2:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zoo4:2888:3888
    networks:
      zk-net:
        ipv4_address: 172.19.0.3
  zoo4:
    image: zookeeper:3.5
    restart: always
    hostname: zoo4
    container_name: zoo4
    privileged: true
    ports:
      - 2186:2181
    volumes:
      - /Users/hezhaoming/Documents/docker/zookeeper/zk4/conf/zoo.cfg:/conf/zoo.cfg
      - /Users/hezhaoming/Documents/docker/zookeeper/zk4/data:/data
      - /Users/hezhaoming/Documents/docker/zookeeper/zk4/logs:/datalog
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo2:2888:3888 server.2=zoo3:2888:3888 server.3=0.0.0.0:2888:3888
    networks:
      zk-net:
        ipv4_address: 172.19.0.4
  kafka1:
    image: kafka
    restart: always
    hostname: kafka1
    container_name: kafka1
    privileged: true
    ports:
      - 9092:9092
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.112:9092 # 暴露在外的地址=
      KAFKA_ZOOKEEPER_CONNECT: zoo2:2181,zoo3:2181,zoo4:2181
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_BROKER_ID: 1
      KAFKA_MESSAGE_MAX_BYTES: 1000000
      # 删除策略
      KAFKA_LOG_RETENTION_HOURS: 1
      KAFKA_RETENTION_CHECK_INTERVAL_MS: 60000
      KAFKA_LOG_CLEANER_ENABLE: "false"
      # 每个topic只会存在一个partitions 和 1个replication
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 1
    volumes:
      - /Users/hezhaoming/Documents/docker/kafka/kafka1/logs:/kafka
    external_links:
      - zoo2
      - zoo3
      - zoo4
    networks:
      zk-net:
        ipv4_address: 172.19.0.14
  kafka2:
    image: kafka
    restart: always
    hostname: kafka2
    container_name: kafka2
    privileged: true
    ports:
      - 9093:9092
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.112:9093 # 暴露在外的地址=
      KAFKA_ZOOKEEPER_CONNECT: zoo2:2181,zoo3:2181,zoo4:2181
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_BROKER_ID: 2
      KAFKA_MESSAGE_MAX_BYTES: 1000000
      # 删除策略
      KAFKA_LOG_RETENTION_HOURS: 1
      KAFKA_RETENTION_CHECK_INTERVAL_MS: 60000
      KAFKA_LOG_CLEANER_ENABLE: "false"
      # 每个topic只会存在一个partitions 和 1个replication
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 1
    volumes:
      - /Users/hezhaoming/Documents/docker/kafka/kafka2/logs:/kafka
    external_links:
      - zoo2
      - zoo3
      - zoo4
    networks:
      zk-net:
        ipv4_address: 172.19.0.15

  kafka3:
    image: kafka
    restart: always
    hostname: kafka3
    container_name: kafka3
    privileged: true
    ports:
      - 9094:9092
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.0.112:9094 # 暴露在外的地址=
      KAFKA_ZOOKEEPER_CONNECT: zoo2:2181,zoo3:2181,zoo4:2181
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_BROKER_ID: 3
      KAFKA_MESSAGE_MAX_BYTES: 1000000
      # 删除策略
      KAFKA_LOG_RETENTION_HOURS: 1
      KAFKA_RETENTION_CHECK_INTERVAL_MS: 60000
      KAFKA_LOG_CLEANER_ENABLE: "false"
      # 每个topic只会存在一个partitions 和 1个replication
      KAFKA_NUM_PARTITIONS: 3
      KAFKA_DEFAULT_REPLICATION_FACTOR: 1
    volumes:
      - /Users/hezhaoming/Documents/docker/kafka/kafka3/logs:/kafka
    external_links:
      - zoo2
      - zoo3
      - zoo4
    networks:
      zk-net:
        ipv4_address: 172.19.0.16

  kafka-manager:
    image: kafka-manager
    restart: always
    container_name: kafa-manager
    hostname: kafka-manager
    privileged: true
    ports:
      - 9000:9000
    links:            # 连接本compose文件创建的container
      - kafka1
      - kafka2
      - kafka3
    external_links:   # 连接本compose文件以外的container
      - zoo2
      - zoo3
      - zoo4
    environment:
      ZK_HOSTS: zoo2:2181,zoo3:2181,zoo4:2181
      KAFKA_BROKERS: 192.168.0.112:9092,192.168.0.112:9093,192.168.0.112:9094
      APPLICATION_SECRET: letmein
      KM_ARGS: -Djava.net.preferIPv4Stack=true
    networks:
      zk-net:
        ipv4_address: 172.19.0.17

networks:
  zk-net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.19.0.1/24

6 启动容器

docker-compose up -d

7 测试登录

访问 xxx:9000
image.png


image.pngimage.png