В чем разница между At Most Once и At Least Once гарантией доставки

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

Ответ

At Most Once гарантирует, что сообщение будет доставлено не более одного раза (может быть потеряно).
At Least Once гарантирует, что сообщение доставлено хотя бы один раз (возможны дубли).

Пример в Go с Kafka (At Least Once):

producer, _ := sarama.NewSyncProducer(brokers, config)
msg := &sarama.ProducerMessage{
    Topic: "test",
    Value: sarama.StringEncoder("message"),
}
_, _, err := producer.SendMessage(msg) // Повторные попытки при ошибке

Для At Most Once можно отключить подтверждения:

config.Producer.RequiredAcks = sarama.NoResponse // Отправка без ожидания подтверждения

At Least Once требует идемпотентности обработки, At Most Once — более быстрый, но менее надежный.