Что такое "задача" в штормовом параллелизме

Я пытаюсь научиться твиттер-шторму, следуя замечательной статье " Понимание параллелизма топологии Storm"

Однако меня немного смущает понятие "задача". Является ли задача запущенным экземпляром компонента (носик или болт)? Исполнитель, имеющий несколько задач, на самом деле говорит, что один и тот же компонент выполняется исполнителем несколько раз, я прав?

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

Я могу устранить эту путаницу самостоятельно, потратив больше времени на изучение, но вы знаете, мы оба любим stackru;-)

Заранее спасибо.

1 ответ

Решение

Отказ от ответственности: я написал статью, на которую вы ссылались в вашем вопросе выше.

Однако меня немного смущает понятие "задача". Является ли задача запущенным экземпляром компонента (носик или болт)? Исполнитель, имеющий несколько задач, на самом деле говорит, что один и тот же компонент выполняется исполнителем несколько раз, я прав?

Да и да.

Более того, в смысле общего параллелизма Storm создаст отдельный поток (исполнитель) для носика или болта, но что способствует параллелизму исполнителя (поток), имеющего несколько задач?

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

Как я уже писал в статье, обратите внимание, что:

  • Количество потоков исполнителей может быть изменено после запуска топологии (см. storm rebalance команда).
  • Количество задач топологии статично.

И по определению есть инвариант #executors <= #tasks,

Поэтому одной из причин наличия более 2-х задач в каждом потоке исполнителей является предоставление вам гибкости для расширения / увеличения топологии с помощью storm rebalance команда в будущем, не переводя топологию в автономный режим. Например, представьте, что вы начинаете с кластера Storm из 15 машин, но уже знаете, что на следующей неделе будут добавлены еще 10 коробок. Здесь вы можете выбрать запуск топологии на ожидаемом уровне параллелизма 25 машин уже на 15 начальных блоках (что, конечно, медленнее, чем 25 блоков). После того, как дополнительные 10 блоков интегрированы, вы можете storm rebalance топология для полного использования всех 25 блоков без простоев.

Еще одна причина для запуска 2+ задач для каждого исполнителя - (в основном, функциональное) тестирование. Например, если ваша машина разработки или CI-сервер достаточно мощны, чтобы запускать, скажем, 2 исполнителя вместе со всеми другими компонентами, работающими на машине, вы все равно можете запустить 30 задач (здесь: 15 на исполнителя), чтобы увидеть, является ли такой код, как Ваша пользовательская группировка Storm работает должным образом.

На практике мы обычно запускаем 1 задачу на исполнителя.

PS: Обратите внимание, что Storm на самом деле создаст еще несколько потоков за кулисами. Например, каждый исполнитель имеет свой собственный "поток отправки", который отвечает за обработку исходящих кортежей. Существуют также фоновые потоки "системного уровня", например, для отслеживания кортежей, которые работают рядом с "вашими" потоками. IIRC the Storm UI считает эти потоки в дополнение к "вашим" потокам.

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