Назад к вопросам
СБЕР
Senior
5
Какие есть стратегии доставки сообщений в Kafka и как они реализуются?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Kafka существуют три основные стратегии доставки сообщений:
-
At most once (не более одного раза)
- Сообщение может быть доставлено 0 или 1 раз.
- Используется, когда потеря сообщений допустима.
- Реализуется, когда продюсер не ждёт подтверждения от брокера (fire-and-forget).
-
At least once (минимум один раз)
- Сообщение гарантированно будет доставлено, но может быть доставлено несколько раз (дубликаты возможны).
- Это стандартный режим работы Kafka.
- Продюсер ждёт подтверждения записи сообщения (acks=all), а потребитель коммитит оффсеты после обработки.
-
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();
}
Таким образом, выбор стратегии зависит от требований к надёжности и допустимости дубликатов в системе.