Об эффекте параллелизма в StormCrawler
В настоящее время я работаю над проектом на основе Storm Crawler. У нас есть фиксированная и ограниченная пропускная способность для загрузки страницы из Интернета. У нас есть 8 рабочих с большим значением подсказки параллелизма для разных Bolt в топологии (т.е. 50). Так много потоков создано для загрузки страницы. Есть ли какая-либо связь между увеличением количества fetch_error и увеличением parallelism_hint в проекте? Как я могу определить хорошее значение parallelism_hint в Storm Crawler?
1 ответ
Подсказку о параллельности нельзя применять ко всем болтам без разбора.
В идеале вам нужен один экземпляр FetcherBolt на воркера, так что в вашем случае 8. Как вы, вероятно, читали в WIKI или видели в conf, FetcherBolt обрабатывает внутренние потоки для выборки. Это определяется конфигурацией fetcher.threads.number, который установлен в 50 в конфигурациях архетипов (при условии, что это то, что вы использовали в качестве отправной точки).
Использование слишком большого количества экземпляров FetcherBolt контрпродуктивно. Лучше вместо этого изменить значение fetcher.threads.number. Если у вас есть 50 экземпляров Fetcher с количеством потоков по умолчанию 50, это даст вам 2500 потоков выборки, что может быть слишком много для вашей доступной полосы пропускания.
Как я упоминал ранее, вам нужен 1 FetcherBolt на одного рабочего, количество внутренних потоков выборки на каждый болт зависит от вашей пропускной способности. Для этого нет жесткого правила, это зависит от вашей ситуации.
Однако я заметил одну константу - это соотношение болтов разбора и болтов Фетчера; обычно 4 парсера на сборщик работают нормально. Запустите Storm в развернутом режиме и проверьте значение емкости для болтов парсера в пользовательском интерфейсе. Если значение равно 1 или выше, попробуйте использовать больше экземпляров и посмотрите, не повлияет ли это на емкость.
В любом случае не для всех болтов требуется одинаковый уровень параллельности.