Как сохранить в локальном хранилище сообщения, когда Kafka Producer не отправляет сообщение? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть 120 производителей данных с Kakfa Producer, они отправляют сообщения каждую секунду, и у некоторых есть разумные данные (я имею в виду, мы должны отправить их да или да), также эти производители иногда могут отключить или потерять соединение inte rnet, поэтому мне нужна отказоустойчивость у производителя. Я знаю, что существуют способы его отправки, синхронные и асинхронные, и они продолжают пытаться отправлять данные и сохранять их в памяти, когда этого не происходит, но если я хочу сохранить их на диске вместо буферной памяти, как мы можем это сделать. Как мы можем сохранить сообщения на диске, если они не отправлены? Как мы можем контролировать, когда производитель Kafka создает исключения?

Ответы [ 3 ]

0 голосов
/ 05 марта 2020

Вместо этого я бы предложил немедленно записывать в файлы.

Использовать такие инструменты, как Filebeat, Fluentbit, Flume и т. Д. c, работающие на каждой машине, чтобы затем передавать данные в Kafka

0 голосов
/ 05 марта 2020

Ваш вариант использования для Kafka неверен в этом сценарии. Я предлагаю сохранять данные в базе данных NO SQL вместо отправки в Kafka.

0 голосов
/ 05 марта 2020

Вы можете вставлять сообщения в таблицу базы данных в локальной транзакции. После этого с помощью потока вы можете отправлять сообщения, а после получения подтверждения от Kafka вы можете обновить отправленный столбец в таблице сообщений как true. Таким образом, ваша ветка должна постоянно читать сообщения из таблицы сообщений, для которой отправлено поле false, и отправлять сообщения в Kafka. (если у вас есть более одного экземпляра, экземпляр руководителя должен отвечать за отправку сообщений в Kafka во избежание дублирования)

Примечание: вы также можете использовать отдельный сервис для отправки сообщений в Kafka, как показано ниже.

enter image description here

Для получения дополнительной информации вы можете проверить это .

...