docker搭建kafka集羣實踐

前言

本文主要介紹瞭如何通過docker搭建一個可以用於生產環境的kafka集羣。

kafka集羣使用了3個節點,依賴zookeeper進行協調,所以會同時搭建一套3節點的zookeeper集羣。

準備工作

本次實踐準備了三臺CentOS8服務器,ip地址如下:

192.168.1.34

192.168.1.36

192.168.1.73

實踐目標

在每臺機器上安裝一個zookeeper和一個kafka組成整體的集羣。

前提條件

三臺機器上已經安裝了docker和docker-compose。

docker的安裝本文不會介紹,docker-compose的安裝如下:

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version

 

說明:不一定非要安裝docker-compose,此處安裝docker-compose是因爲在本文的實踐中使用了docker-compose,你完全可以把yml文件翻譯成docker run命令,來完成整個集羣的搭建工作。

開啓防火牆端口

正常使用kafka集羣需要開放一些端口,如果你的機器沒有開啓防火牆,可以忽略。

開啓端口命令如下:

firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --zone=public --add-port=9092/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

 

搭建zookeeper集羣

進入三臺服務器,創建目錄/home/zk,並創建zk.yml文件

mkdir /home/zk
cd /home/zk
touch zk.yml

zk.yml是docker-compose的編排文件,三臺服務器的zk.yml文件內容分別如下:

192.168.1.34中的zk.yml

version: '3.1'

services:
  zk1:
    image: 'zookeeper:3.7'
    restart: always
    hostname: zoo1
    container_name: zk1
    network_mode: host
    ports:
      - 2181:2181
      - 2888:2888
      - 3888:3888
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

 

192.168.1.36中的zk.yml

version: '3.1'

services:
  zk2:
    image: 'zookeeper:3.7'
    restart: always
    hostname: zoo2
    container_name: zk2
    network_mode: host
    ports:
      - 2181:2181
      - 2888:2888
      - 3888:3888
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

 

192.168.1.73中的zk.yml

version: '3.1'

services:
  zk3:
    image: 'zookeeper:3.7'
    restart: always
    hostname: zoo3
    container_name: zk3
    network_mode: host
    ports:
      - 2181:2181
      - 2888:2888
      - 3888:3888
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=192.168.1.34:2888:3888;2181 server.2=192.168.1.36:2888:3888;2181 server.3=192.168.1.73:2888:3888;2181

 

分別在三臺機器的/home/zk目錄下執行以下命令,開啓zk集羣

docker-compose -f zk.yml up -d

 

進入容器內部查看是否啓動成功:

docker exec -it zk1 bash
zkServer.sh status

docker exec -it zk2 bash
zkServer.sh status

docker exec -it zk3 bash
zkServer.sh status

 

如果啓動成功,可以看到如下內容:

 

 

 

至此,一個部署在三臺服務器上的3節點zookeeper集羣就搭建成功了。

搭建kafka集羣

進入三臺服務器,創建目錄/home/kafka,並創建zk.yml文件

mkdir /home/kafka
cd /home/kafka
touch kafka.yml

 

kafka.yml是docker-compose的編排文件,三臺服務器的kafka.yml文件內容分別如下:

192.168.1.34中的kafka.yml

version: '2'

services:
  k1:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k1
    network_mode: host
    ports:
      - 9092:9092
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=1
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.34:9092
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_CFG_NUM_PARTITIONS=3
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3      

 

192.168.1.36中的kafka.yml

version: '2'

services:
  k2:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k2
    network_mode: host
    ports:
      - 9092:9092
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=2
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.36:9092
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_CFG_NUM_PARTITIONS=3
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3

 

192.168.1.73中的kafka.yml

version: '2'

services:
  k3:
    image: 'bitnami/kafka:3.2.0'
    restart: always
    container_name: k3
    network_mode: host
    ports:
      - 9092:9092
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
      - ALLOW_PLAINTEXT_LISTENER=yes
      - KAFKA_BROKER_ID=3
      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.73:9092
      - KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
      - KAFKA_CFG_NUM_PARTITIONS=3
      - KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3

 

分別在三臺機器的/home/kafka目錄下執行以下命令,開啓kafka集羣

docker-compose -f kafka.yml up -d

 

創建topic並驗證消費者和生產者

進入192.168.1.34的kafka容器內部

docker exec -it k1 bash
cd /opt/bitnami/kafka/bin
./kafka-topics.sh --create --bootstrap-server 192.168.1.34:9092 --replication-factor 1 --partitions 3 --topic chattest

 

進入其他機器的kafka容器內部,查看是否存在剛創建的topic,如果存在則說明Kafka集羣搭建成功。

docker exec -it k2 bash
kafka-topics.sh --list --bootstrap-server 192.168.1.36:9092
docker exec -it k3 bash
kafka-topics.sh --list --bootstrap-server 192.168.1.73:9092

 

搭建kafka-manager

kafka-manager是一個kafka集羣的可視化監控工具,在一臺機器上安裝即可,我們選擇在192.168.1.36這臺服務器上安裝

進入目錄/home/kafka,並創建manager.yml文件

cd /home/kafka
touch manager.yml

 

manager.yml是docker-compose的編排文件,內容如下:

version: '3.0'

services:
  kafka-manager:
    image: hlebalbau/kafka-manager
    restart: always
    container_name: kafka-manager
    hostname: kafka-manager
    network_mode: host
    ports:
    - 9000:9000
    environment:
      ZK_HOSTS: 192.168.1.34:2181,192.168.1.36:2181,192.168.1.73:2181
      KAFKA_BROKERS: 192.168.1.34:9092,192.168.1.36:9092,192.168.1.73:9092
      APPLICATION_SECRET: letmein
      KAFKA_MANAGER_AUTH_ENABLED: "true" # 開啓驗證
      KAFKA_MANAGER_USERNAME: "admin" # 用戶名
      KAFKA_MANAGER_PASSWORD: "admin" # 密碼
      KM_ARGS: -Djava.net.preferIPv4Stack=true

 

/home/kafka目錄下執行以下命令,開啓監控工具

docker-compose -f manager.yml up -d

 

瀏覽器訪問192.168.1.36:9000,輸入用戶名密碼即可進入監控頁面。

按照下圖操作增加對kafka集羣的監控。

 

 

 

 

 

大功告成了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章