Обновление 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. Согласно руководству по штормовым характеристикам:

  1. Обмен сообщениями с поддержкой загрузки

Когда обмен сообщениями с учетом нагрузки включен (по умолчанию), при случайной группировке учитываются дополнительные факторы при маршрутизации сообщений. Влияние этого на производительность зависит от топологии и размера ее развертывания (т. Е. Распределения по процессам и машинам). Следовательно, полезно оценить влияние установки topology.disable.loadaware.messaging значения true или false для вашего конкретного случая.

Это приводит к тому, что spout делегирует все кортежи тому же рабочему процессу, на котором он находится. Чтобы исправить это и вернуться к старому поведению, в вашей топологии установите topology.disable.loadaware.messaging к true, например, с

conf.put("topology.disable.loadaware.messaging", true);
Другие вопросы по тегам