Что такое Kafka и где её применяют
Чему научишься
- объяснять, зачем нужна Kafka: одно событие нужно многим системам, и каждая читает его в своём темпе
- называть части Kafka и что делает каждая: продюсер, топик, партиция, оффсет, брокер, консьюмер, консьюмер-группа
- запускать первую программу: отправить сообщения и прочитать их двумя группами — и увидеть, что чтение ничего не стирает
07:30. Один эфир — много адресатов
2 ноября 2184 года. Смотритель ушёл со своим вопросом, а ответ на него есть только в эфире. Эфир уже идёт: в 04:40 ты включил двенадцать антенн на приём, и каждый кадр ложится на стойки диспетчерской. На пульте первая заявка: Читальный зал просит подключить его к эфиру. Ему нужен каждый кадр — и сразу, а не утром следующего дня.
Перед тем как подключать, ты открываешь паспорт диспетчерской — чертёж, по которому её когда-то собирали. Листов в нём два. На первом — как было до неё: от каждой антенны тянется провод к каждому уровню станции. Двенадцать антенн, три уровня — тридцать шесть проводов, и медленный уровень держит антенну, пока не примет кадр. На втором листе проводов от антенн к уровням нет ни одного. Антенны пишут в одно место — на стойки. Уровни — Читальный зал, Приёмный уровень, Машинное отделение — читают оттуда же, каждый сам и в своём темпе. Остановился один — остальные этого не заметили. Подключили новый — антенны об этом даже не узнали.
Программа, которая держит эти стойки, называется Kafka. Сегодня ты подключишь к ней первого адресата, а сначала разберёшься, как она устроена.
КВЕРИ: На первом листе тридцать шесть проводов. На втором — ни одного. Второй мне нравится больше.

