[Kafka Streams] 윈도우 종류와 특징 소개

Hocaron·2024년 8월 14일

Kafka

목록 보기
1/2
post-thumbnail

Kafka Streams는 실시간 데이터 처리를 위해 강력한 스트림 처리 기능을 제공한다. 다양한 윈도우링 옵션을 통해 데이터 처리의 유연성도 높일 수 있어. Kafka Streams에서 제공하는 주요 윈도우 종류와 그 특징, 그리고 사용 예시를 알아보자.

1. Tumbling Window (텀블링 윈도우)

Tumbling Window는 고정된 크기의 시간 간격으로 데이터를 나누는 가장 기본적인 윈도우 타입이다. 각 윈도우는 연속적이고, 서로 겹치지 않아서 이벤트는 하나의 윈도우에만 속하게 된다.

특징

  • 고정된 크기의 윈도우
  • 윈도우 간에 중복되지 않음 (Overlapping 없음)
  • 주기적인 데이터 분석에 적합
TimeWindows.ofSizeAndGrace(Duration.ofMinutes(5), Duration.ofMinutes(1))

이 코드에서는 5분 간격으로 윈도우를 설정하고, 1분의 그레이스 기간을 둬서 늦게 도착한 데이터를 처리할 수 있게 해준다.

2. Hopping Window (호핑 윈도우)

Hopping Window는 일정한 간격으로 슬라이딩하면서 데이터를 그룹화하는 윈도우 타입이다. 각 윈도우는 일정한 시간 간격으로 시작되고, 윈도우 간에 중첩이 있을 수 있다. 그래서 하나의 이벤트가 여러 윈도우에 포함될 수 있다.

특징

  • 고정된 크기의 윈도우
  • 윈도우 간 중첩 가능 (Overlapping 가능)
  • 연속적인 시간 분석에 적합
TimeWindows.ofSizeAndGrace(Duration.ofMinutes(5), Duration.ofMinutes(1))
      .advanceBy(Duration.ofMinutes(1))

이 코드는 5분 간격의 윈도우를 1분마다 슬라이딩하면서 데이터를 그룹화한다. 즉, 매 1분마다 새로운 윈도우가 생성되고, 이전 윈도우와 겹칠 수 있다.

3. Sliding Window (슬라이딩 윈도우)

Sliding Window는 두 이벤트 간의 시간 차이를 기반으로 동적으로 윈도우를 생성하는 타입이다. 윈도우는 이벤트가 발생할 때마다 이동하며, 중첩될 수 있다. 이 윈도우는 이벤트 간의 상관관계를 분석할 때 유용하다.

특징

  • 동적으로 크기가 변하는 윈도우
  • 이벤트 발생 시마다 윈도우가 이동함
  • 윈도우 간 중첩 가능 (Overlapping 가능)
SlidingWindows.ofTimeDifferenceAndGrace(Duration.ofMinutes(5), Duration.ofMinutes(1))

이 설정은 두 이벤트 간의 최대 시간 차이가 5분일 때 동일한 윈도우에 포함시키고, 그레이스 기간으로 1분을 허용한다.


체크 표시가 되어있는 윈도우를 보면 새로운 이벤트를 포함하는 것도 아닌데 생겼다. 이런 윈도우를 편하게 후속 윈도우라고 불러보겠다.

언제 후속 윈도우가 생길까?

기본 개념: n, n-1, …, 1의 규칙

  • n: 가장 최근에 도착한 레코드가 포함된 슬라이딩 윈도우
  • n-1: 직전 시점에 생성된 윈도우, 해당 시점의 레코드를 포함
  • n-2, …, 1: 이전 시점에 생성된 윈도우들이며, 이전 레코드를 포함

첫 번째 그래프: A 레코드 도착

  • 시점: 5ms에 A 레코드 도착
  • 파란색 윈도우 (n) 생성:
    • A 레코드를 포함하는 윈도우가 생성됩니다. 윈도우의 범위는 [0ms, 5ms].
    • 이 시점에서는 윈도우가 하나이므로 n에 해당하는 윈도우

