Весь блок «Гонец» строился на Kafka, и в прошлом уроке мы связали ею микросервисы. Но Kafka не единственный брокер сообщений, и бывает, что она не лучший выбор. Сегодня сравним её с тремя частыми соседями: RabbitMQ, Pulsar и Redpanda. Цель не выучить их все, а понять, по каким вопросам выбирать.
Почта, газетный архив и доставка на дом
Посылку можно передать тремя способами.
Почтовое отделение принимает посылку, сортирует по адресам и отдаёт получателю. Получил, расписался, посылки на почте больше нет. Почта умеет хитро сортировать: срочное отдельно, хрупкое отдельно, в этот город через тот склад.
Газетный архив хранит все номера по порядку. Любой читатель приходит и читает с любого номера, и прочитанный номер остаётся для следующего. Сортировать по адресам архив не умеет: он просто хранит всё подряд.
А ещё бывает архив, у которого читальный зал в одном здании, а хранилище в другом, и залы можно добавлять, не перевозя хранилище.
Почта это RabbitMQ, архив это Kafka, архив с отдельным хранилищем это Pulsar. О Redpanda чуть ниже: это тот же архив Kafka, только построенный иначе внутри.
RabbitMQ: очередь с умной сортировкой
RabbitMQ это классическая очередь сообщений. Продюсер отправляет сообщение не в очередь, а в обменник, а тот по правилам раскладывает его по очередям: по точному ключу, по шаблону, всем очередям сразу. Потребитель забирает сообщение, подтверждает обработку, и сообщение исчезает из очереди.
Чем хорош:
- Маршрутизация по правилам. «Заказы из Екатеринбурга в одну очередь, из Тюмени в другую, все отмены ещё и в аудит» настраивается без кода потребителей.
- Очередь задач из коробки. Несколько обработчиков берут задачи из одной очереди, каждую получает ровно один, неподтверждённая задача вернётся в очередь.
- Проще начать. Один сервер, понятная модель, веб-панель управления.
Чего нет в классической очереди: перечитать историю нельзя, прочитанное удалено. Для этого в RabbitMQ появились Streams: очередь, устроенная как лог Kafka, с чтением с любого места. Но вокруг Kafka экосистема для потоков намного больше: Connect, Streams, ksqlDB.
Pulsar: отдельно брокеры, отдельно хранилище
Apache Pulsar тоже хранит сообщения как лог, но устроен иначе. В Kafka брокер и обслуживает клиентов, и хранит партиции на своём диске. В Pulsar эти роли разделены: брокеры только принимают и отдают сообщения, а данные лежат в отдельном кластере хранения BookKeeper, кусками, разложенными по многим узлам.
Что это даёт: брокеры можно добавлять и убирать без перекладывания данных, а лог одного топика не упирается в диск одного сервера. Ещё Pulsar умеет из коробки и лог, и очередь: тип подписки решает, читают ли сообщения по порядку или раздают по разным потребителям.
Плата за это сложность: вместо одного вида серверов у тебя брокеры, узлы BookKeeper и хранилище метаданных. Pulsar выбирают большие компании с жёсткими требованиями к мультиарендности и репликации между дата-центрами. Новичку и небольшой команде он обычно избыточен.
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.