0

我目前正在开发一个基于 Storm Crawler 的项目。我们有固定和有限的带宽来从网络上获取页面。对于拓扑中的不同 Bolt,我们有 8 个具有较大并行提示值的工作人员(即 50)。为获取页面创建了很多线程。项目中增加的 fetch_error 数量和增加 parallelism_hint 之间有什么关系吗?如何确定 Storm Crawler 中 parallelism_hint 的良好值?

4

1 回答 1

1

并行性提示不应该不加选择地应用于所有螺栓。

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

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

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

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

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

于 2020-10-16T07:49:22.990 回答