ENIGMA AI
ENIGMA AI
Kafka Средний

Что такое партиции в Kafka и зачем они нужны?

Партиции в Kafka

Что такое партиция:

Topic разбит на partitions — упорядоченные, неизменяемые логи.

Topic: orders
├── Partition 0: [msg0, msg1, msg2, ...]
├── Partition 1: [msg0, msg1, msg2, ...]
└── Partition 2: [msg0, msg1, msg2, ...]

Зачем нужны:

1. Параллелизм

Consumer Group:
├── Consumer 1Partition 0
├── Consumer 2Partition 1
└── Consumer 3Partition 2

2. Масштабирование

  • Больше партиций = больше throughput
  • Распределение по брокерам

3. Порядок сообщений

  • Гарантируется только внутри партиции
  • Не гарантируется между партициями

Как выбирается партиция:

// 1. Явно указана
producer.send(new ProducerRecord<>("orders", 0, key, value));

// 2. По ключу (хеш)
producer.send(new ProducerRecord<>("orders", "user-123", value));
// partition = hash(key) % num_partitions

// 3. Round-robin (без ключа)
producer.send(new ProducerRecord<>("orders", null, value));

Гарантия порядка по ключу:

// Все события пользователя в одной партиции
producer.send(new ProducerRecord<>("events", userId, event));

// Порядок сохраняется для одного userId

Сколько партиций создавать:

Формула: max(throughput / producer_throughput,
              throughput / consumer_throughput)

Пример:
- Нужно: 100 MB/s
- 1 consumer: 10 MB/s
- Минимум: 100 / 10 = 10 партиций

Репликация:

Partition 0:
├── Leader (Broker 1) ← Все read/write
├── Follower (Broker 2)
└── Follower (Broker 3)
  • replication.factor = 3
  • min.insync.replicas = 2

Consumer Group и партиции:

# Consumers <= Partitions используются
# Consumers > Partitions — лишние idle

3 partitions, 3 consumers: OK (1:1)
3 partitions, 2 consumers: OK (1:1.5)
3 partitions, 4 consumers: 1 consumer idle

Rebalancing:

При добавлении/удалении consumer происходит перераспределение партиций.

// Стратегии назначения:
// RangeAssignor — по диапазонам
// RoundRobinAssignor — по кругу
// StickyAssignor — минимум перемещений

Готовитесь к собеседованию?

ENIGMA AI — невидимый ИИ-помощник для технических интервью

Попробовать бесплатно
Все вопросы