Топик, партиция, оффсет, брокер, кластер

Урок вводит пять понятий, без которых дальше нельзя: топик, партиция, оффсет, брокер, кластер.

Топик — именованный поток событий одного типа; партиция — один упорядоченный лог внутри топика; оффсет — порядковый номер события в партиции; брокер — сервер 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, кластер — группа брокеров; партиции распределены по брокерам.
  • Порядок гарантирован внутри партиции; пара (партиция, оффсет) адресует событие.
Проверьте себя
1. В каких границах Kafka гарантирует порядок событий?
AПо всему топику глобально
BВнутри одной партиции
CПо всему кластеру
DМежду топиками
2. Что однозначно адресует событие в топике?
AТолько оффсет
BПара (партиция, оффсет)
CИмя брокера
DКлюч события
3. Чем брокер отличается от кластера?
AНичем
BБрокер — один сервер Kafka, кластер — группа брокеров
CБрокер хранит метаданные, кластер — данные
DКластер — это партиция