近期在對已有項目進行升級維護時時需要還原生產環境中關於kafka數據訂閱的問題,但是又不想在自己電腦上裝一堆東西,所以想到了用Docker安裝kafka用來還原生產環境進行測試。
1.安裝zookeeper
啓動Docker服務,打開CMD窗口或powershell窗口。
搜索zookeeper鏡像
docker search zookeeper
拉取zookeeper鏡像
docker pull wurstmeister/zookeeper
創建並啓動zookeeper容器
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper
一切看起來很順利,到這裏卻卡殼了,這一步執行始終不成功,找了半天資料才發現是zookeeper默認使用是2181端口被佔用了,佔用者又恰好是Docker所依賴的Hyper-V虛擬化服務。解決辦法看下面了。
1.1 補充-解決2181端口占用問題
由於Hyper-V佔用的2181端口,所以必須將Hyper-V停掉後把2181釋放出來,但是沒了Hyper-V,Dokcer就不能運行了,所以改完還要將Hyper-V啓動。
查看端口占用情況
netsh interface ipv4 show excludedportrange protocol=tcp
禁用Hyper-V服務
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V
解除2181端口限制
netsh int ipv4 add excludedportrange protocol=tcp startport=2181 numberofports=1
啓用Hyper-V服務
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All
檢查確認端口占用情況
netsh interface ipv4 show excludedportrange protocol=tcp
問題解決,zookeeper容器順利創建並啓動
2.安裝kafka
搜索鏡像kafka
docker search kafka
拉取kafka鏡像
docker pull wurstmeister/kafka
創建並啓動kafka容器,連接到上一步創建的zookeeper
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=localhost --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka
kafka容器啓動成功,在Docker的Dashboard中可以看到已啓動的容器。
3.連接zookeeper
安裝客戶端工具kafka-tool,連接zookeeper,創建topic用於測試。