스트리밍 파이프라인

제한되지 않은 PCollection 또는 제한되지 않은 컬렉션은 스트리밍 파이프라인의 데이터를 나타냅니다. 제한되지 않은 컬렉션에는 Pub/Sub와 같이 지속적으로 업데이트되는 데이터 소스의 데이터가 포함됩니다.

제한되지 않은 컬렉션의 요소를 그룹화하는 데 키만 사용할 수는 없습니다. 데이터 소스에 새로운 요소가 지속적으로 추가되기 때문에 스트리밍 데이터의 지정된 키에 무한히 많은 요소가 있을 수 있습니다. 윈도우, 워터마크, 트리거를 사용하여 제한되지 않은 컬렉션의 요소를 집계할 수 있습니다.

윈도우 및 윈도우 함수

윈도우 함수는 제한되지 않은 컬렉션을 논리적 구성요소 또는 윈도우로 나눕니다. 윈도우 함수는 개별 요소의 타임스탬프를 기준으로 제한되지 않은 컬렉션을 그룹화합니다. 각 기간에는 유한한 수의 요소가 있습니다.

Apache Beam SDK 또는 Dataflow SQL 스트리밍 확장자로 다음 윈도우를 설정합니다.

텀블링 윈도우

텀블링 윈도우는 데이터 스트림에서 일관되고 분리된 시간 간격을 나타냅니다.

예를 들어 30초의 텀블링 윈도우를 설정하면 타임스탬프 값이 [0:00:00-0:00:30)인 요소가 첫 번째 윈도우에 있게 됩니다. 타임스탬프 값이 [0:00:30-0:01:00)인 요소는 두 번째 윈도우에 있습니다.

다음 이미지는 요소가 30초의 텀블링 윈도우로 나뉘는 방식을 보여줍니다.

텀블링 기간(30초 길이)을 보여주는 이미지

홉핑 윈도우

홉핑 윈도우는 데이터 스트림의 일관된 시간 간격을 나타냅니다. 홉핑 윈도우는 겹치는 반면 텀블링 윈도우는 분리됩니다.

예를 들어 홉핑 윈도우는 10초마다 시작하고 1분의 데이터와 윈도우를 캡처할 수 있습니다. 홉핑 윈도우가 시작하는 간격을 주기라고 합니다. 이 예시에는 1분의 윈도우와 30초의 주기가 있습니다.

다음 이미지는 요소가 30초 주기로 1분의 홉핑 윈도우로 나뉘는 방식을 보여줍니다.

1분 길이 및 30초 길이의 홉핑 기간을 보여주는 이미지

이동 평균 데이터를 구하려면 홉핑 윈도우를 사용하세요. 30초 주기를 갖는 1분의 홉핑 윈도우를 사용하여 30초마다 1분 이동 평균을 계산할 수 있습니다.

세션 윈도우

세션 윈도우는 다른 요소의 간격 기간 내에 있는 요소를 포함합니다. 간격 기간은 데이터 스트림의 새 데이터 사이의 간격입니다. 간격 기간이 지난 후 도착한 데이터는 새 윈도우에 할당됩니다.

예를 들어 세션 윈도우는 사용자 마우스 활동을 나타내는 데이터 스트림을 나눌 수 있습니다. 클릭 수가 많으면 이 데이터 스트림의 유휴 시간 주기가 길고 불규칙할 수 있습니다. 세션 윈도우에는 클릭으로 생성된 데이터가 포함될 수 있습니다.

세션 윈도우는 각 데이터 키에 다른 윈도우를 할당합니다. 텀블링 및 홉핑 윈도우는 데이터 키에 관계없이 지정된 시간 간격의 모든 요소를 포함합니다.

다음 이미지는 요소가 세션 윈도우로 나뉘는 방식을 보여줍니다.

최소 간격 기간의 세션 윈도우를 보여주는 이미지

워터마크

워터마크는 Dataflow가 윈도우에 속하는 모든 데이터가 도착할 것으로 예상하는 시점을 나타내는 임곗값입니다. 윈도우에 속하지만 워터마크보다 오래된 타임스탬프가 있는 새 데이터가 도착하면 데이터는 지연 데이터로 간주됩니다.

Dataflow는 다음과 같은 이유로 워터마크를 추적합니다.

  • 데이터가 시간 순서대로 또는 예측 가능한 간격으로 도착하지 않을 수도 있습니다.
  • 데이터 이벤트가 생성된 순서와 동일한 순서로 파이프라인에 표시되지 않을 수도 있습니다.

데이터 소스가 워터마크를 결정합니다. Apache Beam SDK를 사용하여 지연 데이터를 허용할 수 있습니다. Dataflow SQL은 지연 데이터를 처리하지 않습니다.

트리거

트리거는 데이터가 도착할 때 집계된 결과를 내보낼 시점을 결정합니다. 기본적으로 워터마크가 윈도우 끝을 통과할 때 결과를 내보냅니다.

Apache Beam SDK를 사용하여 스트리밍 파이프라인의 각 컬렉션에 대한 트리거를 만들거나 수정할 수 있습니다. Dataflow SQL로 트리거를 설정할 수 없습니다.

Apache Beam SDK는 다음 조건을 조합하여 작동하는 트리거를 설정할 수 있습니다.

  • 이벤트 시간은 각 데이터 요소의 타임스탬프로 표시됩니다.
  • 처리 시간(데이터 요소가 파이프라인의 특정 단계에서 처리되는 시간)
  • 컬렉션의 데이터 요소 수입니다.