Docker 部署kafka + zookeeper叢集
阿新 • • 發佈:2021-06-10
一、部署zookeeper叢集(三臺伺服器同樣的操作)
1、下載zookeeper映象(本文使用3.7)
docker pull zookeeper:3.7
2、建立掛載配置資料夾和資料資料夾
#建立掛載資料夾 sudo mkdir /data/zk/{conf,data} -p #賦值許可權 sudo chmod 777 conf
3、建立配置檔案和myid
#進入conf資料夾
cd conf #建立配置檔案 vim zoo.cfg #檔案內容 dataDir=/data dataLogDir=/datalog tickTime=2000 initLimit=5 syncLimit=2 autopurge.snapRetainCount=3 autopurge.purgeInterval=0 maxClientCnxns=60 standaloneEnabled=true admin.enableServer=true
quorumListenOnAllIPs=true
#繫結服務ID server.1=192.168.79.50:2888:3888;2181 server.2=192.168.79.51:2888:3888;2181 server.3=192.168.79.52:2888:3888;2181 #進入data資料夾 cd data #建立myid檔案 vim myid #內容(設定叢集下,服務ID,同一個叢集不能重複)1
注:如果出現如下錯誤:
修改配置檔案,加上該項:
quorumListenOnAllIPs=true
主要是會影響ZAB協議和FastLeaderElection協議。
官網原文如下:
quorumListenOnAllIPs
When set to true the ZooKeeper server will listen for connections from its peers on all available IP addresses, and not only the address configured in the server list of the configuration file. It affects the connections handling the ZAB protocol and the Fast Leader Election protocol. Default value is false
4、啟動容器
#執行容器 docker run -d -p 8080:8080 -p 2181:2181 -p 2888:2888 -p 3888:3888 -v /data/zk/conf/zoo.cfg:/conf/zoo.cfg -v /data/zk/data:/data --restart always --name=myzk zookeeper:3.7 #8080可不暴露,暴露後可通過URL檢視zk狀態資訊等 http://192.168.79.52:8080/commands/stats #進入容器 docker exec -it myzk /bin/bash #檢視狀態 zkServer.sh status
二、部署fafka叢集
1、下載映象(本文使用 2.12-2.5.0)
docker pull wurstmeister/kafka:2.12-2.5.0
2、執行容器
#如果是docker安裝kafka,-e的引數必須新增,不能從配置檔案掛載 docker run -d -p 9092:9092 -e KAFKA_BROKER_ID=3 -e KAFKA_ZOOKEEPER_CONNECT=192.168.79.50:2181,192.168.79.51:2181,192.168.79.52:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.79.52:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 --restart always --name=mykafka wurstmeister/kafka:2.12-2.5.0
到這一步kafka叢集就安裝成功了,後續寫了下配置資訊說明,如果對配置有修改的,可進行掛載執行
3、建立掛載資料夾(還可以掛著log和data,這裡不詳細說明,步驟一樣的)
#建立掛載資料夾 sudo mkdir /data/kafka/conf -p #賦值許可權 sudo chmod 777 conf
4、建立配置檔案並編寫
vim server.properties #檔案內容 #當前機器在叢集中的唯一標識,和zookeeper的myid性質一樣 broker.id=1 #當前kafka對外提供服務的埠預設是9092 port=9092 #伺服器監聽地址 listeners=PLAINTEXT://0.0.0.0:9092 #對外暴露的服務埠 advertised.listeners=PLAINTEXT://192.168.79.52:9092 #處理網路請求的最大執行緒數 num.network.threads=3 #處理磁碟I/O的執行緒數 num.io.threads=8 # socket的傳送緩衝區(SO_SNDBUF) socket.send.buffer.bytes=102400 # socket的接收緩衝區 (SO_RCVBUF) socket.receive.buffer.bytes=102400 # socket請求的最大位元組數。為了防止記憶體溢位,message.max.bytes必然要小於java的堆疊大小 socket.request.max.bytes=104857600 #預設的分割槽數,一個topic預設1個分割槽數 num.partitions=1 num.recovery.threads.per.data.dir=1 offsets.topic.replication.factor=1 transaction.state.log.replication.factor=1 transaction.state.log.min.isr=1 #日誌存放目錄,多個目錄使用逗號分割 log.dirs=/kafka/kafka-logs-3dff9a1f9fbc #日誌儲存時間 (hours|minutes),預設為7天(168小時)。超過這個時間會根據policy處理資料。bytes和minutes無論哪個先達到都會觸發。 log.retention.hours=168 #控制日誌segment檔案的大小,超出該大小則追加到一個新的日誌segment檔案中(-1表示沒有限制) log.segment.bytes=1073741824 #日誌片段檔案的檢查週期,檢視它們是否達到了刪除策略的設定(log.retention.hours或log.retention.bytes) log.retention.check.interval.ms=300000 #Zookeeper quorum設定。如果有多個使用逗號分割 zookeeper.connect=192.168.79.50:2181,192.168.79.51:2181,192.168.79.52:2181 #連線zk的超時時間 zookeeper.connection.timeout.ms=18000 group.initial.rebalance.delay.ms=0
5、安裝kafka管理介面
#下載映象(3.0.0.4) docker pull kafkamanager/kafka-manager:3.0.0.4 #啟動容器 docker run -d -p 9000:9000 -e ZK_HOSTS="192.168.79.50:2181,192.168.79.51:2181,192.168.79.52:2181" --restart always --name=kafka-manager kafkamanager/kafka-manager:3.0.0.4
6、訪問kafka管理端 http://192.168.79.52:9000/
新增zk叢集:
檢視叢集的Brokers,可以看到kafka的叢集資訊:
管理端的具體使用就不介紹了,有興趣的自己度娘查吧