根据官网介绍,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这个功能不太稳定,不建议使用)
网友评论