Назад к вопросам
Middle+
2
Гарантии доставки в Kafka — что знаешь?
Компании, где спрашивали
Magnit Tech
Ответ от нейросети
sobes.tech AI
В Kafka есть несколько уровней гарантий доставки сообщений:
- At most once (не более одного раза) — сообщение может быть потеряно, но не дублируется. Обычно при отключении продюсера до подтверждения.
- At least once (минимум один раз) — сообщение гарантированно доставляется, но может быть дублирование при повторной отправке.
- 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 позволяет гибко настраивать баланс между производительностью и надёжностью доставки.