Назад к вопросам
Senior
6
Какую гарантию доставки будем использовать в Kafka?
Компании, где спрашивали
purrweb
Ответ от нейросети
sobes.tech AI
В Kafka обычно используют гарантию доставки "at least once" (по крайней мере один раз). Это означает, что сообщение будет доставлено потребителю минимум один раз, но возможны дубликаты при сбоях. Для повышения надежности и предотвращения потери данных Kafka использует подтверждения (acks), где можно настроить уровень подтверждения:
- acks=0 — продюсер не ждёт подтверждения (наименее надёжно)
- acks=1 — подтверждение от лидера партиции
- acks=all (или -1) — подтверждение от всех реплик (максимальная надёжность)
Для обеспечения "exactly once" доставки требуется дополнительная логика на стороне потребителя и использование транзакций в Kafka, что сложнее и не всегда оправдано.
Пример настройки продюсера в Go с гарантией доставки "at least once":
producer, err := sarama.NewSyncProducer(brokers, &sarama.Config{
Producer: sarama.ProducerConfig{
RequiredAcks: sarama.WaitForAll, // acks=all
Retry: sarama.NewRetry(5),
},
})