#apache-storm #apache-storm-topology #storm-topology
#apache-storm #apache-storm-topology #storm-топология
Вопрос:
Я обновляю Apache Storm с 1.0.3 до 2.2.0 и сталкиваюсь со своеобразной проблемой, когда задачи топологии выполняются не на всех рабочих и выполняются только на том же рабочем, что и Spout.
Я использую группировку в случайном порядке и настроил 6 рабочих и в общей сложности 51 исполнителя среди 2 болтов и 1 носика. Когда я запускаю топологию, все 6 рабочих запускаются, как и ожидалось, но только один рабочий с носиком выполняет всю работу.
Нужна ли мне какая-либо специальная конфигурация для 2.2.0, все мои топологии работают нормально с версией 1.0.3
В качестве теста я также запускаю ExclamationTopology из Strom-starter, но вижу ту же проблему, что только один рабочий выполняет всю работу.
Заранее спасибо за любую помощь.
С уважением,
Ответ №1:
При обновлении до storm 2.0.0 я был озадачен поведением, которое вы также наблюдали. Причина кроется в случайной группировке, которую вы используете. Согласно руководству по производительности storm:
- Обмен сообщениями с поддержкой загрузки
Когда включен обмен сообщениями с учетом нагрузки (по умолчанию), группировка в случайном порядке учитывает дополнительные факторы для маршрутизации сообщений. Влияние этого на производительность зависит от топологии и ее места развертывания (т. Е. Распределения по процессам и машинам). Следовательно, полезно оценить влияние настройки topology.disable.loadaware.messaging в true или false для вашего конкретного случая.
Это приводит к тому, что spout делегирует все кортежи тому же рабочему, на котором он находится. Чтобы исправить это и вернуться к старому поведению, в вашей топологии установите topology.disable.loadaware.messaging
значение true
, например, с
conf.put("topology.disable.loadaware.messaging", true);
Комментарии:
1. Это отличная информация, спасибо за ваш ответ. Позвольте мне попробовать это.
2. Надеюсь, это сработает, дайте нам знать, если это так, спасибо!