Мониторинг рабочих сбоев в шторме апачей

При работе в кластере, если что-то происходит неправильно, рабочий обычно умирает (останов JVM). Это может быть вызвано многими факторами, большую часть времени это сложная задача (самая большая проблема с бурей?), Чтобы выяснить причину аварии.

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

Есть ли простой способ/инструмент/методология для проверки того, когда и, возможно, из-за сбоя штормового работника? Они не отображаются во время шторма (в то время как наблюдатели показаны), и все требует ручного мониторинга (например, с помощью jstack + JVM opts) с большой осторожностью.

Вот некоторые случаи, которые могут произойти:

  • таймауты и множество возможных причин: медленная сборка мусора java, плохая сеть, плохая калибровка в конфигурации тайм-аута. Единственным результатом, который мы получаем из журналов супервизора, является "состояние: тайм-аут" или "состояние: запрещено", которое плохое. Также, когда рабочий умирает, статистика по шторму-ui перезагружается. Поскольку вы боитесь тайм-аутов, вы в конечном итоге используете длинные, которые, похоже, не являются хорошим решением для обработки в реальном времени.
  • высокое противодавление с неожиданным поведением, голодные рабочие биения сердца и, например, индуцирование тайм-аута. Acking, кажется, единственный способ справиться с противодавлением и нуждается в хорошем изготовлении болтов в соответствии с вашей нагрузкой. Не похоже на то, что это не так, как если бы это действительно привело к краху рабочих и привело к плохим результатам в конце (даже меньше обрабатываемых данных, чем топология подкачки под давлением?).
  • исключений для выполнения кода, иногда не отображаемых в storm-ui, которые требуют ручной проверки журналов приложений (самый простой случай).
  • утечки памяти, которые можно обнаружить с помощью JVM-дампов.

Ответы

Ответ 1

Наблюдатель бури регистрирует перезапуск по тайм-ауту.  вы можете отслеживать журнал супервизора, также вы можете отслеживать эффективность метода выполнения затвора (кортежа).

Что касается утечки памяти, так как диспетчер бури убивает -9 рабочий, куча кучи может быть повреждена, поэтому я буду использовать инструменты, которые будут динамически отслеживать вашу кучу или убивать супервизора для создания кучи с помощью jmap. Также попробуйте следить за журналами gc.

Я по-прежнему рекомендую увеличить время ожидания по умолчанию.