“并行性提示”在风暴中用于并行运行的风暴拓扑。我知道有工作流程,执行者和任务等概念。将并行性提示尽可能大,以便尽可能地并行化拓扑是否有意义?
我的问题是如何为我的风暴拓扑找到一个完美的并行性提示编号。它取决于我的风暴群集的规模,还是更像拓扑/作业特定设置,它从一种拓扑到另一种不同?还是取决于两者?
答案 0 :(得分:19)
添加@Chiron解释的内容
在风暴中使用“parallelism hint”来并行运行的风暴拓扑
实际上在风暴中,术语parallelism hint
用于指定 组件的执行者(线程)的初始数量(spout,bolt) ,例如
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
上面的语句告诉storm最初分配2个执行程序线程(这可以在运行时更改)。再次
topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4)
setNumTasks(4)
表示运行4个相关任务(这在拓扑的整个生命周期中都是相同的)。因此,在这种情况下,每个风暴将为每个执行者运行两个任务。 默认情况下,任务数设置为与执行程序数相同,即Storm将为每个线程运行一个任务。
使并行性提示尽可能大有意义,以便尽可能地并行化拓扑
一个密钥需要注意的事项是,如果您打算为每个执行程序运行多个任务,则不会提高并行度。因为执行程序使用一个单独的线程来处理所有任务,即任务在执行程序上串行运行。
每个执行程序配置多个任务的目的是可以使用运行时中的重新平衡机制更改执行程序(线程)的数量(请记住,在生命周期中任务的数量始终相同)拓扑仍在运行时的拓扑结构。
增加工作人员的数量(负责为一个或多个组件运行一个或多个执行程序)也可能会为您带来性能优势,但这也与我在this中找到的相关讨论 nathanmarz 所说的
让更多的工作人员可能具有更好的性能,具体取决于您的瓶颈所在。每个工作者都有一个线程,它将元组传递给0mq连接以传输给其他工作者,所以如果你在CPU上遇到瓶颈并且每个工作人员都在处理大量元组,那么更多的工作人员可能会为你提供更好的吞吐量。
所以基本上没有明确的答案,你应该根据你的环境和设计尝试不同的配置。
答案 1 :(得分:11)
分析Storm拓扑中对paralelism的需求的一个好建议是使用Storm UI中的指标:
Storm UI也变得非常有用。有 新的统计数据“#executed”,“执行延迟”和“容量”被跟踪 所有螺栓。 “容量”指标非常有用,可以告诉您% 在过去10分钟内,螺栓花费了执行元组的时间。如果 这个值接近1,那么螺栓是“容量”并且是a 拓扑中的瓶颈。容量螺栓的解决方案是 增加螺栓的平行度。 (...)
来源:https://storm.incubator.apache.org/2013/01/11/storm082-released.html
答案 2 :(得分:2)
如何找到完美的并行性提示号码?我想说你最好的选择是尝试不同的数字来找到合适的配置。每种拓扑都不同。
例如,您的拓扑可能与REST API,RDBMS,Solr,ElasticSearch或其他任何内容交互,其中一个可能是您的瓶颈。如果你增加了并行性提示,你可能会把它们中的一个放在膝盖上并开始抛出异常或其他任何东西。
您最好的选择是尝试不同的配置并调整以找到最佳的并行性提示。