Что такое партиция в Apache Kafka?

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

Ответ

Партиция (Partition) — это неделимая единица параллелизма и упорядоченности в топике Apache Kafka. Каждый топик делится на одну или несколько партиций для распределения данных и нагрузки.

Ключевые особенности:

  • Упорядоченность: Сообщения внутри одной партиции хранятся и доставляются в строгом порядке согласно их смещению (offset).
  • Масштабируемость: Партиции распределяются по брокерам кластера, что позволяет топику превышать размер диска одного сервера и обрабатывать данные параллельно.
  • Параллелизм потребителей: В рамках одной consumer-группы каждая партиция может обрабатываться только одним потребителем, что позволяет масштабировать обработку, увеличивая количество партиций и потребителей.
  • Отказоустойчивость: Каждая партиция реплицируется на несколько брокеров (replica factor). Одна реплика является лидером (leader) для чтения/записи, остальные — последователями (followers).

Пример создания топика с тремя партициями через Java API AdminClient:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");

try (AdminClient admin = AdminClient.create(props)) {
    NewTopic newTopic = new NewTopic("my-orders", 3, (short) 2); // 3 партиции, фактор репликации 2
    admin.createTopics(Collections.singleton(newTopic)).all().get();
}

Важно: Количество партиций задается при создании топика и впоследствии может быть только увеличено. Слишком большое число партиций увеличивает накладные расходы на метаданные и может привести к снижению производительности.