Зачем топик в Apache Kafka делится на партиции?

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

Ответ

Партиции — это фундаментальный механизм горизонтального масштабирования и параллелизма в Kafka.

Ключевые причины:

  1. Масштабирование потребителей (Consumer Scaling): Сообщения в одной партиции потребляются только одним консюмером в рамках consumer group. Несколько партиций позволяют распределить нагрузку между несколькими консюмерами, увеличивая пропускную способность обработки.
    • Группа из 3 консюмеров может параллельно читать из топика с 3 партициями.
  2. Параллелизм продюсеров (Producer Parallelism): Продюсеры могут писать в разные партиции одновременно, увеличивая throughput записи.
  3. Гарантия порядка (Ordering Guarantee): Kafka гарантирует порядок доставки сообщений только в пределах одной партиции. Это позволяет балансировать между параллелизмом и семантикой порядка.
  4. Распределение и отказоустойчивость: Партиции распределяются по брокерам кластера, а их реплики обеспечивают отказоустойчивость.

Пример создания топика:

# Создание топика 'user-events' с 6 партициями и фактором репликации 3
kafka-topics.sh --create 
  --topic user-events 
  --partitions 6 
  --replication-factor 3 
  --bootstrap-server kafka-broker-1:9092

На что влияет количество партиций:

  • Максимальный параллелизм consumer group = количество партиций.
  • Распределение данных по брокерам кластера.
  • Увеличение партиций после создания топика возможно, но может нарушить семантику хеширования ключей.