背景
Storm是一個已經(jīng)被業(yè)界廣泛應用的流處理引擎,主要特點是實時性強,編程模型和接口簡單,易于快速實現(xiàn)流處理功能。在目前的主流大數(shù)據(jù)平臺軟件棧中(如Hortonworks的HDP和Cloudera的CDH),Storm的部署方案都是單實例部署,即部署的是一個Storm集群,租戶的權限控制交給Ranger管理。這樣的優(yōu)點是部署和管理簡單,但是因為storm的資源管理并沒有基于大數(shù)據(jù)平臺的資源管理方案,如果將storm計算節(jié)點和yarn NM復用,有可能發(fā)生資源使用問題。此外,多租戶之間的資源使用也容易發(fā)生搶占問題。因此,關于storm的此類問題,業(yè)界目前有兩種解決思路: 一是Yarn的長時服務,目前的做法是基于Slider的方案。另一種是借助了PASS, 在Docker中運行Storm,采用多實例的做法,不同的租戶使用不同的storm實例,從而做到權限和資源的隔離。
正是基于此,本文嘗試使用k8s example中的storm示例,將Storm運行在K8s集群中的Docker.
準備條件
-
部署K8s集群
k8s節(jié)點 - 準備Zookeeper和Storm image
可以自己編寫dockerFile,也可以從網(wǎng)上下載別人已經(jīng)編譯好的.(因為Storm是一個通用組件,網(wǎng)上這類比較多)。本文使用mattf/storm的版本.
1. 部署并啟動ZK
- 使用zookeeper的編排,啟動pod執(zhí)行
kubectl create -f zookeeper.json
zookeeper.json 為 zookeeper.json
- 創(chuàng)建ZK的service
kubectl create -f zookeeper-service.json
zookeeper-service.json為 zookeeper-service.json
執(zhí)行完成后,可以查看zk是否正常創(chuàng)建和運行。
- 查看Pod是否正常運行
kubectl get pods

- 查看ZK service是否正常運行
kubectl get services|grep zookeeper

- 查看ZK 端口2181是否可以被訪問
notes: zk的訪問IP和端口可以在ZK的k8s服務中查看,如上圖,本文集群環(huán)境的zk地址為: 10.108.175.212:2181
echo ruok | nc 10.108.175.212 2181; echo

2. 部署Storm Nimbus服務
- 同部署ZK一樣,首先創(chuàng)建Nimbus pod
kubectl create -f storm-nimbus.json
storm-nimbus.json為 storm-nimbus.json
- 然后創(chuàng)建Nimbus Service
kubectl create -f storm-nimbus-service.json
storm-nimbus-service.json為 storm-nimbus-service.json
- 檢查nimbus pod是否正常運行
kubectl get pods|grep nimbus
- 檢查nimbus service是否正常運行
kubectl get services|grep nimbus
3. 部署Storm Worker
kubectl create -f storm-worker-controller.json
storm-worker-controller.json為storm-worker-controller.json
4. 運行Storm topology
- 啟動一個交互式的docker
docker run -it -w /opt/apache-storm mattf/storm-base sh

- 本地模式運行Storm topology
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.3.jar storm.starter.RollingTopWords
-
remote模式運行Storm topology
- 配置ZK和nimbus
/configure.sh 10.108.175.212 10.100.140.82
- 提交storm topology
./bin/storm jar examples/storm-starter/storm-starter-topologies-0.9.3.jar storm.starter.RollingTopWords production-topology remote
- 在Storm中查看提交的topology
./bin/storm list

這樣就完成了簡單的在Docker 里的Storm部署和運行。
注意: 本文只是簡單的使用K8s管理調度Storm Docker。尚未涉及資源的劃分和網(wǎng)絡的隔離,后續(xù)將會進一步探討。
