storm并行

storm实现并行的三个重要元素

worker:supervisor起的jvm节点,进程级别的计算资源

executor:worker内的线程,线程级的计算资源,每个worker可起多个executor

task:spout/bolt实例,也就是计算任务

一个storm集群,启动,并发布了topology后,大致是如下情况:

storm并行_第1张图片

配置storm安装目录下,storm.yaml中的supervisor.slots.ports可指定一个supervisor最多可启动的worker数量

storm并行_第2张图片

上图中,配置supervisor最多可启动6个worker节点。

一个拓扑需要多少计算资源,是发布之前在代码内进行配置,nimbus发布topology之后,会根据topology内各组件情况,分配至supervisor。

其中,executor,tasks是topology的主要配置项,topology的每个spout/bolt组件,都会配置executor,以及tasks,用以表明,此组件需要几个线程执行,执行多少个tasks。

如下例:


storm并行_第3张图片

笔者构建的topology共有三个组件

spout:streamMaking   

bolt:step1Bolt

bolt:step2Bolt

各项并行配置为:

streamMaking:并行数4,

step1Bolt:并行数2,task4,也就是发布后,分配给step1Bolt的2个executor,每个executor将并发执行2个step1Bolt实例,一共执行step1Bolt4个实例

step2Bolt:并行数为1

可见,我的topology共需要7个线程资源,共会启动9个task实例。

假如,我共有两个supervisor节点,每个节点起了2个worker实例,

那么上述topology发布后,在storm中大致是如下情况:

storm并行_第4张图片

storm UI监控展示如下:


storm并行_第5张图片


合理的配置使用executor,以及并发task数,是实现storm并行的关键,当然,配置时,需要根据系统的使用资源,合理配置。

storm集群提供了worker进程级别的计算资源,我们在发布topology时,通常不希望不同topology的组件task分配至同一个worker内的不同线程执行,如何使用storm进行合理的资源隔离,将会在下一篇章进行介绍。

你可能感兴趣的:(storm并行)