Встречается на собеседованиях • сегодня

Как спроектировать приложение Kafka для обработки сообщения строго один раз

Для обеспечения обработки сообщений строго один раз в Kafka нужно комбинировать идемпотентность продюсера, транзакции и дедупликацию на стороне консьюмера.

Идемпотентный продюсер (enable.idempotence=true) гарантирует, что сообщение будет доставлено ровно один раз даже при ретраях:

java
props.put("enable.idempotence", "true");

Транзакции позволяют атомарно записывать в несколько партиций:

java
producer.initTransactions();
producer.beginTransaction();
producer.send(record1);
producer.send(record2);
producer.commitTransaction();

Дедупликация на консьюмере:

  1. Хранить обработанные messageId в БД
  2. Перед обработкой проверять их наличие
  3. Использовать isolation.level=read_committed для чтения только закоммиченных сообщений

Пример консьюмера:

java
if (!isProcessed(message.id())) {
    process(message);
    markAsProcessed(message.id());
}

Важно: такой подход требует устойчивого хранилища для дедупликации и увеличивает накладные расходы.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы