Kafka потребляет необработанные сообщения. Как позже переработать неработающие сообщения?

Мы реализуем Kafka Consumer с помощью Spring Kafka. Как я правильно понимаю, если обработка одного сообщения не удалась, есть возможность

  • Все равно и просто ACK
  • Сделайте некоторую обработку повторных попыток, используя RetryTemplate
  • Если даже это не сработает, выполните некоторую пользовательскую обработку сбоев, используя RecoveryCallback

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

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

Как вы справляетесь с этими сценариями?


person Stefano L    schedule 25.08.2017    source источник


Ответы (2)


Одним из примеров является Spring Cloud Stream, который можно настроить для публикации неудачных сообщений в другой теме error.foo; затем пользователи могут скопировать их обратно в исходную тему, чтобы повторить попытку позже.

Эта логика выполняется в обратном вызове восстановления.

person Gary Russell    schedule 25.08.2017

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

person moon    schedule 27.08.2017