Spark/Flink job для оконной CTR агрегации
Как должен выглядеть stream job, который считает CTR по campaign_id и временным окнам?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
Job читает Kafka, watermark-ит event time, группирует по campaign_id и window, считает clicks/impressions, пишет idempotent aggregates.
Полный разбор
Stream job читает события, валидирует schema, дедуплицирует event_id при необходимости и назначает event-time windows с watermark для late arrivals. Затем идет group by campaign_id, window_start/window_end и count по event_type.
На выходе пишется агрегат clicks/impressions/ctr в OLAP storage. Запись должна быть idempotent или transaction-like: при restart job не должен удвоить счетчики. Для незакрытых окон можно показывать preliminary values с пометкой freshness, а финализировать после watermark.