Ответ
Количество партиций — это компромисс между параллелизмом и накладными расходами. Это важнейший параметр, который нельзя уменьшить после создания топика.
Критерии выбора:
- Максимальный параллелизм потребителей: Один Consumer в группе может читать одну партицию. Для N Consumer'ов нужно минимум N партиций для полной параллельной обработки.
- Пропускная способность: Больше партиций позволяет распределить запись и чтение между большим числом брокеров.
- Накладные расходы: Каждая партиция — это директория на диске, открытые файлы и память в Zookeeper/Kraft. Слишком большое число (>100 на брокер) снижает производительность.
- Распределение по брокерам: Желательно, чтобы число партиций было кратно количеству брокеров для равномерного распределения.
Рекомендации и пример:
- Low load / тестовые топики: 1-3 партиции.
- High throughput: Рассчитайте как
(макс. число производителей * макс. число потребителей) / число брокеровс запасом.
// Создание топика с 6 партициями и фактором репликации 2
Properties props = new Properties();
props.put("bootstrap.servers", "broker1:9092,broker2:9092");
try (AdminClient admin = AdminClient.create(props)) {
NewTopic newTopic = new NewTopic("orders", 6, (short) 2);
admin.createTopics(Collections.singleton(newTopic));
}
Важно: Планируйте с запасом на рост, но избегайте чрезмерного завышения.