Ответ
Партиция (partition) в Apache Kafka — это основная единица параллелизма и хранения данных внутри топика. Каждый топик делится на одну или несколько партиций, что позволяет горизонтально масштабировать чтение и запись.
Ключевые цели и преимущества партиций:
- Масштабируемость: Нагрузка на один топик может быть распределена по нескольким брокерам в кластере, так как разные партиции могут физически находиться на разных машинах.
- Параллелизм обработки: Несколько консьюмеров из одной группы (
consumer group
) могут одновременно читать сообщения из разных партиций одного топика. Это основной способ увеличить пропускную способность на стороне потребителей. - Гарантия порядка: Kafka гарантирует строгий порядок доставки сообщений в пределах одной партиции. Сообщения с одним и тем же ключом всегда попадают в одну и ту же партицию, что обеспечивает их последовательную обработку.
Как это работает: Когда продюсер отправляет сообщение, он может указать ключ. На основе хеша ключа определяется партиция. Если ключ не указан, сообщения распределяются по партициям циклически (Round Robin).
Пример создания топика с 3 партициями:
# Использование CLI-утилиты Kafka
kafka-topics.sh --create
--bootstrap-server localhost:9092
--replication-factor 1
--partitions 3
--topic my-partitioned-topic
Важные аспекты производительности:
- Больше партиций — выше параллелизм. Однако слишком большое их количество (> нескольких тысяч на брокер) может увеличить нагрузку на контроллер кластера и привести к задержкам.
- Количество партиций — это верхний предел параллелизма для одной consumer group. Если у вас 3 партиции, то не более 3 консьюмеров из одной группы будут активны одновременно.
- Количество партиций можно увеличить для существующего топика, но нельзя уменьшить без его полного пересоздания.