Могут ли возникнуть проблемы при большом количестве партиций у брокера Kafka и какие
Что проверяют
Понимаете ли вы, что число партиций это не бесплатная ручка параллелизма, и знаете ли, чем платит кластер. Вопрос отсеивает тех, кто ставил партиции «с запасом». Следом уточняют, сколько партиций на брокера считать нормой и почему их нельзя уменьшить.
Как отвечать
Разложите проблемы по подсистемам:
- файлы и диск: каждая партиция это каталог сегментов, у каждого сегмента
.log,.index,.timeindex. Растёт число дескрипторов, а последовательная запись превращается в набор параллельных потоков и теряет преимущество; - продюсер: буфер выделяется на каждую партицию в пределах
buffer.memory, при широком распределении батчи не набираются доbatch.size, растёт число мелких запросов и падает эффективность сжатия. Частично лечится ростомlinger.msценой задержки; - консьюмер:
max.partition.fetch.bytesумножается на число назначенных партиций, растёт память. Параллелизм всё равно ограничен: в группе на партицию приходится максимум один консьюмер, лишние простаивают; - репликация: на каждую партицию идёт своя выборка от фолловеров и учёт ISR, между брокерами течёт больше запросов;
- отказ брокера: контроллер переизбирает лидеров для всех его партиций, при десятках тысяч это заметная пауза, а нештатное выключение добавляет восстановление логов при старте;
- сквозная задержка: сообщение становится видимым после подтверждения репликами, и на перегруженном кластере это время растёт.
Про метаданные важно ответить современно: раньше потолок задавал ZooKeeper, но в Kafka 4.0 он удалён совсем, метаданные живут в KRaft, и допустимое число партиций выросло на порядки. Считать всё равно нужно от пропускной способности и числа консьюмеров, а не «побольше на будущее».
Где спотыкаются
Описывают ZooKeeper как действующую архитектуру. Для версий 4.x это прямая ошибка.
Ставят партиции с запасом, забывая, что уменьшить их нельзя, только пересоздать топик. А увеличение ломает порядок по ключу: старые записи остаются в прежних партициях, новые уходят в другие.
Считают, что больше партиций всегда быстрее, и не смотрят на состав группы: лишние консьюмеры простаивают, а при нехватке каждый тянет по несколько разделов.