Топик, партиция, оффсет, брокер, кластер
Урок вводит пять понятий, без которых дальше нельзя: топик, партиция, оффсет, брокер, кластер.
Топик — именованный поток событий одного типа; партиция — один упорядоченный лог внутри топика; оффсет — порядковый номер события в партиции; брокер — сервер Kafka; кластер — группа брокеров.
Зачем это нужно
Эти пять слов — алфавит Kafka. Любая команда, конфиг и схема масштабирования говорят на нём. Разберём каждое и как они складываются вместе.
Топик
Топик — логическое имя потока: orders, clicks, payments. Продюсеры пишут в топик, консьюмеры читают из топика. Это аналог «таблицы» по уровню абстракции, только это упорядоченный журнал, а не набор строк.
Партиция и оффсет
Внутри топик разбит на партиции — независимые упорядоченные логи. Каждое событие в партиции получает оффсет — целое число, растущее с каждым новым событием. Пара «(партиция, оффсет)» однозначно адресует любое событие в топике.
Топик "orders" с 3 партициями:
P0: off 0 1 2 3 --o
[a] [b] [c] [d]
P1: off 0 1 2 --o
[e] [f] [g]
P2: off 0 1 2 3 4 --o
[h] [i] [j] [k] [l]
Порядок гарантирован ВНУТРИ партиции, не между ними.
Брокер и кластер
Брокер — это один сервер Kafka: он хранит партиции на своём диске и обслуживает чтение/запись. Несколько брокеров образуют кластер. Партиции топика распределяются между брокерами, поэтому нагрузка и данные размазаны по машинам.
Кластер из 3 брокеров, топик "orders" (3 партиции): Broker 1: [ P0 ] Broker 2: [ P1 ] Broker 3: [ P2 ] (плюс реплики — о них в разделе про надёжность)
Как это связано
| Понятие | Это… | Аналогия |
| Кластер | группа серверов Kafka | дата-центр |
| Брокер | один сервер | стойка/машина |
| Топик | именованный поток | канал/тема |
| Партиция | один лог внутри топика | дорожка журнала |
| Оффсет | номер события в партиции | номер строки |
Как работает под капотом
Когда вы создаёте топик, вы задаёте число партиций и фактор репликации. Контроллер кластера раскладывает партиции по брокерам так, чтобы нагрузка была равномерной, и назначает каждой партиции брокера-лидера. Продюсер, отправляя событие, выбирает партицию (по ключу или по кругу), находит брокера-лидера этой партиции и пишет туда. Оффсет назначается брокером в момент записи и больше не меняется — он навсегда адресует это конкретное событие.
Частые ошибки
- Ждать глобального порядка по топику. Порядок гарантирован только внутри партиции, а не между ними.
- Путать брокер и кластер. Брокер — один сервер; кластер — их группа.
- Считать оффсет глобальным. Оффсет уникален в пределах одной партиции, а не всего топика.
Итоги
- Топик — поток; партиция — упорядоченный лог внутри него; оффсет — номер события в партиции.
- Брокер — сервер Kafka, кластер — группа брокеров; партиции распределены по брокерам.
- Порядок гарантирован внутри партиции; пара (партиция, оффсет) адресует событие.