Зачем в Kafka нужны партиции внутри топиков
Что проверяют
Понимаете ли вы, что партиция это единица параллелизма и порядка одновременно, и знаете ли следствия этого.
Как отвечать
Тема делится на партиции, каждая это отдельный упорядоченный журнал на своём брокере.
Зачем это нужно:
- параллелизм: разные партиции читаются и пишутся независимо, поэтому пропускная способность растёт с их числом. Внутри группы потребителей каждая партиция закреплена ровно за одним потребителем, значит число потребителей полезно увеличивать только до числа партиций, дальше лишние простаивают;
- масштабирование хранения: тема больше не ограничена диском одного брокера;
- порядок: гарантируется внутри партиции, а не по теме целиком. Это ключевая деталь.
Отсюда роль ключа: сообщения с одним ключом попадают в одну партицию, поэтому события одного заказа или одного пользователя обрабатываются по порядку. Без ключа сообщения распределяются равномерно, и порядок между ними не определён.
Практические следствия, которые стоит назвать:
- число партиций легко увеличить и нельзя уменьшить, а увеличение ломает привязку ключей: одинаковый ключ после расширения может уйти в другую партицию;
- перекос ключей даёт горячую партицию, которая становится узким местом;
- перебалансировка при добавлении и удалении потребителей временно останавливает обработку;
- репликация настраивается на партицию: у каждой есть лидер и последователи.
Где спотыкаются
Считают, что Kafka гарантирует глобальный порядок в теме.
Ставят потребителей больше, чем партиций, и удивляются простою.
Не задают ключ там, где порядок важен.
Планируют уменьшить число партиций, не зная, что это невозможно.