声明:我写了the article你引用你的问题上面。
但是我对“任务”的概念有些困惑。任务是组件的运行实例(喷嘴还是螺栓)?实际上有多个任务的执行者是说执行者多次执行相同的组件,我是否正确?
是的,是的。
此外,在一般的并行性意义上,Storm会为喷口或螺栓产生一个专用线程(执行程序),但是具有多个任务的执行程序(线程)对并行性有什么贡献?
运行每执行多个任务不增加并行的水平 - 执行人总是有它使用其所有的任务,这意味着对任务的执行顺序运行一个线程。
正如我在文章中写道:请注意:
- 执行线程的数量是可以改变的拓扑结构开始后(见
storm rebalance
命令)。
- 拓扑的任务数量是静态的。
并且根据定义,存在#executors <= #tasks
的不变量。
因此,每个执行程序线程执行2个任务的一个原因是,您可以灵活地在未来拓展/扩展通过storm rebalance
命令的拓扑,而无需使拓扑脱机。例如,想象一下,从15台机器的风暴集群开始,但已经知道下周还会添加10个盒子。在这里,你可以选择在已经在15个初始盒子上的25台机器的预期并行水平上运行拓扑(当然这比25盒子要慢)。一旦集成了额外的10个盒子,您就可以通过storm rebalance
拓扑结构充分利用所有25个盒子,而无需任何停机时间。
对每个执行器运行2+任务的另一个原因是(主要是功能性)测试。例如,如果你的开发机器或CI服务器只有足够强大的运行能力,比如2个执行器以及机器上运行的所有其他东西,那么仍然可以运行30个任务(这里是每个执行器15个),以查看代码您的自定义Storm组合按预期工作。
实际上,我们通常每个执行者运行1个任务。
PS:请注意,Storm实际上会产生a few more threads behind the scenes。例如,每个执行器都有自己的“发送线程”,负责处理传出的元组。还有例如“系统级”的后台线程。 acking与“你的”线程一起运行的元组。 IIRC除了“你的”线程之外,Storm UI还会计算这些线程。
我已阅读文档三次以清除相同的混淆,并解决了我的问题。 – pavan