Выбор ответа Senior Kafka в Spring обновлено

Exactly-once с базой данных

Вопрос

Потребитель читает из Kafka и пишет в PostgreSQL. Как добиться эффекта exactly-once?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: At-least-once и запись id сообщения в той же транзакции БД. Транзакции Kafka охватывают только запись в Kafka и коммит offset, внешнюю базу они не включают.

Варианты ответа

  1. Включить транзакции Kafka (transactional.id) у потребителя
  2. At-least-once и запись id сообщения в той же транзакции БДправильный ответ
  3. Поставить enable.auto.commit=true с коротким интервалом
  4. Использовать acks=all и идемпотентность на продюсере

Разбор

Транзакции Kafka охватывают только запись в Kafka и коммит offset, внешнюю базу они не включают. Поэтому для БД эффект exactly-once достигается идемпотентностью: уникальный id сообщения в таблице обработанных в той же транзакции, что и бизнес-изменение. Автокоммит может закоммитить offset до обработки. acks=all про надёжность записи продюсером.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме