Раздел 26 · Data Engineering

Реальный пример: поток заказов в аналитику

junior~15 мин

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

Блок начался с вопроса Отто: почему опаздывают курьеры «Гонца». В курсе аналитика мы отвечали на него запросами к готовой таблице. Тридцать уроков спустя мы знаем, как эта таблица могла бы появиться: из событий, которые приложение пишет в Kafka, через консьюмер, который считает время доставки. Сегодня соберём этот путь целиком, от телефона курьера до витрины Отто, и вспомним по дороге весь блок.

Водопровод

Вода из крана кажется простой вещью. Но за краном стоит целая система: насосная станция, трубы, задвижки на случай аварии, счётчики, фильтры. Каждую часть кто-то выбрал и настроил. Если задвижку забыли, авария в одном доме оставит без воды весь квартал. Если забыли счётчик, никто не заметит утечку, пока не придёт счёт.

Поток данных устроен так же. Отто видит только дашборд, «кран». А за ним стоят продюсер, топик, реплики, группа консьюмеров, коммиты и мониторинг. Каждое решение мы уже разбирали по отдельности. Теперь посмотрим, как они работают вместе.

Путь заказа

приложение заказов
  │  продюсер: ключ = номер заказа, acks=all, идемпотентность
  ▼
топик order-events: 3 партиции, 3 копии, min.insync.replicas=2
  │
  ▼
группа delay-mart: читает, считает время доставки, коммитит после записи
  │
  ▼
витрина опозданий по зонам  ──→  дашборд Отто

События у заказа три: created, picked-up и delivered. В каждом номер заказа, зона и время. Время доставки это разница между delivered и created того же заказа.

Решения на каждом шаге

ШагРешениеЗачемУрок
ключномер заказасобытия одного заказа в одной партиции и по порядку: created придёт раньше deliveredключи
продюсерacks=all и идемпотентностьсобытие не потеряется при падении лидера и не задвоится при повтореподтверждения
топик3 копии, min.insync.replicas=2падение одного брокера не остановит запись и не потеряет данныерепликация
партиции3, с запасом на пикдо трёх консьюмеров в группе работают одновременнопартиции
коммитпосле записи в витринуупавший консьюмер ничего не потеряет, at-least-onceоффсеты
витринапомнит, чья доставка уже учтенаповтор не испортит среднееexactly-once
хранение7 дней по умолчаниювитрину можно пересчитать заново, перечитав топиклог, retention
битые событияповторы и мёртвая очередьодно сломанное событие не остановит партициюошибки
мониторинглаг группы и возраст старой записиОтто не увидит устаревший дашборд раньше наслаг

Отдельно стоит выгрузка для отчётов. Витрина опозданий нужна Отто в течение дня, а квартальный анализ живёт в хранилище. Те же события раз в сутки выгружают туда батчем, как мы обсуждали в первом уроке. Готовые инструменты для такой выгрузки разбирали в уроке про Kafka Connect.

урок из курса

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

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