使用 ElasticSearch 并行处理在 StormCrawler 中插入的新 Domain/URL

Parallel Processing of New Domain/URL inserted in StormCrawler using ElasticSearch

我正在使用 StormCrawler 进行实时抓取。我在 ElasticSearch 中插入 Domain 并且 Crawler 爬行正常,我定义了一个 每个域的抓取 URls 限制(在 SimpleFetcherBolt 中使用 Redis)。

场景:当我插入域时,StormCrawler 开始抓取。现在在 ElasticSeeds 中输入一个新的域,StormCrawler 不会立即获取它。

正忙于获取先前域的页面。如果限制很高(比如 1000 个 URLS),则至少需要 20 分钟才能开始在新插入的域上进行爬网。

我想要即时结果,是否可以在新域上设置任何优先级?或 StormCrawler 开始在新域上爬行每当插入新域时?每个域的不同队列 (DB) ?

如有任何建议,我们将不胜感激。

I have defined a limit of crawling URls for each Domain ( Using Redis in SimpleFetcherBolt)

你能解释一下你的意思吗?您不必修改 Fetcher 螺栓,这就是 URL 过滤器的用途。

您使用的是哪种喷口?聚合喷口?您使用了多少个 SimpleFetcherBolt 实例?

SC 应该会很快开始在新域上进行抓取。请相应地设置日志级别并检查日志以查看 spouts 是否已为新域发出元组以及 URLs 是否被进一步阻止。

编辑:要么指定一个以上的 SimpleFetcherBolt 实例,要么改用 FetcherBolt。对于单个 SFB 实例,URLs 将卡在队列中,而 FetcherBolt 将并行处理它们。

By limit I meant SC only fetches limited URLS of one domain after that It stops fetching. say Limit is 100, SC will fetch 100 Urls of each Domain

也许可以将其作为一个单独的 URL 过滤器来执行,这将比破解获取器 class 更干净,而且效率应该更高。

SC uses Agg.Spout by default right

否,参见 ESCrawlTopology