Я выполняю некоторую работу с POC с Kafka и изучаю функции «ровно один раз», используя транзакционный API, и все еще застрял на нескольких вопросах. Что произойдет, если потребитель выйдет из строя после обработки сообщения, но до фиксации его смещения? Кажется, что следующий запуск неизбежно начнется с неправильного сообщения, и будет получено дублирующее сообщение. Как мне справиться с этим сценарием?
Что произойдет, если потребитель выйдет из строя после обработки сообщения, но до фиксации его смещения?
Кафка: полное руководство упоминает опцию, согласно которой, если обработка сообщения включает в себя запись сообщений в БД, мы также можем записать обработанные смещения в БД и использовать это смещение на этапе восстановления путем поиска (seek()) смещения, из которого мы хотим опрос от Кафки.
Тем не менее, вы можете иметь уникальный идентификатор в каждом сообщении, чтобы потребители могли проверить, было ли сообщение обработано ранее или нет. Это (обработка дубликатов) всегда должно быть реализовано в коде потребителя.
Поэтому, если я не могу завершить обработку и сохранить смещения где-то атомарным образом, я не могу решить эту проблему. Это отстой, но это имеет смысл.