파이프라인 스트리밍 모드 설정

Dataflow는 스트리밍 작업에 두 가지 모드를 지원합니다.

  • 정확히 한 번 모드. 이 모드는 모든 Dataflow 스트리밍 작업의 기본값입니다. 이 모드에서 Dataflow는 데이터가 파이프라인을 통과할 때 레코드가 삭제되거나 중복되지 않도록 보장합니다.
  • 적어도 한 번 모드. 이 모드는 레코드가 최소 한 번 처리되도록 보장합니다(즉, 입력 레코드가 손실되지 않음). 그러나 이 모드에서는 중복 레코드가 발생할 수 있습니다. 중복을 허용할 수 있는 사용 사례의 경우 적어도 한 번 모드는 작업 비용과 지연 시간을 크게 낮출 수 있습니다.

사용할 스트리밍 모드 선택하기

파이프라인의 정확한 결과와 예측 가능한 시맨틱스를 보장해야 하는 경우에는 적어도 한 번 모드를 선택하세요. 예를 들면 다음과 같습니다.

  • 개수, 합계, 평균과 같은 집계를 사용하는 파이프라인.
  • 한 번만 처리되는 레코드에 의존하는 비즈니스에 중요한 사용 사례. 예를 들어 사기 행위 감지, 네트워크 위협 감지, 전자상거래 인벤토리 대시보드가 있습니다.

워크로드가 중복 레코드를 허용하고 비용 또는 지연 시간을 줄여야 하는 경우 적어도 한 번 스트리밍 모드를 선택합니다. 예를 들면 다음과 같습니다.

  • Dataflow에서 중복 삭제가 다운스트림으로 수행되는 워크로드. 예를 들어 BigQuery 또는 SQL 데이터 저장소에 쓰는 파이프라인입니다.
  • 집계가 없는 맵 전용 파이프라인. 예를 들어 로그 처리, 변경 데이터 캡처 또는 추출, 변환, 로드(ETL) 작업이 포함되며 이 작업에서는 파이프라인이 스키마 변환과 같은 요소별 변환만 수행합니다.
  • 출력 싱크가 1회만 전송을 보장할 수 없는 파이프라인(예: Pub/Sub). 이 경우 파이프라인 내의 중복 삭제가 불필요할 수 있으며 적어도 한 번 스트리밍 모드의 비용 및 지연 시간 감소 이점을 얻을 수 있습니다.
  • Pub/Sub에서 읽는 파이프라인. Pub/Sub에서 읽기는 적어도 한 번 모드를 사용할 때 크게 최적화됩니다.

추가 고려사항

  • 적어도 한 번 모드는 파이프라인의 비용과 지연 시간을 크게 줄여줄 수 있습니다. 정확한 영향은 파이프라인의 특성에 따라 다릅니다. 실제 부하에서 적어도 한 번 스트리밍을 테스트하여 영향을 평가합니다.

  • 적어도 한 번 모드를 사용하는 경우 중복 레코드 비율은 재시도 횟수에 따라 다릅니다. 기준 비율은 일반적으로 낮습니다(1% 미만). 하지만 워커 노드가 실패하거나 다른 조건으로 인해 반복 RPC 호출이 발생하면 급증이 발생할 수 있습니다.

  • 스트리밍 모드는 Streaming Engine이 레코드를 처리하는 방법에 영향을 주지만 I/O 커넥터의 시맨틱스를 변경하지 않습니다. I/O 시맨틱스를 스트리밍 모드에 맞게 조정하는 것이 좋습니다. 예를 들어 BigQuery I/O 커넥터에 적어도 한 번 스트리밍 모드를 사용하는 경우 쓰기 모드를 STORAGE_API_AT_LEAST_ONCE로 설정합니다. 적어도 한 번 스트리밍을 사용하는 경우 Google에서 제공하는 Dataflow 템플릿에서 이 옵션을 자동으로 사용 설정합니다.

  • Map과 같은 요소별 변환은 항상 멱등성을 갖지는 않습니다. 예를 들어 메시지를 수신하고 현재 타임스탬프를 추가하는 함수를 가정해 보겠습니다. 이 경우 중복 레코드가 여러 개의 고유한 출력을 생성할 수 있습니다. 이 파이프라인에는 적어도 한 번 모드가 적합하지 않을 수 있습니다.

스트리밍 모드 설정

