Об эффекте параллелизма в 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 или выше, попробуйте использовать больше экземпляров и посмотрите, не повлияет ли это на емкость.

В любом случае не для всех болтов требуется одинаковый уровень параллельности.

Другие вопросы по тегам