Storm并行中的“任务”是什么?

时间:2013-06-23 03:23:19

标签: parallel-processing apache-storm topology

我正在尝试通过关注伟大的文章“Understanding the parallelism of a Storm topology

来学习Twitter风暴

然而,我对“任务”的概念感到有点困惑。任务是组件的运行实例(spout还是bolt)?具有多个任务的执行程序实际上是说执行程序多次执行相同的组件,我是否正确?

此外,在一般的并行意义上,Storm会为一个spout或bolt生成一个专用线程(执行器),但是由具有多个任务的执行者(线程)对并行性做出了什么贡献?我认为在一个线程中有多个任务,因为一个线程按顺序执行,只会使该线程成为一种“缓存”资源,从而避免为下一个任务运行产生新线程。我对么?

我可以在花更多时间调查之后自己清除这些困惑,但是你知道,我们都喜欢stackoverflow; - )

提前致谢。

1 个答案:

答案 0 :(得分:69)

免责声明:我在上述问题中提到了您the article

  

然而,我对“任务”的概念感到有点困惑。任务是组件的运行实例(spout还是bolt)?具有多个任务的执行程序实际上是说执行程序多次执行相同的组件,我是否正确?

是的,是的。

  

此外,在一般的并行意义上,Storm会为spout或bolt生成一个专用线程(执行程序),但是由具有多个任务的执行程序(线程)对并行性做出了什么贡献?

每个执行程序运行多个任务不会提高并行度 - 执行程序总是有一个用于其所有任务的线程,这意味着任务在执行程序上串行运行。

正如我在文章中所写,请注意:

  • 拓扑启动后,可以更改执行程序线程的数量(请参阅storm rebalance命令)。
  • 拓扑的任务数量是静态的。

根据定义,有#executors <= #tasks的不变量。

因此,每个执行程序线程拥有2个以上任务的一个原因是,您可以灵活地通过storm rebalance命令扩展/扩展拓扑,而无需使拓扑脱机。例如,假设你从一个拥有15台机器的Storm集群开始,但已经知道下周将再添加10个盒子。在这里,您可以选择以15个初始盒子上已有的25台机器的预期并行度级别运行拓扑(当然慢于25个盒子)。一旦集成了额外的10个盒子,您就可以storm rebalance拓扑结构,充分利用所有25个盒子而无需停机。

每个执行程序运行2+个任务的另一个原因是(主要是功能)测试。例如,如果你的开发机器或CI服务器只有足够强大的功能来运行,比如2个执行器和机器上运行的所有其他东西,你仍然可以运行30个任务(这里:每个执行器15个)来查看代码是否如您的自定义Storm分组正在按预期工作。

在实践中,我们通常每个执行者运行1个任务。

PS:请注意,Storm实际上会产生a few more threads behind the scenes。例如,每个执行程序都有自己的“发送线程”,负责处理传出的元组。例如,还存在“系统级”后台线程。与“你的”线程一起运行的acup元组。 IIRC除了“你的”线程之外​​,Storm UI还会计算那些acking线程。