2013-08-12 4 views
4

Я запускаю 0,8 Kafka и создаю продюсера, используя предоставленный Java API.
Функции API для отправки сообщения (или сообщений) возвращают пустоту.Kafka - производитель - ручка «не удалось отправить»

Есть ли способ получить статус отправленного сообщения? Если он отправлен или не прошел?

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

+0

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

+0

Функция «Отправить» - это aSync (возврат немедленно, когда фактическая отправка происходит позже по другому потоку.), Поэтому исключений не существует. –

ответ

2

Вы можете настроить своего продюсера до тех пор, пока он не будет удален из кластера Kafka (request.required.acks), чтобы у вас была какая-то гарантия того, что данные были исправлены должным образом перед удалением исходного файла.

Если действительно, вы должны быть уверены, что сообщение отправлено успешно, вы можете рассмотреть альтернативу тому, чтобы сделать синхронный процесс производителем (производитель.type = sync). Таким образом, вы сможете поймать любое исключение, вызванное вызовом блокировки, и действовать соответствующим образом. Исключением, отправленным send(), является kafka.common.FailedToSendMessageException.

API Java Kafka не идеален, надеюсь, что это вам поможет.

+0

Yeap, я оставил его там и возвращаюсь к нему в последнее время, и вы правы. «Type = sync» - единственный способ гарантировать, что сообщение было отправлено, но которое снижает производительность, как ад. Мы ищем разные очереди на данный момент. –

 Смежные вопросы

  • Нет связанных вопросов^_^