Начиная с 0.11, Kafka Streams предлагает одноразовые гарантии, но их определение «конец» в сквозной теме кажется «темой Кафки».
Для приложений реального времени первый «конец», как правило, не тема Кафки, а какое-то приложение, которое выводит данные - возможно, через несколько уровней и сетей - в тему Кафки.
Так Кафка предлагает что-то, что можно добавить в тему ровно один раз, перед лицом сбоев в сети, сбоев и перезапусков приложений? Или я должен использовать семантику Кафки, по крайней мере, один раз, и дедуплицировать эту тему с потенциальными дубликатами в другую точно такую же тему, используя какой-то уникальный идентификатор?
Редактировать В связи с популярностью, вот конкретный случай использования. У меня есть клиент C, который создает сообщения и отправляет их на сервер S, который использует KafkaProducer
для добавления этих сообщений в тему Kafka T.
Как я могу гарантировать, в лице
- падения C, S и членов кластера Kafka
- временные проблемы с сетью
что все сообщения, которые создает C, попадают в T ровно один раз (и - для каждого раздела - в правильном порядке)?
Я бы, конечно, заставил C переслать все сообщения, для которых он не получил подтверждение от S -> хотя бы один раз. Но чтобы сделать это ровно один раз, сообщения, которые отправляет C, должны содержать какой-то идентификатор, чтобы можно было выполнить дедупликацию. Я не знаю, как мне это сделать с Кафкой.