Rabbit или Kafka?
- этот вопрос я задаю на собеседовании с продолжением: а что бы вы выбрали для нашей задачи?
Названия знают все. Объяснить выбор получается у немногих.
Беру простой кейс. Бариста отметил заказ готовым, и нужно сделать две вещи: прислать гостю пуш и начислить бонусы. Два получателя, сообщение важно доставить, хранить его потом незачем.
Здесь хватит RabbitMQ. В нём сообщение уходит одному получателю: сервис забрал его из очереди, и оттуда оно удаляется. На два действия делаем две очереди, и всё.
Потом усложняю. Событие о заказе нужно ещё складу, аналитике и каталогу, а аналитика хочет перечитать события за прошлую неделю.
Тут уже Kafka. Сообщение лежит в топике, подписаться на него может сколько угодно сервисов, и каждый читает со своего оффсета, при необходимости отматывает назад.
На Rabbit такое тоже собирают, только каждому подписчику нужна своя очередь и своя доставка. Пять сервисов - пять копий сообщения.
Хороший ответ начинается с вопросов к задаче: сколько получателей, нужна ли история, что будет, если сообщение придёт дважды. Инструмент выбирается уже после них.
А вы с какого вопроса начали бы выбор?