Sobes.tech
Назад к вопросам
Middle+
2

Гарантии доставки в Kafka — что знаешь?

Компании, где спрашивали
Magnit Tech

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

sobes.tech AI

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

  1. At most once (не более одного раза) — сообщение может быть потеряно, но не дублируется. Обычно при отключении продюсера до подтверждения.
  2. At least once (минимум один раз) — сообщение гарантированно доставляется, но может быть дублирование при повторной отправке.
  3. Exactly once (ровно один раз) — сообщение доставляется и обрабатывается ровно один раз, без дубликатов.

Для обеспечения этих гарантий Kafka использует:

  • acks — параметр продюсера, который определяет, сколько реплик должно подтвердить запись (0, 1, all).
  • Идентификаторы сообщений и оффсеты — для отслеживания позиции чтения.
  • Транзакции — для реализации exactly-once семантики при записи и обработке сообщений.

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

producer, _ := sarama.NewSyncProducer(brokers, &sarama.Config{
    Producer: sarama.ProducerConfig{
        RequiredAcks: sarama.WaitForAll, // ждём подтверждения от всех реплик
        Retry: sarama.ProducerRetry{
            Max: 5, // повторные попытки
        },
    },
})

Таким образом, Kafka позволяет гибко настраивать баланс между производительностью и надёжностью доставки.