Вопрос проверяет знание очередей сообщений и их различий в гарантиях доставки.
RabbitMQ ориентирован на at-most-once и at-least-once, с подтверждением доставки через ack/nack. Kafka проектировалась для at-least-once, а с идемпотентностью и transactional producer — для exactly-once.
RabbitMQ:
Сообщение подтверждается ack после обработки.
Если consumer упал до ack → сообщение доставят снова (at-least-once).
Можно включить auto-ack → риск потери (at-most-once).
Exactly-once нет.
Kafka:
Сообщение хранится на диске.
Consumer управляет offset.
По умолчанию — at-least-once (offset после обработки).
Можно добиться exactly-once с transactional producer и idempotent consumer.
producer := kafka.NewProducer(config)
producer.InitTransactions()
producer.BeginTransaction()
producer.Produce(msg)
producer.CommitTransaction()Вывод:
RabbitMQ — надёжная очередь, но без exactly-once.
Kafka — стриминговая платформа, где exactly-once достижим, но с накладными расходами.
Уровень
Рейтинг:
4
Сложность:
7
Навыки
RabbitMQ
Kafka
Ключевые слова
Подпишись на Golang Developer в телеграм