Parallel processing 如何在暴风雨中调整并行提示

Parallel processing 如何在暴风雨中调整并行提示,parallel-processing,apache-storm,Parallel Processing,Apache Storm,“并行提示”在storm中用于并行化正在运行的storm拓扑。我知道有一些概念,比如工人流程、执行者和任务。使并行性提示尽可能大,以便拓扑尽可能并行化,这有意义吗 我的问题是如何为我的storm拓扑找到一个完美的并行提示数。它是取决于我的storm群集的规模,还是更像是拓扑/作业特定的设置,它因拓扑而异?或者这取决于两者?如何找到完美的并行提示数?我想说,你最好的办法是尝试不同的数字,以找到合适的配置。每个拓扑都是不同的 例如,您的拓扑可能与RESTAPI、RDBMS、Solr、ElasticS

“并行提示”在storm中用于并行化正在运行的storm拓扑。我知道有一些概念,比如工人流程、执行者和任务。使并行性提示尽可能大,以便拓扑尽可能并行化,这有意义吗


我的问题是如何为我的storm拓扑找到一个完美的并行提示数。它是取决于我的storm群集的规模,还是更像是拓扑/作业特定的设置,它因拓扑而异?或者这取决于两者?

如何找到完美的并行提示数?我想说,你最好的办法是尝试不同的数字,以找到合适的配置。每个拓扑都是不同的

例如,您的拓扑可能与RESTAPI、RDBMS、Solr、ElasticSearch或其他任何东西交互,其中之一可能是您的瓶颈。如果您增加了并行性提示,您可能会让其中一个屈服,并开始抛出异常或其他东西


您最好的选择是尝试不同的配置和调整,以找到最佳的并行性提示。

添加到@Chiron解释的内容中

“并行提示”在storm中用于并行化正在运行的storm拓扑

实际上,在storm中,
parallelism hint
一词用于指定组件(喷口、螺栓)的执行器(螺纹)的初始数量

    topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
上面的语句告诉storm最初分配2个执行器线程(这可以在运行时更改)。再次

setNumTasks(4)
指示运行4个相关任务(在拓扑的整个生命周期内都是相同的)。因此,在这种情况下,每个风暴将为每个执行者运行两个任务。默认情况下,任务数设置为与执行器数相同,即Storm将为每个线程运行一个任务

让并行性提示尽可能大,以便拓扑尽可能并行化,这有意义吗

需要注意的一点是,如果您打算为每个执行者运行多个任务,则不会提高并行性级别。因为executor使用一个线程来处理所有任务,即任务在executor上串行运行

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

增加工作人员的数量(负责为一个或多个组件运行一个或多个执行器)也可能会给您带来性能好处,但这也是相对的,正如我从nathanmarz所说的讨论中发现的

拥有更多的员工可能会有更好的绩效,这取决于瓶颈所在。每个worker都有一个线程,该线程将元组传递到0mq连接,以便传输到其他worker,因此,如果您在CPU上遇到瓶颈,并且每个worker都要处理大量元组,那么更多的worker可能会使您获得更好的吞吐量


因此,基本上没有明确的答案,您应该根据您的环境和设计尝试不同的配置。

分析Storm拓扑中平行性需求的一个好技巧是使用Storm UI中的指标:

Storm UI也变得非常有用。有 跟踪的新统计数据“#已执行”、“执行延迟”和“容量” 所有螺栓容量指标非常有用,它可以告诉您% 在过去10分钟中,bolt执行元组所花费的时间。如果 该值接近1,则螺栓处于“容量”状态,为a 拓扑中的瓶颈。at容量螺栓的解决方案是: 增加该螺栓的平行度。(……)

资料来源:

    topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4)