如何调整风暴中的并行性提示

She*_*jie 15 parallel-processing apache-storm

"并行性提示"在风暴中用于并行运行的风暴拓扑.我知道有工作流程,执行者和任务等概念.使并行性提示尽可能大有意义,以便尽可能地并行化拓扑?

我的问题是如何为我的风暴拓扑找到一个完美的并行性提示数.它取决于我的风暴群集的规模,还是更像拓扑/作业特定设置,它从一种拓扑到另一种不同?还是取决于两者?

use*_*864 20

添加@Chiron解释的内容

"并行性提示"在风暴中用于并行运行的风暴拓扑

实际上在风暴中,该术语parallelism hint用于指定组件(喷口,螺栓)的执行器(螺纹)的初始数量, 例如

    topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
Run Code Online (Sandbox Code Playgroud)

上面的语句告诉storm最初分配2个执行程序线程(这可以在运行时更改).再次

    topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4) 
Run Code Online (Sandbox Code Playgroud)

setNumTasks(4)指示来运行4个相关联的任务(这将是在整个拓扑结构的寿命相同).所以在这种情况下,每个风暴将为每个执行者运行两个任务.默认情况下,任务数设置为与执行程序数相同,即Storm将为每个线程运行一个任务.

使并行性提示尽可能大有意义,以便尽可能地并行化拓扑

一个关键的一点要注意,如果您打算为每个执行人运行多个任务,它不会增加并行的水平.因为执行程序使用一个单独的线程来处理所有任务,即任务在执行程序上串行运行.

在此输入图像描述

为每个执行程序配置多个任务的目的是可以使用运行时中的重新平衡机制更改执行程序(线程)的数量(请记住,在拓扑的生命周期中,任务数始终相同) )拓扑仍在运行.

增加数量的工人(负责运行一个或一个以上组件的更多执行人)也可能给你一个性能优势,但这也相对当我从发现这个讨论,其中nathanmarz

拥有更多员工可能会有更好的表现,具体取决于您的瓶颈所在.每个工作者都有一个线程,它将元组传递给0mq连接以传输给其他工作者,因此如果你在CPU上遇到瓶颈并且每个工作人员正在处理大量元组,那么更多的工作人员可能会为你提供更好的吞吐量.

所以基本上没有明确的答案,你应该根据你的环境和设计尝试不同的配置.


Van*_*ato 11

分析Storm拓扑中对paralelism的需求的一个很好的提示是使用Storm UI中的指标:

Storm UI也变得非常有用.所有螺栓都有新的统计数据"#executed","执行延迟"和"容量"."容量"指标非常有用,它可以告诉您最后10分钟内螺栓执行元组的时间百分比.如果此值接近1,则螺栓处于"容量"状态,并且是拓扑中的瓶颈.容量螺栓的解决方案是增加螺栓的平行度.(......)

资料来源:https://storm.incubator.apache.org/2013/01/11/storm082-released.html