Docker部署zookeeper集群和kafka集群,實現互聯


本文介紹在單機上通過docker部署zookeeper集群和kafka集群的可操作方案。

0、准備工作

創建zk目錄,在該目錄下創建生成zookeeper集群和kafka集群的yml文件,以及用於在該目錄下掛載zookeeper和kafka的主要目錄。

1、創建docker網絡,用於zookeeper和kafka互聯

docker network create --driver bridge --subnet 172.168.0.0/16 --gateway 172.168.0.1  zk_network

2、通過docker-compose部署zookeeper集群

在zk目錄下創建zookeeper.yml,編輯后保存,內容如下:

version: '3.1'

services:
  zoo1:
    image: zookeeper:3.4.11
    restart: always
    hostname: zoo1
    container_name: zoo1
    ports:
      - 2181:2181
    volumes:
    - "./zoo1/data:/data"
    - "./zoo1/datalog:/datalog"
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:
      zk_default:
        ipv4_address: 172.168.0.2
        
  zoo2:
    image: zookeeper:3.4.11
    restart: always
    hostname: zoo2
    container_name: zoo2
    ports:
      - 2182:2181
    volumes:
    - "./zoo2/data:/data"
    - "./zoo2/datalog:/datalog"
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:
      zk_default:
        ipv4_address: 172.168.0.3

  zoo3:
    image: zookeeper:3.4.11
    restart: always
    hostname: zoo3
    container_name: zoo3
    ports:
      - 2183:2181
    volumes:
    - "./zoo3/data:/data"
    - "./zoo3/datalog:/datalog"
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:
      zk_default:
        ipv4_address: 172.168.0.4
        
networks:
  zk_default:
    external:
      name: zk_network         

注意,zookeeper使用的是官方3.4.11版本。保存后,執行docker-compose命令完成部署,f參數用於指定yml文件。

docker-compose -f zookeeper.yml up -d

為了驗證zookeeper集群是否成功部署,需要進入各容器進行驗證。

docker exec -it zoo3 /bin/sh

進入容器SSH后,執行zkServer.sh status命令查看狀態,重點查看Mode模式。

/zookeeper-3.4.11 # zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Mode: leader

我部署后,三個狀態分別是:follower,follower,leader。

3、通過docker-compose部署kafka集群

在zk目錄下創建kafka.yml,編輯后保存,內容如下:

version: '2'

services:
  kafka1:
    image: wurstmeister/kafka
    restart: always
    hostname: kafka1
    container_name: kafka1
    ports:
    - "9092:9092"
    - "9992:9992"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.1.16
      KAFKA_ADVERTISED_PORT: 9092
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      JMX_PORT: 9992 
    volumes:
    - ./kafka1/logs:/kafka
    external_links:
    - zoo1
    - zoo2
    - zoo3
    networks:
      zk_default:
        ipv4_address: 172.23.0.7

  kafka2:
    image: wurstmeister/kafka
    restart: always
    hostname: kafka2
    container_name: kafka2
    ports:
    - "9093:9092"
    - "9993:9993"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.1.16
      KAFKA_ADVERTISED_PORT: 9093
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      JMX_PORT: 9993
    volumes:
    - ./kafka2/logs:/kafka
    external_links:
    - zoo1
    - zoo2
    - zoo3
    networks:
      zk_default:
        ipv4_address: 172.23.0.8

  kafka3:
    image: wurstmeister/kafka
    restart: always
    hostname: kafka3
    container_name: kafka3
    ports:
    - "9094:9092"
    - "9994:9994"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.1.16
      KAFKA_ADVERTISED_PORT: 9094
      KAFKA_ZOOKEEPER_CONNECT: zoo1:2181,zoo2:2181,zoo3:2181
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      JMX_PORT: 9994
    volumes:
    - ./kafka3/logs:/kafka
    external_links:
    - zoo1
    - zoo2
    - zoo3
    networks:
      zk_default:
        ipv4_address: 172.23.0.9
 
networks:
  zk_default:
    external:
      name: zk_network

 保存后,執行docker-compose命令完成部署,f參數用於指定yml文件。

docker-compose -f kafka.yml up -d

4、

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM