Ответ
Партиция (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();
}
Важно: Количество партиций задается при создании топика и впоследствии может быть только увеличено. Слишком большое число партиций увеличивает накладные расходы на метаданные и может привести к снижению производительности.