风暴并行性"task"是什么



我正试图通过阅读伟大的文章"理解storm拓扑的并行性"来学习twitter storm

然而,我对"任务"的概念有点困惑。任务是组件(喷口或螺栓)的运行实例吗?一个有多个任务的执行器实际上是说同一个组件被执行器执行了多次,我是对的吗?

此外,在一般的并行性意义上,Storm将为喷口或螺栓生成一个专用线程(执行器),但具有多个任务的执行器(线程)对并行性有何贡献?我认为在一个线程中有多个任务,因为一个线程是按顺序执行的,这只会使线程成为一种"缓存"资源,从而避免为下一个任务运行生成新的线程。我说得对吗?

在花更多的时间调查之后,我可能会自己澄清这些困惑,但你知道,我们都喜欢斯塔克弗洛;-)

提前谢谢。

免责声明:我写了你在上面的问题中提到的文章

然而,我对"任务"的概念有点困惑。任务是组件(喷口或螺栓)的运行实例吗?一个有多个任务的执行器实际上是说同一个组件被执行器执行了多次,我是对的吗?

是的,是的。

此外,在一般的并行性意义上,Storm将为喷口或螺栓生成一个专用线程(执行器),但具有多个任务的执行器(线程)对并行性的贡献是什么?

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

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

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

根据定义,存在CCD_ 2的不变量。

因此,每个执行器线程有2个以上任务的一个原因是,将来可以通过storm rebalance命令灵活地扩展/扩展拓扑,而不会使拓扑离线。例如,假设你一开始有一个由15台机器组成的Storm集群,但已经知道下周还会增加10个盒子。在这里,您可以选择在15个初始盒子上已经有25台机器的预期并行级别上运行拓扑(当然,这比25个盒子慢)。一旦集成了额外的10个盒子,您就可以storm rebalance拓扑结构,在没有任何停机时间的情况下充分利用所有25个盒子。

每个执行器运行2个以上任务的另一个原因是(主要是功能性的)测试。例如,如果您的开发机器或CI服务器的功能仅足以运行2个执行器以及机器上运行的所有其他任务,那么您仍然可以运行30个任务(此处:每个执行器15个),以查看自定义Storm分组等代码是否按预期工作。

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

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

最新更新