Кафка Производитель Failover - PullRequest
0 голосов
/ 03 декабря 2018

Я пишу Kafka Producer, который использует HDFS INotify API для мониторинга определенного каталога и отправки сообщений в тему, когда файлы добавляются в этот каталог.

Заглядывая вперед, я думаю использоватьsupervisord (или аналогичный), чтобы всегда был запущен экземпляр производителя.Однако, я не могу гарантировать, что я не пропускаю изменения FS во время перезапуска производителя.Я знаю, что HDFS позволяет мне вручную устанавливать lastReadTXid при получении потока событий.Я хочу иметь возможность начать с этого смещения, когда производитель перезапускается.

Я полагаю, что в сообщении, которое я отправлю по теме, будет путь к новому файлу в качестве ключа и TXid в качестве значения.

У меня есть несколько идей:

Идея 1 - Написать моему собственному руководителю.Моя программа запускает другой поток / процесс, который является производителем.Родительский процесс поддерживает TXid и будет обрабатывать запуск другого потока / процесса производителя в случае сбоя первого.Однако я сталкиваюсь с той же проблемой.В случае сбоя родительского процесса последний TXid теряется и существует вероятность потери транзакций.

Идея 2 - Производитель каким-то образом может проверить последнее отправленное сообщение по теме.Я вижу последнее отправленное значение (последний TXid) и запускаю поток событий с этой точки.

Идея 3 - Есть 2 продюсера, которые оба выпускают по одной и той же теме.Один будет лидером, а другой - репликой.В случае сбоя одного из них есть еще один, который продолжит генерировать сообщения во время перезапуска первого.Проблема, с которой я сталкиваюсь, заключается в том, что в теме теперь отправляются повторяющиеся сообщения.

Может ли кто-нибудь указать мне правильное направление?

...