Как настроить подсказку parallelism в шторме

"parallelism hint" используется в шторме для параллелизации текущей топологии шторма. Я знаю, что существуют такие понятия, как рабочий процесс, исполнитель и задачи. Было бы целесообразно сделать подсказку parallelism настолько большой, насколько это возможно, чтобы ваши топологии были распараллелены как можно больше?

Мой вопрос: как найти идеальный parallelism номер подсказки для моих штормовых топологий. Является ли это в зависимости от масштаба моего кластера штормов или больше похоже на настройку топологии/задания, она варьируется от одной топологии к другой? или это зависит от обоих?

Ответ 1

Добавление к тому, что объяснил @Chiron

"parallelism hint" используется в шторме для параллелизации текущей топологии шторма

Фактически в шторме термин parallelism hint используется, чтобы указать начальное число исполнителей (потоков) компонента (носик, болт), например

    topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)

В приведенном выше заявлении говорится о том, что шторм выделяет 2 потока исполнителей (это может быть изменено в течение времени выполнения). Опять

    topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2).setNumTasks(4) 

setNumTasks(4) указывает на выполнение 4 связанных задач (это будет одинаково на протяжении всей жизни топологии). Таким образом, в этом случае каждый штурм будет выполнять две задачи для каждого исполнителя. По умолчанию количество заданий устанавливается таким же, как количество исполнителей, т.е. Storm будет запускать одну задачу на поток.

Было бы целесообразно сделать подсказку parallelism настолько большой, насколько это возможно, чтобы ваши топологии были распараллелены как можно больше

Одна клавиша , чтобы отметить, что если вы намерены запустить более одного задания для каждого исполнителя, это не увеличивает уровень parallelism. Поскольку исполнитель использует один единственный поток для обработки всех задач, i.e задачи выполняются последовательно на исполнителе.

enter image description here

Цель настройки более 1 задачи для каждого исполнителя заключается в том, что можно изменить количество исполнителей (потоков) с использованием механизма повторной балансировки во время выполнения (помните, что количество задач всегда одинаково на протяжении всего жизненного цикла топологии), пока топология все еще работает.

Увеличение числа рабочих (отвечающих за запуск одного или нескольких исполнителей для одного или нескольких компонентов) также может дать вам преимущество в производительности, но это также относительное, как я нашел из это обсуждение, где nathanmarz говорит

У большего числа рабочих может быть более высокая производительность, в зависимости от того, где находится ваше узкое место. У каждого работника есть один поток, который передает кортежи на соединения 0mq для передачи другим работникам, поэтому, если вы испытываете недостаток в процессоре, и каждый работник имеет дело с большим количеством кортежей, больше работников, вероятно, будет чистить вашу лучшую пропускную способность.

Таким образом, в принципе нет определенного ответа на этот вопрос, вы должны попробовать другую конфигурацию, основанную на вашей среде и дизайне.

Ответ 2

Хорошим советом для анализа необходимости паралелизма в вашей топологии Storm является использование показателей из интерфейса Storm:

Пользовательский интерфейс Storm также стал значительно более полезным. Есть новая статистика "#executed", "run latency" и "capacity" отслеживаются для все болты. Показатель "емкость" очень полезен и говорит вам, что% времени за последние 10 минут болт проводил выполнение кортежей. Если это значение близко к 1, тогда болт "находится в емкости" и является узкое место в вашей топологии. Решение для болтов с максимальной производительностью увеличьте parallelism этого болта. (...)

Источник: https://storm.incubator.apache.org/2013/01/11/storm082-released.html

Ответ 3

Как найти идеальный номер подсказки parallelism? Я бы сказал, что ваш лучший выбор - попробуйте разные цифры, чтобы найти подходящую конфигурацию. Каждая топология отличается.

Например, ваша топология может взаимодействовать с REST API, RDBMS, Solr, ElasticSearch и т.д., и одна из них может быть вашей бутылочной горловиной. Если вы увеличили подсказку parallelism, вы можете поставить одного из них на колени и начать бросать исключения или что-то еще.

Лучше всего попробовать другую конфигурацию и настроить, чтобы найти лучший parallelism подсказку.