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