스트리밍 파이프라인

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

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

기간 개념은 일괄 파이프라인의 데이터를 나타내는 bounded PCollection에도 적용됩니다. 일괄 파이프라인의 기간 설정에 대한 자세한 내용은 bounded PCollection으로 기간 설정에 대한 Apache Beam 문서를 참조하세요.

Dataflow 파이프라인에 제한된 데이터 소스(즉, 지속적으로 업데이트되는 데이터가 포함되지 않은 소스)가 있고 파이프라인이 제한된 소스를 사용할 때 --streaming 플래그를 사용하여 스트리밍 모드로 전환되는 경우 완전히 소비되면 파이프라인 실행이 중지됩니다.

스트리밍 모드 사용

스트리밍 모드에서 파이프라인을 실행하려면 파이프라인을 실행할 때 명령줄에서 --streaming 플래그를 설정합니다. 파이프라인을 구성하면 프로그래매틱 방식으로 스트리밍 모드를 설정할 수도 있습니다.

스트리밍 모드에서는 배치 소스가 지원되지 않습니다.

대규모 작업자 풀로 파이프라인을 업데이트하면 스트리밍 작업이 예상대로 확장되지 않을 수 있습니다. Streaming Engine을 사용하지 않는 스트리밍 작업의 경우 원래 작업 시작 시 할당된 원래 작업자 수와 Persistent Disk 리소스를 초과하여 확장할 수 없습니다. Dataflow 작업을 업데이트하고 새 작업에 다수의 작업자를 지정할 때는 원래 작업에 대해 지정한 최대 작업자 수와 동일한 작업자 수만 지정할 수 있습니다.

다음 플래그를 사용하여 최대 작업자 수를 지정합니다.

자바

--maxNumWorkers

Python

--max_num_workers

Go

--max_num_workers

윈도우 및 윈도우 함수

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

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

텀블링 윈도우

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

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

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

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

홉핑 윈도우

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

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

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

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

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

세션 윈도우

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

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

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

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

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

워터마크

워터마크는 Dataflow가 윈도우에 속하는 모든 데이터가 도착할 것으로 예상하는 시점을 나타내는 기준점입니다. 워터마크가 기간의 끝을 지나면서 진행되고 새 데이터가 기간 내에 타임스탬프와 함께 도착하면 데이터는 지연 데이터로 간주됩니다. 자세한 내용은 Apache Beam 문서의 워터마크 및 지연 데이터를 참조하세요.

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

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

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

트리거

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

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

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

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

다음 단계

스트리밍 SQL 설계에 대한 자세한 내용은 One SQL to Rule Them All을 참조하세요.