В архитектуре систем Кафка выступает в роли очереди сообщений: она принимает сообщения от продюсеров, а читают из нее консьюмеры.
Но технически Кафка — не очередь как RabbitMQ или Active MQ, а распределенный реплицируемый лог.
Сообщения в Кафке группируются по топикам, а топики разбиты на партиции.
Топик — это логическая группировка сообщений. Например, топик
orders, куда поступают все заказы.Партиция — это физическая группировка сообщений с четкой последовательностью. На диске каждая партиция живёт в отдельной папке.
Например, если топик
orders имеет 3 партиции, физически это будут папки:
orders-1
orders-2
Партиция — это не один файл, а цепочка сегментов. Сегмент состоит из файлов: файл с данными, файл с индексом смещений и файл с индексом по меткам времени.
Кафка гарантирует порядок сообщений в рамках одной партиции, но не в рамках топика.
Порядок сообщений в партиции гарантируется, потому что сообщения последовательно дописываются в файлик .log последнего активного сегмента этой партиции.
Партиции используются для масштабирования. Если у нас много заказов, то мы можем одновременно писать разные заказы в разные партиции, а затем параллельно обрабатывать заказы из разных партиций.
Количество партиций у топика задается при его создании.
Можно ли добавить или удалить партиции потом?
✅ Добавить партиций — да, можно.
Если мы определяли сообщение в конкретную партицию по ключу, то при изменении числа партиций сообщения с этим же ключом могут попасть уже в другую партицию. Подробнее рассмотрим этот момент в посте про продюсеров.
❌ Уменьшить количество партиций в топике нельзя. Тут только создавать новый топик с нужным количеством и переключаться на него.
#kafka