Опоздавшие и неупорядоченные события
Вопрос
Мобильное приложение шлёт события, часть приходит с опозданием до суток (телефон без сети). Как вы посчитаете почасовые метрики и в реальном времени, и точно?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Окна по event time, а не processing time
Watermark с разумной задержкой для оперативной метрики
Явная политика для опоздавших: обновление результата или отдельный поток
Батч-пересчёт последних суток для точной версии
Дедупликация по id события
Метрика доли опоздавших и дедлайн «финализации» данных
Что могут спросить следом
- Как объяснить бизнесу, что цифры за вчера меняются?
- Где хранить результаты, чтобы их можно было обновлять?
Разбор
Образцовый ответ: «Окна строю по времени события, иначе офлайн-телефоны исказят картину. Для оперативной метрики использую watermark с задержкой в несколько минут: результат быстрый, но предварительный. Опоздавшие события не выбрасываю: пишу результаты в хранилище с upsert по ключу окна, например в ClickHouse с ReplacingMergeTree или в таблицу lakehouse через MERGE, и опоздания обновляют свои окна. Дополнительно раз в сутки батчем пересчитываю последние двое суток по сырому слою: это точная версия. Дедуплицирую по id события, потому что ретраи с телефона дают дубли. Для бизнеса ввожу понятие финализации: цифры за день окончательные через сутки, а долю опоздавших событий вывожу на дашборд, чтобы было видно, насколько предварительны свежие данные».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.