Шторм большого размера окна приводит к тому, что Нимбус убивает исполнителя - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть приложение Java Spring, которое отправляет топологии в шторм (1.1.2) nimbus на основе DTO, который создает структуру топологии.

Это прекрасно работает, за исключением очень больших окон. Я испытываю это с несколькими различными скользящими и падающими окнами. Никто не дает мне никаких проблем, кроме 24-часового скользящего окна, которое продвигается каждые 15 минут. Топология будет получать ~ 250 сообщений / с от Kafka и просто обрабатывать их с помощью простого экстрактора меток времени с задержкой в ​​3 секунды (как и во всех других топологиях, которые я тестирую).

Я много играл с рабочими и ресурсами памяти, чтобы попытаться выяснить это, но моя конфигурация по умолчанию - 1 рабочий с размером кучи 2048 МБ. Я также попытался уменьшить задержку, которая имела минимальные эффекты.

Я думаю, что возможно, размер окна становится слишком большим, и работнику не хватает памяти, что задерживает сердцебиение или регистрацию соединения зоопарка, что, в свою очередь, приводит к тому, что Nimbus убивает работника.

Время от времени (~ 11 продвижений окна) в журналах Nimbus сообщается, что Исполнитель для этой топологии "не активен", а рабочие журналы для этой топологии показывают либо KeeperException, когда топология не может связаться с Zookeeper или java.lang.ExceptionInInitializerError:null с гнездом PrivelegedActionException.

Когда топологии назначается новый работник, агрегация, которую я выполнял, теряется. Я предполагаю, что это происходит, потому что окно содержит по крайней мере 250 * 60 * 15 * 11 (messagesPerSecond * secondsPerMinute * 15mins * windowAdvancesBeforeCrash) сообщений, каждый из которых составляет около 84 байтов. Для завершения всего окна это будет 250 * 60 * 15 * 97 сообщений (messagesPerSecond * secondsPerMinute * 15mins * 15minIncrementsIn24HoursPlusAnExpiredWindow). Это ~ 1.8gbs, если моя математика верна, поэтому я чувствую, что рабочая память должна покрывать окно или, по крайней мере, стоит больше, чем 11 достижений окна.

Я мог бы немного увеличить память, но не намного. Я также мог бы уменьшить количество памяти / работника и увеличить количество работников / топологии, но мне было интересно, есть ли что-то, что я пропускаю? Могу ли я просто увеличить количество пульса для работника, чтобы у исполнителя было больше времени, чтобы зарегистрироваться перед тем, как его убили, или это по какой-то причине будет плохо? Если бы я изменил биение, если бы был в карте конфигурации для топологии. Спасибо!

1 Ответ

0 голосов
/ 07 декабря 2018

Это было вызвано тем, что работникам не хватает памяти. Смотря на код шторма. похоже, что Storm хранит каждое сообщение в окне в виде кортежа (который является довольно большим объектом). С высокой скоростью сообщений и 24-часовым окном, это много памяти.

Я исправил это, используя предварительный болт, который собирал все кортежи в начальном 1-минутном окне, что значительно уменьшило нагрузку на главное окно, потому что теперь оно получало один кортеж в минуту. Окно группирования не исчерпывает память, так как в его окне находится только одна минута кортежей за раз.

...