Sobes.tech
Back to questions
Senior
5

Какую гарантию доставки будем использовать в Kafka?

Companies where asked
purrweb

Answer from AI

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),
    },
})