Выбор ответа Senior Kafka в Spring обновлено
Exactly-once с базой данных
Вопрос
Потребитель читает из Kafka и пишет в PostgreSQL. Как добиться эффекта exactly-once?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: At-least-once и запись id сообщения в той же транзакции БД. Транзакции Kafka охватывают только запись в Kafka и коммит offset, внешнюю базу они не включают.
Варианты ответа
- Включить транзакции Kafka (
transactional.id) у потребителя - At-least-once и запись id сообщения в той же транзакции БДправильный ответ
- Поставить
enable.auto.commit=trueс коротким интервалом - Использовать acks=all и идемпотентность на продюсере
Разбор
Транзакции Kafka охватывают только запись в Kafka и коммит offset, внешнюю базу они не включают. Поэтому для БД эффект exactly-once достигается идемпотентностью: уникальный id сообщения в таблице обработанных в той же транзакции, что и бизнес-изменение. Автокоммит может закоммитить offset до обработки. acks=all про надёжность записи продюсером.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.