关于并行在StormCrawler中的作用

About the effect of parallelism in StormCrawler

我目前正在从事基于 Storm Crawler 的项目。我们有固定且有限的带宽用于从网络上获取页面。我们有 8 个 worker,对于拓扑中不同的 Bolt,并行度提示值很大(即 50)。为获取页面创建了很多线程。项目中增加fetch_error和增加parallelism_hint有什么关系吗?如何确定 Storm Crawler 中 parallelism_hint 的合适价值?

并行性提示不应不加区别地应用于所有螺栓。

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

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

正如我之前提到的,您希望每个工作人员有 1 个 FetcherBolt,每个螺栓的内部获取线程数取决于您的带宽。这个没有硬性规定,要看你的情况。

然而,我观察到的一个常量是解析螺栓与 Fetcher 螺栓的比率;通常,每个提取器 4 个解析器工作正常。 运行 部署模式下的 Storm 并检查 UI 中解析器螺栓的 容量 值。如果值为1或以上,请尝试使用更多实例,看看是否影响容量。

无论如何,并非所有螺栓都需要相同级别的平行度。