Что такое At Least Once

«Что такое At Least Once» — вопрос из категории Брокеры сообщений, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

At Least Once — это семантика доставки сообщений, гарантирующая, что сообщение будет обработано минимум один раз, но возможны дубликаты.

Пример с Kafka и Golang:

for {
    msg, err := consumer.ReadMessage(ctx)
    if err != nil {
        log.Printf("Consumer error: %v", err)
        continue // Retry
    }
    process(msg) // Может выполниться несколько раз при ретраях
    consumer.CommitMessage(msg) // Явное подтверждение
}

Нюансы:

  • Нужна идемпотентность обработки (повторные вызовы не ломают логику).
  • Сетевые ошибки или рестарт потребителя могут привести к повторной доставке.
  • Часто используется в системах, где потеря данных недопустима (платежи, логирование).

Альтернативы: At Most Once (быстро, но возможны потери) и Exactly Once (сложно, требует координации).