一、集羣如何啓動,任務如何執行?
java -server nimbus,supervisor
client--->createTopology(序列化)--->提交jar到nimbusinbox--->nimibus分配任務(task總數/worker數)---寫到zk。
啓動worker<----識別本身的任務<----supervisor----->watch----zk
啓動Spout/Bolt<----TaskInfo<-----worker---->task
二、集羣架構中各個模塊如何啓動?
nimbus:用戶啓動
supervisor:用戶啓動
worker:supervisor啓動
Task:worker啓動
三、集羣如何通訊?
集羣架構中的各個模塊是如何通訊的?外部通訊
拓撲程序中的各個Task是如何通訊的?內部通訊
四、Worker與topology
一個worker只屬於一個topology,每一個worker中運行的task只能屬於這個topology。反之,一個topology包含多個worker,其實就是這個topology運行在多個worker上。
一個topology要求worker數量若是不被知足,集羣在分配任務時,根據現有的worker先運行topology。若是當前集羣中的worker數量爲0,那麼最新提交的topology將只會標記active,
不會運行,只有當集羣有了空閒資源纔會運行。
五、如何指定驅動類中每一個組件的併發度數量?如何設置worker數量?
1,根據上游的數據量來設置spout的併發度。
2,根據業務複雜度和execute方法執行時間來設置bolt併發度。
3,根據集羣的可用資源來配置,通常狀況下70%的資源使用率。
4,worker的數量理論上根據程序併發度的task數據來劃分,在實際業務場景中,須要反覆調整。java
六、ack-fail機制
1,須要ackfail時,請爲每一個tuple生成一個messageId,這個messageId是用來標識你關心的tuple,當這個tuple被徹底處理時,storm框架會調用spout的ack方法,不然調用fail。至於你的
消息是否重發,徹底由本身處理。
2,在Spout有併發度的狀況下,storm會根據tuple最開始的所屬spout taskId,通知相應的spoutTask。
3,在流式計算中topology的bolt組件能夠配置多個的,在每一個環節中,都須要bolt組件顯示的高速storm框架,本身對當前接受的這個tuple處理完成。
架構