Раздел 26 · Data Engineering

Kafka как распределённый лог событий

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

В прошлом уроке мы нашли Kafka на карте инструментов данных: не база и не очередь в привычном смысле, а что-то третье. Сегодня разберём, что именно. Если сказать одним словом, Kafka это журнал. Всё остальное в блоке будет уточнять, какой это журнал и почему он так устроен.

Бортовой журнал

На корабле есть бортовой журнал. Вахтенный записывает в него всё, что случилось: «08:00 вышли из порта», «09:15 сменили курс», «11:40 встретили шторм». Записи идут строго по порядку, у каждой свой номер строки. Зачёркивать и переписывать нельзя: если ошибся, пишешь новую строку с поправкой.

Журнал читают разные люди. Капитан утром листает последние записи. Штурман сверяет курс за сутки. Через год инспектор пароходства читает журнал целиком. Никто из них не вырывает страницы, прочитанное остаётся в журнале для следующего читателя. И каждый помнит, на какой строке остановился.

Вот это и есть Kafka.

Лог событий

В Kafka вместо строк журнала лежат события, о которых мы говорили в первом уроке: «заказ 9001 создан», «курьер 15 взял заказ 9001». Такой журнал называют логом. Слово то же, что у логов приложения, но смысл строже: лог в Kafka это не текстовый файл для отладки, а основное хранилище данных.

Три свойства лога держат на себе всю Kafka:

  • Только дописывают. Новое событие встаёт в конец. Старые записи не правят и не удаляют по одной.
  • У каждой записи номер. Он называется оффсетом и растёт по порядку: 0, 1, 2. По оффсету запись можно найти и перечитать.
  • Чтение ничего не удаляет. Прочитанное событие остаётся в логе. Его могут прочитать другие, и ты сам можешь прочитать его снова.

Последнее свойство отличает Kafka от почтового ящика или очереди задач. Письмо забрали из ящика, и его там больше нет. Событие в Kafka прочитали, и оно никуда не делось.

Каждый читает в своём темпе

Раз чтение ничего не удаляет, читателей может быть сколько угодно, и они не мешают друг другу. В «Гонце» один и тот же журнал событий о заказах читают:

Кто читаетКакГде сейчас остановился
дашборд Оттосразу, как пришло событиена последней записи
биллингпачками раз в минутуминуту назад
ночной отчётраз в суткина вчерашней полуночи

Каждый читатель хранит свою закладку: номер записи, до которой дочитал. Kafka называет такого читателя консьюмером, а того, кто пишет в журнал, продюсером. Продюсер не знает, кто и когда прочитает его события. Ему достаточно записать.

Если биллинг упал на час, журнал продолжает расти. Биллинг поднимется, откроет закладку и дочитает всё, что пропустил. Дашборд за этот час ничего не заметит.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.