Что такое Kafka
Kafka — программа, которая принимает сообщения от одних программ, хранит их на диске по порядку и отдаёт другим — стольким, скольким нужно, и каждой в её темпе.
Зачем она понадобилась, видно по двум листам паспорта. Пока систем мало, их соединяют напрямую: сервис заказов сам шлёт каждый заказ складу, доставке и бухгалтерии. С каждой новой системой проводов становится больше, а медленный получатель тормозит отправителя. Kafka встаёт посередине: отправитель пишет один раз, получатели читают сами и друг другу не мешают. Её придумали в LinkedIn ровно под эту задачу, потом отдали в фонд Apache, и сейчас это открытый проект — Apache Kafka.
Устроена она так:
- Продюсер (producer) — программа, которая отправляет сообщения в Kafka. У нас продюсеры — антенны. Сообщение — одна порция данных: ключ, значение и время. Сообщение эфира на станции зовут кадром.
- Сообщения ложатся в топик (topic) — журнал под одну тему. Эфир — топик
signal_raw. В топик дописывают только в конец, а прочитанное не стирают. - Топик разрезан на партиции (partition) — несколько журналов, которые пишут и читают параллельно. Номер сообщения внутри партиции называется оффсет (offset): 0, 1, 2… У каждой партиции свой счёт.
- Партиции хранятся на брокерах (broker) — серверах Kafka. Несколько брокеров вместе — кластер. Брокеры диспетчерской — это её стойки, их три.
- Читает консьюмер (consumer) — программа, которая забирает сообщения из топика. Консьюмеры объединяются в консьюмер-группу (consumer group): группа читает топик целиком, а партиции делит между своими консьюмерами.
На картинке ниже — всё это разом, с числами первой программы урока.
signal_raw из трёх партиций, продюсер отправляет в него по два сообщения от трёх антенн, а читают две консьюмер-группы: reading_room — Читальный зал, duty — твоя дежурная проверка. Потом приходят ещё три сообщения, и читает только Читальный зал. Смотри на номера партиций и оффсетов.Что показала программа
Каждое сообщение получило партицию и оффсет. Партицию выбрал ключ: все сообщения антенны s01 легли в партицию 2, s02 — в партицию 0, s11 — в партицию 1. Оффсеты у каждой партиции свои: в каждой есть сообщение с оффсетом 0 и с оффсетом 1. Как ключ выбирает партицию и почему порядок есть только внутри неё — отдельный урок этой главы.
Две группы прочитали одно и то же. И reading_room, и duty получили все шесть сообщений: каждая группа читает топик целиком и сама по себе. А сообщений в топике после чтения осталось столько же. Чтение ничего не стирает: сообщения лежат, пока не истечёт срок хранения топика.
У каждой группы свой оффсет. Прочитав, группа делает коммит (commit) — сохраняет в Kafka, докуда дочитала. Сохраняется оффсет следующего сообщения, которое группа прочитает. reading_room прочитала все три сообщения каждой партиции, её оффсеты — 3, 3, 3. duty новых сообщений ещё не читала, её оффсеты — 2, 2, 2. Перезапусти её программу — она продолжит ровно с этих оффсетов.
Сколько сообщений группа ещё не прочитала, называется лаг (consumer lag): конец партиции минус оффсет группы. У duty лаг 3 — по одному сообщению в каждой партиции, у reading_room — 0. По лагу в первую очередь и следят, успевает ли обработка.
Этим Kafka и отличается от обычной очереди. В очереди получатель забрал сообщение — и его больше нет. В Kafka сообщение остаётся в журнале, и любое число групп читает его независимо: новую систему можно подключить позже, и она прочитает историю. Когда всё-таки нужна очередь, а не Kafka, — следующий урок.
Где Kafka применяют
Там, где одно событие нужно нескольким системам сразу, или там, где событий так много, что обычная база с ними не справляется:
| задача | что пишут в Kafka | кто читает |
|---|---|---|
| действия пользователей | клики, просмотры, поиски | аналитика, рекомендации, антифрод |
| обмен событиями между сервисами | «заказ оплачен», «товар отгружен» | склад, доставка, бухгалтерия, уведомления |
| изменения в базе данных | каждая вставка и правка строки — это CDC, глава 7 | хранилище, поиск, кэш |
| логи и метрики серверов | строки логов, замеры | мониторинг и сигналы тревоги |
| телеметрия | показания датчиков, координаты машин | диспетчерская, расчёт маршрутов |
| обработка на лету | поток событий | программа, которая считает ответ сразу, — глава 6 |
Станция устроена так же. Антенны — источники событий, эфир — поток, а Читальный зал, Приёмный уровень и Машинное отделение — системы, которым этот поток нужен, каждой в своём виде.
Чего в курсе нет
Всё, что ты делаешь в курсе, исполняется прямо здесь, в браузере, на учебной Kafka. Поэтому граница курса проходит там, где браузер честно не справится:
- Kafka Streams, Flink, ksqlDB — готовые инструменты обработки потока; им нужна JVM. Чем они отличаются и когда какой брать, курс разбирает, но их кода ты не пишешь;
- живой кластер — установка брокеров, диски, сеть и настройка серверов;
- второй дата-центр — копию топика в соседнем кластере разбираем по механике, а саму службу копирования не поднимаем;
- облачные сервисы — Confluent Cloud, Amazon MSK и им подобные.
Остальное — журнал и партиции, группы и оффсеты, гарантии доставки, схемы сообщений, обработку потока, интеграцию с базами и эксплуатацию — ты исполняешь руками.
Что в этом уроке настоящее, а что учебное
Учебная Kafka живёт в этой вкладке браузера: без сети и без настоящих серверов, всё в одном процессе. Настоящее в ней — правила: как сообщения раскладываются по партициям, как считаются оффсеты и где хранятся коммиты групп. Вызовы send, poll, commit и flush названы как в клиенте kafka-python, но совпадают не во всём: poll здесь возвращает простой список сообщений, а kafka-python — словарь «партиция → список сообщений».
Ещё одно отличие — умолчание для новой группы. Учебная Kafka начинает её с начала топика, а настоящие клиенты — с конца: без auto_offset_reset='earliest' новая группа видит только то, что пришло после подключения. Поэтому в первой программе эта настройка написана явно. Она ещё встретится в курсе.
Вопрос с собеседования
Как это спрашивают на собеседовании
Первый вопрос почти всегда один: «Что такое Kafka?» Ответ «очередь сообщений» — неполный. Хороший ответ: распределённый журнал событий. Продюсеры пишут в топики, топик разбит на партиции, партиции лежат на брокерах и копируются между ними. Консьюмеры читают группами, каждая группа хранит свои оффсеты, поэтому прочитанное не исчезает и его можно перечитать.
Второй вопрос: «Чем Kafka отличается от RabbitMQ?» Коротко: брокер очередей отдаёт сообщение получателю и забывает его после подтверждения, а Kafka хранит журнал, и любое число групп читает его независимо. Подробный разбор — в следующем уроке.
Третий: «Где в Kafka гарантирован порядок?» Только внутри партиции. Сообщения одного ключа всегда попадают в одну партицию, поэтому порядок по ключу сохраняется.
Английские имена: producer, consumer, consumer group, topic, partition, offset, broker, cluster, commit, consumer lag.
orders, каждый в своей консьюмер-группе. Склад прочитал все сообщения и сделал коммит. Бухгалтерия подключается позже и начинает с начала топика. Что она получит?Главное из урока
| слово | что это | на станции |
|---|---|---|
| продюсер | программа, которая отправляет сообщения в топик | антенны |
| топик | журнал под одну тему: пишут в конец, прочитанное не стирают | signal_raw — эфир |
| партиция и оффсет | часть топика и номер сообщения в ней; у каждой партиции свой счёт | три партиции signal_raw |
| брокер | сервер Kafka, который хранит партиции | стойки диспетчерской, их три |
| консьюмер-группа | консьюмеры под одним именем; группа читает топик целиком | reading_room, duty |
| коммит и лаг | сохранить, докуда дочитала группа; сколько ей ещё читать | у duty оффсеты 2, 2, 2 и лаг 3 |
Kafka стоит посередине: продюсеры пишут один раз, каждая группа читает сама и в своём темпе, а прочитанное остаётся в журнале.
КВЕРИ: Было тридцать шесть проводов. Теперь стойки — и подключиться может кто угодно, никого не спрашивая.