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

我试图通过了解伟大的文章“ 了解风暴拓扑的并行性 ”

不过,我对“任务”的概念有点困惑。 任务是组件的运行实例(喷嘴或螺栓)? 实际上有多个任务的执行者是说执行者多次执行同一个组件,我是否正确?

此外,在一般的并行性意义上,Storm会产生一个专门的线程(执行器)来实现喷嘴或螺栓,但是执行器(线程)有多个任务对并行性有什么贡献? 我认为在一个线程中有多个任务,因为一个线程按顺序执行,只会使线程成为一种“caching”的资源,避免为下一个任务运行产生新的线程。 我对么?

在花费更多时间调查之后,我可以自己澄清那些困惑,但是你知道,我们都喜欢stackoverflow 😉

提前致谢。

免责声明:我写了你在上面的问题中引用的文章 。

不过,我对“任务”的概念有点困惑。 任务是组件的运行实例(喷嘴或螺栓)? 实际上有多个任务的执行者是说执行者多次执行同一个组件,我是否正确?

是的,是的。

此外,在一般的并行性意义上,Storm会产生一个专门的线程(执行器)来实现喷嘴或螺栓,但是执行器(线程)有多个任务对并行性有什么贡献?

每个执行者执行多个任务不会增加并行性 – 执行者总是有一个线程用于其所有任务,这意味着任务在执行程序上连续运行。

正如我在文章中写的那样,请注意:

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

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

因此,每个执行程序线程执行2个任务的一个原因是,您可以灵活地通过未来的storm rebalance命令来扩展/扩展拓扑,而无需使拓扑脱机。 例如,假设你从一个由15台机器组成的Storm集群开始,但是已经知道下一个星期还会增加10个盒子。 在这里,您可以select在已经在15个初始盒子(当然慢于25盒子)的25台机器的预期并行水平上运行拓扑结构。 一旦额外的10个盒子被集成,你就可以storm rebalance拓扑结构,充分利用所有的25个盒子,而不会造成任何停机。

每个执行者运行2+任务的另一个原因是(主要是function性)testing。 例如,如果你的开发机器或CI服务器只有足够强大的运行能力,比如说2个执行器以及机器上运行的所有其他东西,那么仍然可以运行30个任务(这里是每个执行器15个),以查看代码您的自定义风暴分组按照预期工作。

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

PS:请注意,风暴实际上会在幕后产生更multithreading 。 例如,每个执行者都有自己的“发送线程”,负责处理传出的元组。 还有“系统级”的后台线程,比如与“你的”线程一起运行的元组。 IIRC除了“你的”线程外,Storm UI还会计算这些线程。