Как заставить Storm остановиться на исключение?
По умолчанию, когда носик или болт Storm встречает исключение, он перезапускает носик или болт и пытается снова. Есть ли какая-либо опция конфигурации, чтобы остановить топологию, возможно, после N повторных попыток? (Например, Hadoop пытается 4 раза, прежде чем сдаться.)
У меня топология Storm выполнялась в течение 77 дней, при этом один болт выдавал исключение для каждого кортежа. В подобных ситуациях я бы предпочел, чтобы это не сработало, чтобы я заметил, что что-то не так.
2 ответа
Нет возможности остановить топологию (в настоящее время). И, честно говоря, уничтожение всей топологии только потому, что исключением является грубая сила ИМХО.
В вашем сценарии эти исключения должны обрабатываться на прикладном уровне.
Есть ли какая-либо опция конфигурации, чтобы остановить топологию, возможно, после N повторных попыток?
Для этого не существует готового решения, но вы можете сделать это и отслеживать повторные попытки в Spout. Если порог достигнут, зарегистрируйте кортеж или отправьте его в очередь сообщений.
У меня топология Storm выполнялась в течение 77 дней, при этом один болт выдавал исключение для каждого кортежа.
Тогда, возможно, есть ошибка в коде вашего болта?
Одной из стратегий является отправка неудачных кортежей в очередь массажа или на шину событий (например, HornetQ, Apache Kafka, Redis) и наличие прослушивателя, чтобы вы сразу получали уведомление о ядовитом кортеже.
Насколько я видел, Storm не будет повторять кортеж (что само по себе вызывает исключение). По умолчанию будет продолжена обработка следующего кортежа. Тот же кортеж не будет повторяться, если в Spout не реализован метод сбоя.