根據官網介紹,storm內置了4種調度器
分別是: DefaultScheduler, IsolationScheduler, MultitenantScheduler, ResourceAwareScheduler.
下面分別進行介紹,
DefaultScheduler是storm默認調度器,默認時,topology內的組件將隨機分配至已有資源上。
IsolationScheduler
IsolationScheduler為資源隔離調度器,這個調度器是為了使得topology對服務器節點進行獨占。使得不同的topology發布時,占用不同的服務器資源,彼此形成物理隔離。
使用如下:
編輯nimbus所在服務器下的storm.yaml,添加如下配置:
表明,我發布名字為zc1的topology時,此拓撲將獨占兩臺服務器,zc2的topology將獨占一臺服務器。
之前我一共配備了3臺服務器作為從節點。發布后效果如下:
由圖可見,雖然我的服務資源里還有worker資源,但是由于zc1,zc2已經獨占了3臺服務器,所以我的otherTopology無法分配到計算資源。
MultitenantScheduler
官網并沒有對此調度器進行說明,只是留下了這個類在github上的位置,我們通過閱讀此類的源碼,也可以分析出此類的調度規則。
根據代碼可知,這種調度模式會為每個topology發布者構造一個自己專屬的隔離資源池,之后會通過遍歷topology集,通過為資源池分配topology關聯來分配節點。
驗證:
由圖可見,root分配第三個topology時,已經無法分配。(注:storm這個功能不太穩定,不建議使用)