Ответ вслух Senior Батч и стриминг обновлено

Опоздавшие и неупорядоченные события

Вопрос

Мобильное приложение шлёт события, часть приходит с опозданием до суток (телефон без сети). Как вы посчитаете почасовые метрики и в реальном времени, и точно?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Окна строю по времени события, иначе офлайн-телефоны исказят картину. Для оперативной метрики использую watermark с задержкой в несколько минут: результат быстрый, но предварительный.

Что должно прозвучать в ответе

  • Окна по event time, а не processing time

  • Watermark с разумной задержкой для оперативной метрики

  • Явная политика для опоздавших: обновление результата или отдельный поток

  • Батч-пересчёт последних суток для точной версии

  • Дедупликация по id события

  • Метрика доли опоздавших и дедлайн «финализации» данных

Что могут спросить следом

  • Как объяснить бизнесу, что цифры за вчера меняются?
  • Где хранить результаты, чтобы их можно было обновлять?

Разбор

Образцовый ответ: «Окна строю по времени события, иначе офлайн-телефоны исказят картину. Для оперативной метрики использую watermark с задержкой в несколько минут: результат быстрый, но предварительный. Опоздавшие события не выбрасываю: пишу результаты в хранилище с upsert по ключу окна, например в ClickHouse с ReplacingMergeTree или в таблицу lakehouse через MERGE, и опоздания обновляют свои окна. Дополнительно раз в сутки батчем пересчитываю последние двое суток по сырому слою: это точная версия. Дедуплицирую по id события, потому что ретраи с телефона дают дубли. Для бизнеса ввожу понятие финализации: цифры за день окончательные через сутки, а долю опоздавших событий вывожу на дашборд, чтобы было видно, насколько предварительны свежие данные».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.