Joh*_*ang 46 parallel-processing topology apache-storm
我想通过下面的大文章,了解Twitter的风暴" 了解风暴的拓扑结构的并行 "
但是我对"任务"的概念感到有些困惑.任务是组件的运行实例(spout还是bolt)?具有多个任务的执行程序实际上是说执行程序多次执行相同的组件,我是否正确?
此外,在一般的并行意义上,Storm会为spout或bolt生成一个专用线程(执行程序),但是由具有多个任务的执行程序(线程)对并行性做出了什么贡献?我认为在一个线程中有多个任务,因为一个线程按顺序执行,只会使该线程成为一种"缓存"资源,从而避免为下一个任务运行产生新线程.我对么?
我可以在花更多时间调查之后自己清除那些困惑,但是你知道,我们都喜欢stackoverflow ;-)
提前致谢.
Mic*_*oll 72
免责声明:我在上面的问题中写过您引用的文章.
但是我对"任务"的概念感到有些困惑.任务是组件的运行实例(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实际上会在幕后产生更多线程.例如,每个执行程序都有自己的"发送线程",负责处理传出的元组.还有"系统级"后台线程,例如与"你的"线程一起运行的acking元组.IIRC风暴UI除了"你的"线程之外还计算那些acking线程.
| 归档时间: |
|
| 查看次数: |
10922 次 |
| 最近记录: |