Потребитель Кафки с DLQ и ElasticSearch - PullRequest
0 голосов
/ 19 октября 2018

У меня есть следующий кластер:

Kafka -> какой-нибудь сборщик журналов -> Elasticsearch

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

Я пытаюсь выбрать из Logstash , Fluentd и Разъём Kafka Elasticsearch от Confluent .Основная проблема, с которой я сталкиваюсь, - это невозможность смещения отката в Kafka после проблем с записью в конечную точку Elasticsearch.

Например, в logstash doc говорится, что " 400 и 404 ошибок отправляются в очередь недоставленных сообщений (DLQ), если она включена. Если DLQ не включен, будет отправлено сообщение журнала, а событие будет удалено "(https://www.elastic.co/guide/en/logstash/6.x/plugins-outputs-elasticsearch.html#_retry_policy). Если у меня есть такойошибка, logstash будет продолжать читать данные из Kafka. Ошибка будет возникать снова и снова. Хотя все мои данные будут сохранены в DLQ, смещение Кафки будет перемещено далеко от позиции, когда произошла первая ошибка. Я бычтобы определить правильное смещение вручную.

Итак, мой вопрос: есть ли какой-либо соединитель для Kafka и ElasticSearch, который позволяет остановить перемещение смещения после получения первой ошибки от ElasticSearch (400/404)?

Заранее спасибо.

1 Ответ

0 голосов
/ 19 октября 2018

Я не думаю, что вопрос касается эффективности, а скорее надежности

Основная проблема, с которой я сталкиваюсь, - это невозможность отката смещения в Kafka после проблем с записью в конечную точку Elasticsearch.

У меня нет большого опыта работы с функциями DLQ в Connect или Logstash, но сброс смещения группы потребителей не является невозможным.Однако в этом нет необходимости, если приложение потребителя правильно обрабатывает смещения.

Если Connect выдает ошибку подключения к ES, он будет повторять, а не фиксировать смещения.

Если ошибка не может быть исправлена, то Connect перестанет потреблять и снова не будет фиксировать смещения.

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

Если DLQ отключен, единственный способ потерять данные будет, если он истекает из Kafka

...