Sobes.tech
Назад к вопросам
Senior
5

Расскажите про семантики доставки в Kafka (at most once, at least once, exactly once)

Компании, где спрашивали
РТК ИТ

Ответ от нейросети

sobes.tech AI

В Kafka существуют три основных семантики доставки сообщений:

  • At most once (не более одного раза) — сообщение может быть доставлено либо один раз, либо не доставлено вовсе. Это достигается, когда продюсер не ждет подтверждений от брокера, и сообщения могут потеряться при сбоях. Используется, когда важна скорость, а потеря данных допустима.

  • At least once (минимум один раз) — сообщение гарантированно будет доставлено, но может быть доставлено несколько раз (дубликаты возможны). Продюсер ждет подтверждения от брокера, и при сбоях повторяет отправку. Это стандартная семантика Kafka.

  • Exactly once (ровно один раз) — сообщение доставляется строго один раз без дубликатов. В Kafka это реализуется через идемпотентность продюсера и транзакции, позволяющие атомарно записывать сообщения и коммитить оффсеты потребителей.

Пример включения идемпотентности в Java Kafka Producer:

Properties props = new Properties();
props.put("enable.idempotence", "true");
KafkaProducer<String, String> producer = new KafkaProducer<>(props);

Таким образом, выбор семантики зависит от требований к надежности и производительности системы.