Получи случайную криптовалюту за регистрацию!

​Message brokers, часть 2: Kafka Если RabbitMQ — это 100% оче | Java: fill the gaps

Message brokers, часть 2: Kafka

Если RabbitMQ — это 100% очередь, то Kafka больше похожа на список, потому что данные после чтения не удаляются. В принципе это основное отличие двух брокеров, остальное — просто следствие.

Один список называется partition. Несколько partition можно объединить в группу, которая называется topic.

Консьюмеры читают данные из партишена или топика. Для каждого консюмера хранится индекс последнего прочитанного сообщения (offset). Когда получатель прочитает сообщение, Kafka сдвинет его offset. И в следующий раз этот получатель прочитает другие сообщения.

Если в partition 10 сообщений, то
Один консьюмер прочитает сразу всё
Другой прочитает 5 и потом ещё 5
Третий будет вычитывать по одному сообщению

И никто никому не мешает

В рамках одного partition все консюмеры читают сообщения в одном порядке. Иногда это очень важная фича. Для топика из нескольких partition такой гарантии нет.

Поскольку данные не удаляются при чтении, получаются немного другие схемы работы:

Если сообщение должны прочитать несколько однотипных получателей, достаточно записать их в один partition

Если получатели разнотипные, то продюсер должен добавить данные в несколько партишенов.
Пример: чтобы сообщение “A to C vip” прочитали C1 и C4, продюсер отправляет запись в топик orders и vip_orders.

Если нужно распределить сообщения по получателям, то консьюмеры объединяются в consumer group с общим оффсетом

Резюме

В Kafka сообщения не пропадают при чтении, их можно читать несколько раз и пачками
Гарантия порядка сообщений в рамках одного partition
Kafka занимает горааааздо больше места на диске
Kafka использует pull модель — получатели сами решают, когда забрать сообщения. В RabbitMQ инициатива исходит от очереди, чтобы равномерно распределять сообщения
Разные схемы общения с продюсерами и консьюмерами. На картинке ниже я представила аналог схемы из предыдущего поста
Разные сценарии масштабирования и отказоустойчивости
Субъективное мнение — в рэббите проще распределять сообщения по получателям. Kafka подходит для накопления данных и более сложных сценариев
Объективное — Kafka используется на бОльшем количестве проектов, пусть даже в качестве простой очереди

Общие черты двух брокеров:

Отлично поддерживаются спрингом
Можно настроить хранение сообщений на диске
Нужно супер тщательно продумать схему работы и масштабирование

PS Эти посты — самые основы месседж брокеров, прямо вот верхушечка. Для дальнейшего изучения подойдёт эта серия статей, книги "RabbitMQ in Action" и "Kafka in Action".