Как выбрать количество партиций для топика в Kafka?

«Как выбрать количество партиций для топика в Kafka?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Количество партиций — это компромисс между параллелизмом и накладными расходами. Это важнейший параметр, который нельзя уменьшить после создания топика.

Критерии выбора:

  1. Максимальный параллелизм потребителей: Один Consumer в группе может читать одну партицию. Для N Consumer'ов нужно минимум N партиций для полной параллельной обработки.
  2. Пропускная способность: Больше партиций позволяет распределить запись и чтение между большим числом брокеров.
  3. Накладные расходы: Каждая партиция — это директория на диске, открытые файлы и память в Zookeeper/Kraft. Слишком большое число (>100 на брокер) снижает производительность.
  4. Распределение по брокерам: Желательно, чтобы число партиций было кратно количеству брокеров для равномерного распределения.

Рекомендации и пример:

  • 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));
}

Важно: Планируйте с запасом на рост, но избегайте чрезмерного завышения.