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

Какие есть стратегии доставки сообщений в Kafka и как они реализуются?

Компании, где спрашивали
СБЕРСБЕР

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

sobes.tech AI

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

  1. At most once (не более одного раза)

    • Сообщение может быть доставлено 0 или 1 раз.
    • Используется, когда потеря сообщений допустима.
    • Реализуется, когда продюсер не ждёт подтверждения от брокера (fire-and-forget).
  2. At least once (минимум один раз)

    • Сообщение гарантированно будет доставлено, но может быть доставлено несколько раз (дубликаты возможны).
    • Это стандартный режим работы Kafka.
    • Продюсер ждёт подтверждения записи сообщения (acks=all), а потребитель коммитит оффсеты после обработки.
  3. Exactly once (ровно один раз)

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

Пример настройки продюсера для "exactly once":

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

producer.initTransactions();
try {
    producer.beginTransaction();
    producer.send(new ProducerRecord<>("topic", "key", "value"));
    producer.commitTransaction();
} catch (Exception e) {
    producer.abortTransaction();
}

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