Назад к подготовке

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.