Ответ
Окна агрегации — это механизм в потоковой обработке для выполнения вычислений (сумма, среднее, количество) над ограниченными подмножествами бесконечного потока данных. Они определяют, как поток делится на конечные фрагменты для агрегации.
Основные типы окон:
-
Tumbling Window (Фиксированные/неперекрывающиеся окна): Окна фиксированной длины, которые не перекрываются. Каждое событие принадлежит ровно одному окну.
-- Пример на SQL (Apache Flink) SELECT user_id, TUMBLE_START(event_time, INTERVAL '1' HOUR) as window_start, COUNT(*) as event_count FROM user_clicks GROUP BY user_id, TUMBLE(event_time, INTERVAL '1' HOUR) -
Sliding Window (Скользящие/перекрывающиеся окна): Окна фиксированной длины, которые смещаются с заданным шагом (slide). Событие может попадать в несколько окон, если шаг меньше длины окна. Полезно для скользящих средних.
-
Session Window (Сессионные окна): Динамические окна, которые группируют события активности, разделенные периодами неактивности (timeout). Длина окна определяется данными.
Практическое применение в Kafka Streams/KsqlDB:
-- KsqlDB: Создание потока с 5-минутными tumbling windows
CREATE TABLE page_views_per_5min AS
SELECT
page_id,
COUNT(*) AS view_count,
WINDOWSTART AS window_start,
WINDOWEND AS window_end
FROM page_views
WINDOW TUMBLING (SIZE 5 MINUTES)
GROUP BY page_id;
Ключевые параметры:
- Размер окна (Size): Длительность (например, 5 минут) или количество событий.
- Сдвиг/шаг (Slide/Advance): Насколько смещается окно (для sliding windows).
- Задержка (Grace Period/Allowed Lateness): Время, в течение которого система ждет поздних данных перед финализацией результата окна.
В Kafka Streams я использовал эти окна для подсчета метрик в реальном времени, таких как количество ошибок в минуту или среднее время ответа API за 10-минутные интервалы.