Sobes.tech
Back to questions
Senior
4

Если про Kafka говорить, какую гарантию доставки поддерживаете?

Companies where asked
А7

Answer from AI

sobes.tech AI

В Kafka можно обеспечить три основных уровня гарантии доставки сообщений:

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

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

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

В Go при работе с Kafka (например, с помощью библиотеки sarama) можно настроить продюсер для идемпотентной отправки и использовать транзакции, чтобы обеспечить "exactly once". По умолчанию чаще всего используется "at least 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)
if err != nil {
    panic(err)
}
// Далее отправляем сообщения через producer