storm并行
storm实现并行的三个重要元素
worker:supervisor起的jvm节点,进程级别的计算资源
executor:worker内的线程,线程级的计算资源,每个worker可起多个executor
task:spout/bolt实例,也就是计算任务
一个storm集群,启动,并发布了topology后,大致是如下情况:
配置storm安装目录下,storm.yaml中的supervisor.slots.ports可指定一个supervisor最多可启动的worker数量
上图中,配置supervisor最多可启动6个worker节点。
一个拓扑需要多少计算资源,是发布之前在代码内进行配置,nimbus发布topology之后,会根据topology内各组件情况,分配至supervisor。
其中,executor,tasks是topology的主要配置项,topology的每个spout/bolt组件,都会配置executor,以及tasks,用以表明,此组件需要几个线程执行,执行多少个tasks。
如下例:
笔者构建的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 UI监控展示如下:
合理的配置使用executor,以及并发task数,是实现storm并行的关键,当然,配置时,需要根据系统的使用资源,合理配置。
storm集群提供了worker进程级别的计算资源,我们在发布topology时,通常不希望不同topology的组件task分配至同一个worker内的不同线程执行,如何使用storm进行合理的资源隔离,将会在下一篇章进行介绍。