상위: Flink
요약
Flink의 윈도우 개념과 종류를 다룹니다. 텀블링, 슬라이딩, 세션, 글로벌 윈도우의 특징과 사용 사례를 학습하여 실시간 스트림 데이터를 효율적으로 집계하고 분석하는 방법을 알아봅니다.
윈도우
- 연속적인 데이터 스트림을 유한한 세그먼트로 분할하는 방법
- 실시간으로 발생하는 스트림 데이터를 분석하기 위해 유한한 덩어리로 나누는 개념
- 특정 기준(시간 등)에 따라 데이터를 나눔
- 무한 데이터 흐름을 나눠서 각 조각마다 합계, 평균 등의 계산 수행 가능

윈도우가 필요한 이유
-
무한 스트림 처리 가능
전체를 한 번에 계산은 불가 → 윈도우 단위로 나누어 평균 등 계산 가능
-
변화 추적 및 시간별 통계
시간 흐름에 따른 변화 관찰 가능
-
연속 계산 및 자원 절약
모든 데이터를 모을 때까지 기다릴 필요 없이 부분 계산 가능
윈도우 종류
텀블링 윈도우 (Tumbling Window)
- 고정 크기, 서로 겹치지 않음
- 예시: 1분 단위, 100개 이벤트 단위 등
- 모든 데이터는 정확히 하나의 윈도우에만 속함
- 적합한 상황: 분/시간 단위 집계, 배치 처리, 마이크로버전 처리

- 동작 방식
- 윈도우 길이 미리 설정
- 예: 5분 단위 → 각 구간에 도착한 이벤트 모아서 결과 출력 후 다음 구간으로
슬라이딩 윈도우 (Sliding Window)
- 텀블링과 달리 겹칠 수 있음
- 윈도우 크기와 슬라이드 간격 파라미터 필요
- 슬라이드 간격만큼 이동하며 생성
- 슬라이드 간격 < 윈도우 크기 → 겹치는 부분 발생

- 동작 방식
- 예: 윈도우 10분, 슬라이드 간격 5분
- 0
10분 → 515분 → 10~20분 등으로 생성 - 데이터가 여러 윈도우에 중복 포함됨
세션 윈도우 (Session Window)
- 고정 크기 없음, 동적 윈도우
- 데이터 발생 패턴에 따라 윈도우 구간 결정
- Session gap(비활성 기간) 기준 → 일정 시간 이상 이벤트 없으면 종료

- 동작 방식
- 이벤트 간 간격 추적
- 간격이 기준보다 작으면 같은 윈도우
- 기준보다 길면 이전 세션 닫고 새로운 세션 윈도우 시작
글로벌 윈도우 (Global Window)
- 전체 스트림을 하나의 윈도우로 간주
- 시간 제한 없음, 항상 열린 상태
- 사용자가 트리거(trigger) 정의해야 결과 산출 시점 결정
- 별도의 윈도우 분할 기준을 주지 않으면 모든 데이터가 한 창에 쌓이게 됨
- 예: count 트리거 → 100개마다 출력
윈도우 선택 가이드
텀블링 윈도우 사용 시
- 정기적인 리포트 생성
- 시간대별 통계 분석
- 배치 처리와 유사한 요구사항
슬라이딩 윈도우 사용 시
- 이동 평균 계산
- 실시간 트렌드 분석
- 겹치는 구간의 데이터 비교
세션 윈도우 사용 시
- 사용자 행동 분석
- 웹 세션 추적
- 비정기적인 이벤트 패턴 분석
글로벌 윈도우 사용 시
- 전체 데이터셋 분석
- 사용자 정의 집계 조건
- 카운트 기반 처리
윈도우 성능 고려사항
메모리 사용량
- 텀블링: 가장 효율적 (겹치지 않음)
- 슬라이딩: 중간 (겹치는 부분 존재)
- 세션: 가변적 (세션 길이에 따라)
- 글로벌: 가장 높음 (모든 데이터 유지)
처리 복잡도
- 텀블링: O(1) - 단순한 시간 기반 분할
- 슬라이딩: O(k) - k는 슬라이드 간격
- 세션: O(n) - n은 세션 수
- 글로벌: O(n) - n은 전체 데이터 수
관련 개념
- Window Implementation - 윈도우 구현 방법
- Triggers - 윈도우 트리거 메커니즘
- Watermarks - 이벤트 시간 처리