두 번째 그래프: B 레코드 도착

  • 시점: 6ms에 B 레코드 도착
  • 파란색 윈도우 (n-1) 종료, 파란색 후속 윈도우 (n) 생성:
    • 파란색 윈도우 (n-1)의 종료시간이 B 레코드의 인입 시점보다 이전이므로, 닫히고 후속 윈도우가 생성.
    • 후속 파란색 윈도우 (n)는 B 레코드를 포함하고 윈도우의 범위는 [5ms 1ms, 10ms 1ms].
  • 빨간색 윈도우 (n-1) 생성:
    • 새로운 슬라이딩 윈도우가 생성되며, A와 B 레코드를 모두 포함. 윈도우의 범위는 [1ms, 6ms].

세 번째 그래프: C 레코드 도착

  • 시점: 8ms에 C 레코드 도착
  • 파란색 후속 윈도우 (n-1) 유지:
    • 파란색 윈도우 (n-1)는 유지. 윈도우의 범위는 [5ms 1ms, 10ms 1ms].
  • 빨간색 윈도우 종료, 빨간색 후속 윈도우 (n-2) 생성:
  • 빨간색 윈도우 (n-2)는 C 레코드 인입 시점보다 종료시간이 이전이므로 닫히고, 후속 윈도우가 생성. 윈도우의 범위는 [6ms 1ms, 11ms 1ms].
  • 초록색 윈도우 (n) 생성:
    • 새로운 슬라이딩 윈도우가 생성되어 A, B, C 레코드를 포함. 윈도우의 범위는 [3ms, 8ms].

네 번째 그래프: D 레코드 도착

  • 시점: 11ms에 D 레코드 도착
  • 파란색 후속 윈도우 닫힘:
    • 파란색 윈도우 (n-1)는 D 레코드 인입 시점보다 종료시간이 이전이므로 닫힘.
  • 빨간색 윈도우 (n-1) 유지:
    • 빨간색 윈도우 (n-1)는 유지됩니다. 윈도우의 범위는 [6ms 1ms, 11ms 1ms].
  • 초록색 윈도우 닫히고, 초록색 후속 윈도우 (n-2) 생성:
    • 초록색 윈도우 는 D 레코드 인입 시점보다 종료시간이 이전이므로 닫히고, 후속 윈도가 생성. 윈도우의 범위는 [8ms 1ms, 13ms 1ms].
  • 보라색 윈도우 (n) 생성:
    • 새로운 슬라이딩 윈도우가 생성되어 B, C, D 레코드를 포함합니다. 윈도우의 범위는 [6ms, 11ms].

이런 특징으로 인해 사용자 로그인 시도에 슬라이딩 윈도우를 사용할 수 있다.

슬라이딩 윈도우는 짧은 시간 간격으로 이벤트를 처리하기 때문에, 실시간으로 발생하는 중요한 이벤트(예: 트랜잭션 실패, 사용자 로그인 시도 등)에 대한 빠른 알림과 대응이 가능하다. 이로 인해 실시간 트리거 시스템이 효과적으로 운영될 수 있다. 특정 시간 내에 발생한 모든 이벤트의 합계나 평균을 구하는 경우, 여러 윈도우에 포함된 데이터를 통해 보다 정확한 결과를 얻을 수 있다.

4. Session Window (세션 윈도우)

Session Window는 활동 간의 간격을 기준으로 윈도우를 정의한다. 데이터가 일정 기간 동안 발생하지 않으면 세션이 종료되고, 새로운 데이터가 도착하면 새로운 세션이 시작된다. 세션 윈도우는 사용자 활동을 추적하거나 이벤트 간의 연속성을 분석하는 데 유용하다.

특징

  • 활동 간의 간격을 기반으로 윈도우 생성
  • 비정형적(Variable)인 윈도우 크기
  • 사용자 행동이나 이벤트 간의 연관성을 분석하는 데 적합
SessionWindows.withGapAndGrace(Duration.ofMinutes(5), Duration.ofMinutes(1))

이 코드에서는 5분의 비활동 기간 이후 세션을 종료하고, 그레이스 기간으로 1분을 설정해서 세션 종료 후 도착하는 데이터를 처리할 수 있게 해준다.

마무리

Kafka Streams는 다양한 윈도우링 옵션을 통해 실시간 스트림 데이터를 유연하게 처리할 수 있다. 각 윈도우 타입은 특정한 데이터 처리 요구에 맞게 설계되었고, 이러한 윈도우링 옵션을 잘 활용하면 복잡한 데이터 분석 및 처리 작업을 보다 쉽게 할 수 있다. 이 글에서 소개한 윈도우 타입들을 이해하고, 필요에 따라 적절한 윈도우를 선택해서 사용해보자.

References

profile
기록을 통한 성장을

0개의 댓글