Сначала ответь вслух
Скажи ответ вслух хотя бы пару минут, потом открой эталон и сравни. Эталон открыт всем и не требует входа.
Показать ответ
Эталонный ответ
- At-most-once: потребитель фиксирует смещение до обработки. Упал после фиксации — сообщение потеряно.
- At-least-once: сначала обработка, потом фиксация смещения. Упал между ними — сообщение обработается повторно.
- Exactly-once: идемпотентный продюсер убирает дубли от повторов отправки, а транзакции атомарно пишут сообщения и смещения потребителя.
props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true); // по умолчанию с Kafka 3.0
props.put(ProducerConfig.ACKS_CONFIG, "all");
props.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, "orders-processor-1");Потребители транзакционных сообщений читают с isolation.level=read_committed, чтобы не видеть данные отменённых транзакций.
Как у тебя получилось?
Уточняющие вопросы
Так обычно копают глубже. Раскрой строку, когда ответишь вслух.
Уточнение 1-го уровня: Распространяется ли exactly-once на запись в базу?
Ответ уровня Senior
Нет: транзакция Kafka не охватывает внешнюю базу. Нужен идемпотентный потребитель или хранение смещений в той же базе и в той же транзакции, что и результат.
Типичные ошибки
- Считать, что exactly-once Kafka избавляет от дублей в базе.
- Включать автофиксацию смещений и считать доставку at-least-once.
Первоисточники
Быстрые задания по теме
Для темы «Гарантии доставки» быстрых заданий пока нет
Можно проверить всю зону «Kafka» тестом на 10 минут.
Проверить себя за 10 минут