docker-compose 搭建 kafka 集群


環境准備

kafka依賴zookeeper,所以搭建kafka需要先配置zookeeper。網格信息如下:

zookeeper 192.168.56.101:2181
kafka1 192.168.56.101:9092
kafka2 192.168.56.101:9093
kafka3 192.168.56.101:9094

 

 開始搭建

1、安裝 docker-compose

curl -L http://mirror.azure.cn/docker-toolbox/linux/compose/1.25.4/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

2、創建 docker-compose.yaml 文件 

version: '3.3'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    container_name: zookeeper
    ports:
      - 2181:2181
    volumes:
      - /data/zookeeper/data:/data
      - /data/zookeeper/datalog:/datalog
      - /data/zookeeper/logs:/logs
    restart: always
  kafka1:
    image: wurstmeister/kafka
    depends_on:
      - zookeeper
    container_name: kafka1
    ports:
      - 9092:9092
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 192.168.56.101:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.56.101:9092
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
      KAFKA_LOG_DIRS: /data/kafka-data
      KAFKA_LOG_RETENTION_HOURS: 24
    volumes:
      - /data/kafka1/data:/data/kafka-data
    restart: unless-stopped  
  kafka2:
    image: wurstmeister/kafka
    depends_on:
      - zookeeper
    container_name: kafka2
    ports:
      - 9093:9093
    environment:
      KAFKA_BROKER_ID: 2
      KAFKA_ZOOKEEPER_CONNECT: 192.168.56.101:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.56.101:9093
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9093
      KAFKA_LOG_DIRS: /data/kafka-data
      KAFKA_LOG_RETENTION_HOURS: 24
    volumes:
      - /data/kafka2/data:/data/kafka-data
    restart: unless-stopped
  kafka3:
    image: wurstmeister/kafka
    depends_on:
      - zookeeper
    container_name: kafka3
    ports:
      - 9094:9094
    environment:
      KAFKA_BROKER_ID: 3
      KAFKA_ZOOKEEPER_CONNECT: 192.168.56.101:2181
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.56.101:9094
      KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9094
      KAFKA_LOG_DIRS: /data/kafka-data
      KAFKA_LOG_RETENTION_HOURS: 24
    volumes:
      - /data/kafka3/data:/data/kafka-data
    restart: unless-stopped

參數說明:

  • KAFKA_ZOOKEEPER_CONNECT: zookeeper服務地址
  • KAFKA_ADVERTISED_LISTENERS: kafka服務地址
  • KAFKA_BROKER_ID: kafka節點ID,不可重復
  • KAFKA_LOG_DIRS: kafka數據文件地址(非必選。下面的volumes會將容器內文件掛載到宿主機上)
  • KAFKA_LOG_RETENTION_HOURS: 數據文件保留時間(非必選。缺省168小時)

3、啟動

docker-compose up -d

4、查看啟動的容器:docker-compose ps

出現如上結果表示啟動正常~

 

測試

1、登錄到 kafka1 容器內

docker-compose exec kafka1 bash

2、在/opt/kafka/config下可以看到配置文件(最主要的是server.properties)

3、切到 /opt/kakfa/bin 目錄下

cd /opt/kafka/bin/ 

4、創建一個 topic:名稱為first,3個分區,2個副本

./kafka-topics.sh --create --topic first --zookeeper 192.168.56.101:2181 --partitions 3 --replication-factor 2

注意:副本數不能超過brokers數(分區是可以超過的),否則會創建失敗。

5、查看 topic 列表

./kafka-topics.sh --list --zookeeper 192.168.56.101:2181 

6、查看 topic 為 first 的詳情

./kafka-topics.sh --describe --topic first --zookeeper 192.168.56.101:2181

7、在宿主機上,切到 /data/kafka1/data下,可以看到topic的數據

 說明:

  • 數據文件名稱組成:topic名稱_分區號
  • 由於是3個分區+兩個副本,所有會生成6個數據文件,不重復的分攤到3台borker上(查看kafka2和kafka3目錄下可驗證)

8、創建一個生產者,向 topic 中發送消息

./kafka-console-producer.sh --topic first --broker-list 192.168.56.101:9092 

9、登錄到 kafka2 或者 kafka3 容器內(參考第1步),然后創建一個消費者,接收 topic 中的消息

./kafka-console-consumer.sh --topic first --bootstrap-server 192.168.56.101:9092 --from-beginning

注意:--from-beginning表示從最開始讀消息,不加該參數則根據最大offset讀(從最新消息開始讀取)

 

其它命令

1、刪除topic

./kafka-topics.sh --delete --topic first --zookeeper 192.168.56.101:2181

刪除topic,不會立馬刪除,而是會先給該topic打一個標記。在/data/kafka1/data下可以看到:

 2、查看某個topic對應的消息數量

./kafka-run-class.sh  kafka.tools.GetOffsetShell --topic second --time -1 --broker-list 192.168.56.101:9092

3、查看所有消費者組

./kafka-consumer-groups.sh --bootstrap-server 192.168.56.101:9092 --list

4、查看日志文件內容(消息內容)

./kafka-dump-log.sh --files /data/kafka-data/my-topic-0/00000000000000000000.log --print-data-log

查看topic=my-topic的消息,日志文件為00000.log,--print-data-log表示查看消息內容(不加不會顯示消息內容)

5、修改kafka對應topic分區數(只能增加,不能減少)

./kafka-topics.sh --alter --topic al-test --partitions 2 --zookeeper 192.168.56.101:2181

6、修改kafka對應topic數據的保存時長(可以查看server.properties文件中log.retention.hours配置,默認168小時) 

./kafka-topics.sh --alter --zookeeper 192.168.56.101:2181 --topic al-test --config retention.ms=86400000

這里是改為24小時=24*3600*1000

 

 

總結

1、連接信息

producer     -->     broker-list
kafka集群   -->     zookeeper
consumer   -->     bootstrap-server 或 zookeeper

0.9版本以前,consumer是連向zookeeper,0.9版本以后,默認連接bootstrap-server

2、docker-compose.yaml配置文件,kafka.environment下的配置項,是對應server.properties文件下的配置的:

    borker.id   -->   KAFKA_BORKER_ID

    log.dirs     -->   KAFKA_LOG_DIRS

 

踩坑

1、修改docker-compose.yaml配置文件后,up啟動失敗,使用docker-compose logs 命令查看日志,包錯:

The broker is trying to join the wrong cluster. Configured zookeeper.connect may be wrong.

解決辦法:刪除宿主機上kafka掛載的數據文件(/data目錄下),然后docker-compose down,最后再up

  

 


免責聲明!

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



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