← Назад к вопросам

При кластере Kafka из 3 брокеров, какое максимальное количество партиций мы можем создать для одного топика

3.0 Senior🔥 11 комментариев
#Брокеры сообщений

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Максимальное количество партиций Kafka в кластере из 3 брокеров

Ответ: Теоретически неограниченное количество, но есть практические ограничения.

Вопрос кажется простым, но требует понимания архитектуры Kafka и её ограничений.

Теория

В Kafka нет встроенного ограничения на количество партиций. Ты можешь создать 100, 1000 или миллион партиций для одного топика — Kafka позволит.

import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.NewTopic;

AdminClient admin = AdminClient.create(props);
NewTopic topic = new NewTopic(
    "my-topic",
    100000,  // количество партиций
    (short) 3  // factor репликации
);
admin.createTopics(Collections.singleton(topic));

Практические ограничения

1. Репликация

Если ты указываешь factor репликации = 3, каждая партиция будет скопирована на 3 брокера. Но у тебя только 3 брокера!

# Топик с 3 партициями, репликация 3:
# Partition 0: Broker 0, Broker 1, Broker 2
# Partition 1: Broker 1, Broker 2, Broker 0
# Partition 2: Broker 2, Broker 0, Broker 1

Это идеально. Но если создашь 4-ю партицию:

# Partition 3: Broker 0, Broker 1, Broker 2  (снова те же 3)

Репликация будет, но распределение не оптимальное.

2. Рекомендация Confluent

Максимум 4000 партиций на один брокер — это рекомендация от создателей Kafka (на практике может быть и больше, но начинаются проблемы).

Для кластера из 3 брокеров:

  • 3 брокера × 4000 партиций/брокер = 12000 максимум

3. Что происходит, если превышить лимит

  • Медленный лидер выборов (leader election) — с 10000+ партиций выборы занимают минуты
  • Медленный рестарт брокера — при падении брокера восстановление долгое
  • Высокое потребление памяти — каждая партиция требует памяти
  • Увеличение задержки — при отправке сообщений
  • Проблемы с метаданными — ZooKeeper/KRaft может не успевать

4. Памяти на брокере

Каждая партиция занимает память (~5 МБ метаданных минимум):

1000 партиций × 5 МБ = 5 ГБ памяти только на метаданные

Для 3 брокеров с 16 ГБ памяти каждый:

16 ГБ × 3 = 48 ГБ всего
48 ГБ ÷ 5 МБ/партиция = ~9600 партиций максимум

Лучшая практика

Для 3 брокеров оптимально 3-12 партиций на топик.

Логика:

  • Количество партиций = количество брокеров или больше (для параллелизма)
  • Один consumer group может обрабатывать одновременно столько же потребителей, сколько партиций
int numBrokers = 3;
int numPartitions = numBrokers * 2;  // 6 партиций — хороший выбор
int replicationFactor = 2;  // или 3 для надёжности

NewTopic topic = new NewTopic(
    "my-topic",
    numPartitions,
    (short) replicationFactor
);

Пример: 3 партиции vs 12 партиций

С 3 партициями:

Topic: my-topic (3 partitions, replication-factor: 3)
  Topic: my-topic  Partition: 0    Leader: 0   Replicas: [0,1,2]
  Topic: my-topic  Partition: 1    Leader: 1   Replicas: [1,2,0]
  Topic: my-topic  Partition: 2    Leader: 2   Replicas: [2,0,1]

✓ Идеальное распределение
✓ Быстрое восстановление
✗ Параллелизм ограничен (max 3 потребителя)

С 12 партициями:

Topic: my-topic (12 partitions, replication-factor: 3)
  Partition 0-3: Leader на Broker 0
  Partition 4-7: Leader на Broker 1
  Partition 8-11: Leader на Broker 2

✓ Хороший параллелизм (до 12 потребителей)
✓ Лучше масштабируется при добавлении брокеров
✗ Больше нагрузка при выборе лидера
✗ Больше метаданных

Code: Проверка конфигурации

import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.DescribeClusterResult;
import org.apache.kafka.clients.admin.DescribeTopicsResult;

public class KafkaClusterInfo {
    public static void main(String[] args) throws Exception {
        AdminClient admin = AdminClient.create(props);
        
        // Информация о кластере
        DescribeClusterResult cluster = admin.describeCluster();
        System.out.println("Брокеры: " + cluster.nodes().get().size());
        
        // Информация о топике
        DescribeTopicsResult topics = admin.describeTopics(
            Collections.singleton("my-topic")
        );
        int partitionCount = topics.values()
            .get("my-topic")
            .get()
            .partitions()
            .size();
        System.out.println("Партиции: " + partitionCount);
    }
}

Рекомендации

СценарийПартиции
High throughput (много событий/сек)12-24
Normal throughput6-12
Low throughput3-6
Production, критичные данные≤ 4000/брокер

Итог

Для 3 брокеров:

  • Технически можно создать неограниченное количество партиций
  • Практически рекомендуется: 3-24 партиции на топик
  • Максимум без проблем: 4000 партиций на брокер = 12000 всего
  • Оптимум: количество партиций = количество потребителей, которых будешь использовать

Выбор количества партиций зависит не от количества брокеров, а от требований к throughput и масштабируемости.

При кластере Kafka из 3 брокеров, какое максимальное количество партиций мы можем создать для одного топика | PrepBro