“parallelism hint”在storm中用于并行化正在运行的storm拓扑。我知道有工人流程、执行者和任务这样的概念。使并行性提示尽可能大以便拓扑尽可能多地并行化有意义吗?我的问题是如何为我的storm拓扑找到一个完美的并行提示数。它是取决于我的storm群集的规模,还是更像是一个特定于拓扑/作业的设置,不同的拓扑会有所不同?或者这取决于两者?
cczfrluj1#
加上@chiron的解释“parallelism hint”在storm中用于并行化正在运行的storm拓扑实际上在Storm中 parallelism hint 用于指定组件(喷嘴、螺栓)的执行器(螺纹)的初始数量,例如
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可能会使您获得更好的吞吐量。所以基本上没有明确的答案,您应该根据您的环境和设计尝试不同的配置。
setNumTasks(4)
z0qdvdin2#
如何找到完美的并行提示数?我想说,你最好的办法是尝试不同的数字,以找到合适的配置。每种拓扑结构都是不同的。例如,您的拓扑可能与restapi、rdbms、solr、elasticsearch等进行交互,其中一个可能是您的瓶颈。如果您增加了并行性提示,您可能会使其中一个屈服,并开始抛出异常或其他什么。最好的办法是尝试不同的配置和调优,以找到最佳的并行性提示。
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
3条答案
按热度按时间cczfrluj1#
加上@chiron的解释
“parallelism hint”在storm中用于并行化正在运行的storm拓扑
实际上在Storm中
parallelism hint
用于指定组件(喷嘴、螺栓)的执行器(螺纹)的初始数量,例如上面的语句告诉storm最初分配2个executor线程(这可以在运行时更改)。再一次
这个
setNumTasks(4)
指示运行4个关联的任务(在拓扑的整个生存期内都是相同的)。因此,在这种情况下,每个storm将为每个执行器运行两个任务。默认情况下,任务数设置为与执行者数相同,即storm将为每个线程运行一个任务。使并行性提示尽可能大以便拓扑尽可能多地并行化有意义吗
需要注意的一个关键点是,如果您打算为每个执行器运行多个任务,则不会提高并行性级别。因为executor使用一个线程来处理所有任务,即任务在executor上串行运行。
为每个执行器配置多个任务的目的是,可以在拓扑仍在运行时使用重新平衡机制更改执行器(线程)的数量(请记住,在拓扑的整个生命周期内,任务的数量始终相同)。
增加工作人员的数量(负责为一个或多个组件运行一个或多个执行器)可能也会给您带来性能上的好处,但这也是相对的,正如我在讨论中发现的,nathanmarz说
拥有更多的员工可能会有更好的绩效,这取决于您的瓶颈所在。每个worker都有一个线程,它将元组传递到0mq连接以传输给其他worker,因此如果您在cpu上遇到瓶颈,并且每个worker都处理大量元组,那么更多的worker可能会使您获得更好的吞吐量。
所以基本上没有明确的答案,您应该根据您的环境和设计尝试不同的配置。
z0qdvdin2#
如何找到完美的并行提示数?我想说,你最好的办法是尝试不同的数字,以找到合适的配置。每种拓扑结构都是不同的。
例如,您的拓扑可能与restapi、rdbms、solr、elasticsearch等进行交互,其中一个可能是您的瓶颈。如果您增加了并行性提示,您可能会使其中一个屈服,并开始抛出异常或其他什么。
最好的办法是尝试不同的配置和调优,以找到最佳的并行性提示。
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