정확히 한 번 처리는 모든 Dataflow 작업의 기본 설정입니다. 적어도 한 번 스트리밍 모드를 사용 설정하려면 streaming_mode_at_least_once 서비스 옵션을 설정합니다.

Java

--dataflowServiceOptions=streaming_mode_at_least_once

Python

--dataflow_service_options=streaming_mode_at_least_once

Go

--dataflow_service_options=streaming_mode_at_least_once

streaming_mode_at_least_once 옵션을 지정하지 않으면 Dataflow는 정확히 한 번 스트리밍 모드를 사용합니다.

streaming_mode_at_least_once 옵션을 설정하면 Dataflow가 리소스 기반 결제Streaming Engine을 자동으로 사용 설정합니다.

실행 중인 작업에서 스트리밍 모드를 업데이트하려면 기존 작업을 중지하고 교체 작업을 실행합니다. 자세한 내용은 교체 작업 실행을 참조하세요.

템플릿의 스트리밍 모드 선택하기

Dataflow 스트리밍 템플릿을 실행할 때 스트리밍 모드를 선택하려면 다음 단계를 수행합니다.

콘솔

  1. Google Cloud 콘솔에서 Dataflow 작업 페이지로 이동합니다.

    작업으로 이동

  2. 템플릿에서 작업 만들기를 클릭합니다.

  3. Dataflow 템플릿 드롭다운 메뉴에서 실행할 템플릿을 선택합니다.

  4. 스트리밍 모드에서 스트리밍 모드를 선택합니다. 템플릿에서 하나의 모드만 지원하는 경우 이 옵션은 사용 중지됩니다.

gcloud

1회 이상 모드를 사용 설정하려면 additional-experiments 플래그에 streaming_mode_at_least_once 옵션을 설정합니다.

--additional-experiments=streaming_mode_at_least_once

1회만 모드를 사용 설정하려면 additional-experiments 플래그에 streaming_mode_exactly_once 옵션을 설정합니다.

--additional-experiments=streaming_mode_exactly_once

이러한 두 옵션은 상호 배타적입니다. 이러한 옵션 중 하나를 설정하지 않으면 템플릿은 기본적으로 템플릿 메타데이터에 의해 결정되는 스트리밍 모드로 설정됩니다. 자세한 내용은 커스텀 템플릿을 참조하세요.

REST

FlexTemplateRuntimeEnvironment(Flex 템플릿) 또는 RuntimeEnvironment(기본 템플릿) 객체에서 additionalExperiments 필드를 사용합니다.

{
  additionalExperiments : ["streaming_mode_at_least_once"]
  ...
}

커스텀 템플릿

적어도 한 번 처리를 지원하는 커스텀 템플릿을 만드는 경우 다음 최상위 필드를 템플릿 메타데이터 파일에 추가합니다.

{
  "streaming": true,
  "supportsAtLeastOnce": true,
  "supportsExactlyOnce": true,
  "defaultStreamingMode": "AT_LEAST_ONCE"
}

이러한 메타데이터 필드를 사용하면 Google Cloud 콘솔에서 템플릿을 배포할 때 사용자가 스트리밍 모드를 선택할 수 있습니다. defaultStreamingMode 필드는 선택사항이며 템플릿의 기본 스트리밍 모드를 지정합니다. defaultStreamingModeg를 지정하지 않고 템플릿에서 두 모드를 모두 지원하는 경우 1회만 모드가 기본값입니다.

자세한 내용은 Dataflow 템플릿 문서의 다음 섹션을 참조하세요.

작업의 스트리밍 모드 보기

작업의 스트리밍 모드를 보려면 Google Cloud 콘솔의 작업 페이지로 이동합니다.

작업으로 이동

스트리밍 모드는 작업 세부정보 페이지의 작업 정보 패널에도 나열됩니다.

제한사항

적어도 한 번 스트리밍 모드를 사용하려면 리소스 기반 결제를 사용하는 Streaming Engine이 필요합니다.

가격 책정

적어도 한 번 모드는 항상 리소스 기반 결제를 사용하며 작업에서 사용한 총 리소스에 대한 요금이 청구됩니다.

Streaming Engine 컴퓨팅 단위의 단위당 비용은 스트리밍 모드에 관계없이 동일합니다. 그러나 대부분의 경우 파이프라인에서 적어도 한 번 모드를 사용할 때 총 리소스를 훨씬 적게 소비합니다.

다음 단계