Как заставить Storm остановиться на исключение?

По умолчанию, когда носик или болт Storm встречает исключение, он перезапускает носик или болт и пытается снова. Есть ли какая-либо опция конфигурации, чтобы остановить топологию, возможно, после N повторных попыток? (Например, Hadoop пытается 4 раза, прежде чем сдаться.)

У меня топология Storm выполнялась в течение 77 дней, при этом один болт выдавал исключение для каждого кортежа. В подобных ситуациях я бы предпочел, чтобы это не сработало, чтобы я заметил, что что-то не так.

2 ответа

Нет возможности остановить топологию (в настоящее время). И, честно говоря, уничтожение всей топологии только потому, что исключением является грубая сила ИМХО.

В вашем сценарии эти исключения должны обрабатываться на прикладном уровне.

Есть ли какая-либо опция конфигурации, чтобы остановить топологию, возможно, после N повторных попыток?

Для этого не существует готового решения, но вы можете сделать это и отслеживать повторные попытки в Spout. Если порог достигнут, зарегистрируйте кортеж или отправьте его в очередь сообщений.

У меня топология Storm выполнялась в течение 77 дней, при этом один болт выдавал исключение для каждого кортежа.

Тогда, возможно, есть ошибка в коде вашего болта?

Одной из стратегий является отправка неудачных кортежей в очередь массажа или на шину событий (например, HornetQ, Apache Kafka, Redis) и наличие прослушивателя, чтобы вы сразу получали уведомление о ядовитом кортеже.

Насколько я видел, Storm не будет повторять кортеж (что само по себе вызывает исключение). По умолчанию будет продолжена обработка следующего кортежа. Тот же кортеж не будет повторяться, если в Spout не реализован метод сбоя.

Другие вопросы по тегам