Мы используем Storm с кафкой. Когда мы терпим неудачу в сообщениях, мы хотели бы их воспроизвести, но в некоторых случаях плохие данные или ошибки кода заставят сообщения всегда терпеть неудачу с Bolt, поэтому мы перейдем в бесконечный цикл повтора. Очевидно, что мы исправляем ошибки, когда находим их, но хотим, чтобы наша топология была, как правило, отказоустойчивой. Как мы можем() привязать кортеж после повторного воспроизведения более N раз?Максимальное количество повторений кортежей на Storm Kafka Spout
Просматривая код для Кафки носика, я вижу, что он был разработан, чтобы повторить попытку с экспоненциальным таймером задержки и comments on the PR состояния:
«Носик не завершает цикл повторных попыток (это мое убеждение, что он не должен этого делать, потому что он не может сообщать о том, что произошел сбой, связанный с отменой повторения), он обрабатывает только задержку повторных попыток. Болт в топологии, по-прежнему ожидается, в конечном итоге вызовет ack() вместо fail(), чтобы остановить цикл."
Я видел ответы StackOverflow, которые рекомендуют писать пользовательский носик, но я бы предпочел не зацикливаться на сохранении пользовательского патча внутренних частей Kafka Spout, если есть рекомендуемый способ сделать это в Bolt.
Каков правильный способ сделать это в болте? Я не вижу никакого состояния в кортеже, которое разоблачает, сколько раз оно было воспроизведено.
Если у вас есть проверка ошибок в болте, где вы можете сделать вывод, что конкретный кортеж «плохой» по вашей бизнес-логике, вы можете «подписать» вместо отказа ... поэтому он не будет воспроизводиться .. ... –