Sobes.tech
Назад к вопросам
Senior
6

С какими гарантиями доставки в Kafka вы сталкивались, какие есть и с какими работал?

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

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

sobes.tech AI

В Apache Kafka есть три основных гарантии доставки сообщений:

  1. At most once (не более одного раза) — сообщение может быть доставлено 0 или 1 раз. При этом возможна потеря сообщений, но дубликатов не будет.

  2. At least once (как минимум один раз) — сообщение гарантированно будет доставлено, но может быть доставлено несколько раз (дубликаты возможны).

  3. Exactly once (ровно один раз) — сообщение доставляется ровно один раз, без потерь и дубликатов. Это самая сложная гарантия, реализуемая с помощью идемпотентных продюсеров и транзакций.

С какими сталкивался:

  • Обычно используется гарантия at least once, когда продюсер подтверждает запись, а потребитель обрабатывает с сохранением оффсетов после успешной обработки.
  • Для критичных систем применялся режим exactly once с включёнными транзакциями, чтобы избежать дубликатов при сбоях.

Пример настройки продюсера для идемпотентности в Go (через библиотеку sarama):

config := sarama.NewConfig()
config.Producer.Idempotent = true
config.Producer.RequiredAcks = sarama.WaitForAll
config.Producer.Retry.Max = 5

producer, err := sarama.NewSyncProducer(brokers, config)

Таким образом, выбор гарантии зависит от требований к надёжности и производительности системы.