Kafka: топики, партиции, offset, consumer groups
↑ 5.4 Очереди и брокеры: Kafka, RabbitMQ · ← Предыдущая · → Следующая
Зачем это на собесе
Основа Kafka: партиции определяют порядок и параллелизм. Это спрашивают всегда.
Объяснение
Kafka — распределённый журнал событий (commit log). Сообщения хранятся на диске заданное время и могут читаться многократно.
| Понятие | Смысл |
|---|---|
| Topic | именованный поток сообщений |
| Partition | упорядоченный неизменяемый лог; единица параллелизма и масштабирования |
| Offset | порядковый номер сообщения в партиции |
| Key | ключ сообщения: одинаковые ключи попадают в одну партицию |
| Broker / Cluster | серверы Kafka |
| Replication factor | число копий партиции (leader + followers) |
| Consumer group | набор потребителей, делящих партиции топика |
| Retention | сколько хранить (время/размер) или compaction |
flowchart LR P[Producer] -->|key=order-1| T subgraph T[Topic orders, 3 партиции] P0[part 0] P1[part 1] P2[part 2] end P0 --> C1[Consumer A] P1 --> C2[Consumer B] P2 --> C2
Правила:
- Порядок гарантируется только внутри партиции. Для порядка событий одного заказа используйте
key = orderId. - В группе одну партицию читает один потребитель; потребителей больше, чем партиций, — лишние простаивают.
- Разные группы читают независимо (каждая со своим offset): так работает pub/sub.
- Offset коммитится потребителем: после коммита при перезапуске чтение продолжится с этого места.
- Rebalance: при изменении состава группы партиции перераспределяются (на время чтение останавливается).
Нюансы и подводные камни
- Число партиций сложно уменьшить, а рост меняет распределение ключей: закладывайте с запасом.
- «Горячий ключ» перегружает одну партицию.
- Слишком много партиций → нагрузка на брокеры и долгий rebalance.
- Log compaction хранит последнее значение по ключу (для «состояния»).
- Retention удаляет старые данные независимо от того, прочитаны они или нет.
Практика
- Создайте топик из 3 партиций, отправьте сообщения с разными ключами, посмотрите распределение.
- Запустите двух потребителей в группе и наблюдайте rebalance.
- Сбросьте offset группы и перечитайте историю (
kafka-consumer-groups).
Вопросы с ответами
Где гарантируется порядок в Kafka?
Внутри одной партиции; между партициями порядка нет.
Что такое consumer group?
Набор потребителей, между которыми делятся партиции топика; каждая партиция читается одним членом группы.
Что делает offset?
Указывает позицию чтения в партиции; коммит offset определяет, откуда продолжить после перезапуска.