用户提交的 Topology 中的 components 可分成三类:输入层、计算层、输出层,而每一层对资源的需求都不一样[8]:
(1)输入层:如果数据来自于磁盘,则需要更多的磁盘资源;若来自于网络,则需要更多的带宽资源。(2)计算层:该层任务的特点是要进行大量的计算,消耗 CPU 资源,需要更多的 CPU 和内存。
(3)输出层:类似于输入层,可能需要更多的磁盘将数据存入本地或者是更多网络带宽将数据传输给别的服务器。
Storm 默认调度器在调度时没能将集群节点所拥有的资源和任务的实际需求相结合,以致没有取得很好的任务调度效果。另外,采用默认调度,在判断资源分配是否均匀时,几乎只考虑了节点的 CPU 使用情况,而节点其他类型的资源,比如内存、磁盘、网络等未做考虑。若一个 component 属于 I/O 密集型的输入层,这种类型任务的特点是对网络、磁盘资源消耗很多,CPU资源消耗很少,这类任务执行期间 99%的时间都花在I / O 上,花在 CPU 上的时间很少。