Ответ
Партиция (partition) — это основная единица параллелизма и хранения данных в Kafka. Каждый топик в Kafka делится на одну или несколько партиций.
Ключевые цели и свойства партиций:
Масштабируемость (Scalability):
- Разделение топика на партиции позволяет распределять данные и нагрузку по нескольким брокерам (серверам) в кластере.
- Это также позволяет нескольким потребителям из одной группы читать данные из одного топика параллельно, так как каждый потребитель может быть назначен на свою партицию. Пропускная способность системы прямо зависит от количества партиций.
Гарантия порядка сообщений (Ordering):
- Kafka гарантирует строгий порядок доставки сообщений только в пределах одной партиции. Сообщения записываются в партицию в том порядке, в котором они поступили, и читаются в том же порядке.
- Порядок между разными партициями не гарантируется.
- Для сохранения порядка связанных сообщений (например, всех событий для одного пользователя) их нужно отправлять с одинаковым ключом. Продюсер по умолчанию использует хэш ключа для выбора партиции, гарантируя, что все сообщения с одним и тем же ключом попадут в одну и ту же партицию.
Отказоустойчивость (Fault Tolerance):
- Каждая партиция может быть реплицирована на несколько брокеров. Одна из реплик является лидером (принимает запись и чтение), а остальные — последователями (копируют данные с лидера).
- Если брокер с лидером партиции выходит из строя, один из последователей автоматически становится новым лидером, обеспечивая непрерывную доступность данных.
Как выбрать количество партиций?
- Это важное архитектурное решение. Количество партиций можно увеличить, но нельзя уменьшить без пересоздания топика.
- Оно должно быть выбрано исходя из ожидаемой нагрузки на чтение и запись, а также количества потребителей, которые будут обрабатывать данные параллельно.