如何在storm中调整并行提示

lstz6jyr  于 2021-06-24  发布在  Storm
关注(0)|答案(3)|浏览(293)

“parallelism hint”在storm中用于并行化正在运行的storm拓扑。我知道有工人流程、执行者和任务这样的概念。使并行性提示尽可能大以便拓扑尽可能多地并行化有意义吗?
我的问题是如何为我的storm拓扑找到一个完美的并行提示数。它是取决于我的storm群集的规模,还是更像是一个特定于拓扑/作业的设置,不同的拓扑会有所不同?或者这取决于两者?

cczfrluj

cczfrluj1#

加上@chiron的解释
“parallelism hint”在storm中用于并行化正在运行的storm拓扑
实际上在Storm中 parallelism hint 用于指定组件(喷嘴、螺栓)的执行器(螺纹)的初始数量,例如

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

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

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

这个 setNumTasks(4) 指示运行4个关联的任务(在拓扑的整个生存期内都是相同的)。因此,在这种情况下,每个storm将为每个执行器运行两个任务。默认情况下,任务数设置为与执行者数相同,即storm将为每个线程运行一个任务。
使并行性提示尽可能大以便拓扑尽可能多地并行化有意义吗
需要注意的一个关键点是,如果您打算为每个执行器运行多个任务,则不会提高并行性级别。因为executor使用一个线程来处理所有任务,即任务在executor上串行运行。

为每个执行器配置多个任务的目的是,可以在拓扑仍在运行时使用重新平衡机制更改执行器(线程)的数量(请记住,在拓扑的整个生命周期内,任务的数量始终相同)。
增加工作人员的数量(负责为一个或多个组件运行一个或多个执行器)可能也会给您带来性能上的好处,但这也是相对的,正如我在讨论中发现的,nathanmarz说
拥有更多的员工可能会有更好的绩效,这取决于您的瓶颈所在。每个worker都有一个线程,它将元组传递到0mq连接以传输给其他worker,因此如果您在cpu上遇到瓶颈,并且每个worker都处理大量元组,那么更多的worker可能会使您获得更好的吞吐量。
所以基本上没有明确的答案,您应该根据您的环境和设计尝试不同的配置。

z0qdvdin

z0qdvdin2#

如何找到完美的并行提示数?我想说,你最好的办法是尝试不同的数字,以找到合适的配置。每种拓扑结构都是不同的。
例如,您的拓扑可能与restapi、rdbms、solr、elasticsearch等进行交互,其中一个可能是您的瓶颈。如果您增加了并行性提示,您可能会使其中一个屈服,并开始抛出异常或其他什么。
最好的办法是尝试不同的配置和调优,以找到最佳的并行性提示。

aiazj4mn

aiazj4mn3#

分析storm拓扑中平行性需求的一个好建议是使用storm ui中的度量:
storm ui也变得非常有用。所有螺栓都有新的统计信息“#executed”、“execute latency”和“capacity”。“容量”度量非常有用,它告诉您在过去10分钟内bolt执行元组所花费的时间的百分比。如果此值接近1,则螺栓处于“容量”状态,是拓扑中的瓶颈。at-capacity螺栓的解决方案是增加该螺栓的平行度。(…)
资料来源:https://storm.incubator.apache.org/2013/01/11/storm082-released.html

相关问题