关于StormCrawler中并行性的影响

问题描述

我目前正在从事基于Storm Crawler的项目。我们有固定数量的带宽来从Web上获取页面。我们有8个工作线程,对于拓扑中不同的Bolt(即50),其并行性提示值很大。因此创建了很多线程来获取页面。项目中增加的fetch_error数量增加的parallelism_hint之间是否有任何关系?如何确定Storm Crawler中parallelism_hint的合适值?

解决方法

并行性提示不是应无差别地应用于所有螺栓的东西。

理想情况下,每个工人需要一个FetcherBolt实例,因此在您的情况8中。正如您可能在WIKI中阅读或在conf中看到的那样,FetcherBolt处理内部线程以进行获取。这由配置 fetcher.threads.number 确定,该配置在原型的配置中设置为50(假设这是您用作起点)。

使用太多的FetcherBolt实例会适得其反。最好改为更改 fetcher.threads.number 的值。如果您有50个Fetcher实例,其默认线程数为50,那将为您提供2500个提取线程,这可能超出您的可用带宽。

正如我之前提到的,每个工人需要1个FetcherBolt,每个螺栓的内部读取线程数取决于您的带宽。对此没有硬性规定,这取决于您的情况。

不过,我观察到的一个常数是解析螺栓与Fetcher螺栓的比率。通常,每个提取程序有4个解析器可以正常工作。在部署模式下运行Storm并检查UI中解析器螺栓的 capacity 值。如果该值等于或大于1,请尝试使用更多实例,看看它是否影响容量。

在任何情况下,并非所有螺栓都需要相同水平的平行度。