Senior
Quale garanzia di consegna useremo in Kafka?
sobes.tech AI
Risposta dell'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),
},
})