С какими гарантиями доставки в Kafka вы сталкивались, какие есть и с какими работал?
Ответ от нейросети
sobes.tech AI
В Apache Kafka есть три основных гарантии доставки сообщений:
-
At most once (не более одного раза) — сообщение может быть доставлено 0 или 1 раз. При этом возможна потеря сообщений, но дубликатов не будет.
-
At least once (как минимум один раз) — сообщение гарантированно будет доставлено, но может быть доставлено несколько раз (дубликаты возможны).
-
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)
Таким образом, выбор гарантии зависит от требований к надёжности и производительности системы.