Dataflow 스냅샷 사용

Dataflow 스냅샷은 스트리밍 파이프라인의 상태를 저장하므로 상태가 손실되는 일 없이 새로운 버전의 Dataflow 작업을 시작할 수 있습니다. 스냅샷은 백업 및 복구, 스트리밍 파이프라인 업데이트의 테스트 및 롤백, 기타 시나리오에서 유용합니다.

실행 중인 스트리밍 작업의 Dataflow 스냅샷을 만들 수 있습니다. 스냅샷에서 만드는 모든 새 작업은 Streaming Engine을 사용합니다. 또한 Dataflow 스냅샷을 사용하여 기존 파이프라인을 다운타임을 최소화하면서 보다 효율적이고 확장 가능한 Streaming Engine으로 마이그레이션할 수 있습니다.

이 가이드에서는 스냅샷을 만들고 스냅샷을 관리하며 스냅샷에서 작업을 만드는 방법을 설명합니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. Enable the Dataflow, Compute Engine, Cloud Logging, Cloud Storage, Google Cloud Storage JSON, BigQuery, Cloud Pub/Sub, Cloud Datastore, and Cloud Resource Manager APIs.

    Enable the APIs

스냅샷 만들기

콘솔

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

    작업으로 이동

    Dataflow 작업 목록이 상태와 함께 표시됩니다. 스트리밍 작업이 표시되지 않으면 새 스트리밍 작업을 실행해야 합니다. 스트리밍 작업의 예시는 템플릿 사용 빠른 시작을 참조하세요.

  2. 작업을 선택합니다.
  3. 작업 세부정보 페이지의 메뉴 바에서 스냅샷 만들기를 클릭합니다.
  4. 스냅샷 만들기 대화상자에서 다음 옵션 중 하나를 선택합니다.
    • 데이터 소스 제외: 이 옵션을 선택하면 Dataflow 작업 상태의 스냅샷만 만들 수 있습니다.
    • 데이터 소스 포함: 이 옵션을 선택하면 Dataflow 작업 상태의 스냅샷과 Pub/Sub 소스의 스냅샷을 모두 만듭니다.
  5. 만들기를 클릭합니다.

gcloud

스냅샷을 만듭니다.

gcloud dataflow snapshots create \
    --job-id=JOB_ID \
    --snapshot-ttl=DURATION \
    --snapshot-sources=true \
    --region=REGION

다음을 바꿉니다.

  • JOB_ID: 스트리밍 작업 ID
  • DURATION: 스냅샷이 만료되기 전까지 남은 시간(일 단위)으로 그 이후에는 스냅샷에서 더 이상 작업을 만들 수 없습니다. snapshot-ttl 플래그는 선택사항이며 지정되지 않으면 스냅샷은 7일 안에 만료됩니다. 5d 형식으로 값을 지정합니다. 지정할 수 있는 최대 기간은 30일(30d)입니다.
  • REGION: 스트리밍 작업이 실행 중인 리전

snapshot-sources 플래그는 Dataflow 스냅샷과 함께 Pub/Sub 소스를 스냅샷할지 여부를 지정합니다. true인 경우 Pub/Sub 소스에 대해 자동으로 스냅샷이 생성되고 Pub/Sub 스냅샷 ID가 출력 응답에 표시됩니다. create 명령어를 실행한 후 list 또는 describe 명령어를 실행하여 스냅샷 상태를 확인합니다.

Dataflow 스냅샷을 만들 때 다음 사항이 적용됩니다.

  • Dataflow 스냅샷에는 디스크 사용량 요금이 청구됩니다.
  • 스냅샷은 작업과 동일한 리전에 생성됩니다.
  • 작업의 작업자 위치가 작업의 리전과 다른 경우 스냅샷 생성이 실패합니다. Dataflow 리전 가이드를 참조하세요.
  • 2021년 2월 1일 이후에 작업이 시작되거나 업데이트된 경우에만 비 Streaming Engine 작업의 스냅샷을 만들 수 있습니다.
  • Dataflow 스냅샷으로 생성된 Pub/Sub 스냅샷은 Pub/Sub 서비스에서 관리되며 요금이 청구됩니다.
  • Pub/Sub 스냅샷은 생성일로부터 7일 이내에 만료됩니다. 정확한 수명은 소스 구독의 기존 백로그에 의해 생성 시 결정됩니다. 특히 Pub/Sub 스냅샷의 수명은 7 days - (age of oldest unacked message in the subscription)입니다. 예를 들어 가장 오래된 미확인 메시지가 3일 지난 구독이라고 가정해 보겠습니다. Pub/Sub 스냅샷이 이 구독으로 생성된 경우 항상 이 3일 된 백로그를 캡처하는 스냅샷은 스냅샷이 존재하는 한 4일 후에 만료됩니다. Pub/Sub 스냅샷 참조를 확인하세요.
  • 스냅샷 작업 중에 Dataflow 작업이 일시중지되고 스냅샷이 준비되면 다시 시작됩니다. 필요한 시간은 파이프라인 상태의 크기에 따라 다릅니다. 예를 들어 Streaming Engine 작업의 스냅샷을 만드는 데 필요한 시간은 일반적으로 Streaming Engine 이외의 작업보다 짧습니다.
  • 스냅샷이 진행되는 동안 작업을 취소하면 스냅샷이 취소됩니다.
  • 스냅샷이 진행되는 동안에는 작업을 업데이트하거나 드레이닝할 수 없습니다. 작업을 업데이트하거나 드레이닝하려면 스냅샷 프로세스에서 작업이 다시 시작될 때까지 기다려야 합니다.

스냅샷 페이지 사용

스냅샷을 만든 후 Google Cloud 콘솔의 스냅샷 페이지를 사용하여 프로젝트의 스냅샷을 보고 관리할 수 있습니다.

스냅샷을 클릭하면 스냅샷 세부정보 페이지가 열립니다. 이 페이지에서 스냅샷에 대한 추가 메타데이터는 물론 소스 작업과 모든 Pub/Sub 스냅샷에 대한 링크를 볼 수 있습니다.

스냅샷에 대한 자세한 정보를 볼 수 있는 Dataflow 스냅샷 세부정보 페이지입니다.

스냅샷 삭제

스냅샷 삭제는 스냅샷 프로세스를 중지하고 작업을 다시 시작할 수 있는 방법입니다. 또한 Dataflow 스냅샷을 삭제해도 연결된 Pub/Sub 스냅샷은 자동으로 삭제되지 않습니다.

콘솔

  1. Google Cloud 콘솔에서 Dataflow 스냅샷 페이지로 이동합니다.

    스냅샷으로 이동

  2. 스냅샷을 선택하고 삭제를 클릭합니다.
  3. 스냅샷 삭제 대화상자에서 삭제를 클릭하여 확인합니다.

gcloud

스냅샷을 삭제합니다.

gcloud dataflow snapshots delete SNAPSHOT_ID \
    --region=REGION

다음을 바꿉니다.

  • SNAPSHOT_ID: 스냅샷 ID
  • REGION: 스냅샷이 있는 리전

자세한 내용은 delete 명령어 참조를 참조하세요.

스냅샷에서 작업 만들기

스냅샷을 만든 후 스냅샷에서 새 작업을 만들어 Dataflow 작업 상태를 복원할 수 있습니다.

자바

스냅샷에서 새 작업을 만들려면 --createFromSnapshot 플래그와 --enableStreamingEngine 플래그를 모두 사용합니다.

  • 셸 또는 터미널에서 스냅샷으로 새 작업을 만듭니다. 예를 들면 다음과 같습니다.
    mvn -Pdataflow-runner compile exec:java \
        -Dexec.mainClass=MAIN_CLASS \
        -Dexec.args="--project=PROJECT_ID \
        --stagingLocation=gs://STORAGE_BUCKET/staging/ \
        --inputFile=gs://apache-beam-samples/shakespeare/* \
        --output=gs://STORAGE_BUCKET/output \
        --runner=DataflowRunner \
        --enableStreamingEngine \
        --createFromSnapshot=SNAPSHOT_ID \
        --region=REGION"

    다음을 바꿉니다.

    • MAIN_CLASS 또는 MODULE: Java 파이프라인의 경우 파이프라인 코드가 포함된 기본 클래스의 위치입니다. Python 파이프라인의 경우 파이프라인 코드가 포함된 모듈의 위치입니다. 예를 들어 Wordcount 예시를 사용할 경우 값은 org.apache.beam.examples.WordCount입니다.
    • PROJECT_ID: Google Cloud 프로젝트 ID
    • STORAGE_BUCKET: 임시 작업 애셋 및 최종 출력에 사용하는 Cloud Storage 버킷
    • SNAPSHOT_ID: 새 작업을 만들 스냅샷의 스냅샷 ID
    • REGION: 새 Dataflow 작업을 실행할 위치

Python

Dataflow 스냅샷에는 Python용 Apache Beam SDK 버전 2.29.0 이상이 필요합니다.

스냅샷에서 새 작업을 만들려면 --createFromSnapshot 플래그와 --enableStreamingEngine 플래그를 모두 사용합니다.

  • 셸 또는 터미널에서 스냅샷으로 새 작업을 만듭니다. 예를 들면 다음과 같습니다.
    python -m MODULE \
        --project PROJECT_ID \
        --temp_location gs://STORAGE_BUCKET/tmp/ \
        --input gs://apache-beam-samples/shakespeare/* \
        --output gs://STORAGE_BUCKET/output \
        --runner DataflowRunner \
        --enable_streaming_engine \
        --create_from_snapshot=SNAPSHOT_ID \
        --region REGION \
        --streaming

    다음을 바꿉니다.

    • MAIN_CLASS 또는 MODULE: Java 파이프라인의 경우 파이프라인 코드가 포함된 기본 클래스의 위치입니다. Python 파이프라인의 경우 파이프라인 코드가 포함된 모듈의 위치입니다. 예를 들어 Wordcount 예시를 사용할 경우 값은 org.apache.beam.examples.WordCount입니다.
    • PROJECT_ID: Google Cloud 프로젝트 ID
    • STORAGE_BUCKET: 임시 작업 애셋 및 최종 출력에 사용하는 Cloud Storage 버킷
    • SNAPSHOT_ID: 새 작업을 만들 스냅샷의 스냅샷 ID
    • REGION: 새 Dataflow 작업을 실행할 위치

Dataflow 스냅샷에서 작업을 만들 때 다음 사항이 적용됩니다.

  • 스냅샷에서 만든 작업은 스냅샷을 저장한 리전과 동일한 리전에서 실행해야 합니다.
  • Dataflow 스냅샷에 Pub/Sub 소스의 스냅샷이 포함된 경우 Dataflow 스냅샷에서 생성된 작업은 자동으로 해당 Pub/Sub 스냅샷을 소스로 seek합니다. Dataflow 스냅샷에서 작업을 만들 때 소스 작업에서 사용하는 주제와 동일한 Pub/Sub 주제를 지정해야 합니다.

  • Dataflow 스냅샷에 Pub/Sub 소스의 스냅샷이 포함되지 않고 소스 작업에서 Pub/Sub 소스를 사용하는 경우 Dataflow 스냅샷에서 작업을 만들 때 Pub/Sub 주제를 지정해야 합니다.

  • 스냅샷에서 만든 새 작업에도 업데이트 호환성 검사가 적용됩니다.

알려진 제한사항

Dataflow 스냅샷에는 다음 제한사항이 적용됩니다.

  • 템플릿 또는 Dataflow SQL 편집기를 사용하여 스냅샷에서 작업을 만들 수 없습니다.
  • 스냅샷 만료 기간은 Google Cloud CLI를 통해서만 설정될 수 있습니다.
  • Dataflow 스냅샷은 Pub/Sub 소스 스냅샷만 지원합니다.
  • 싱크 스냅샷은 지원되지 않습니다. 예를 들어 Dataflow 스냅샷을 만들 때는 BigQuery 스냅샷을 만들 수 없습니다.

문제 해결

이 섹션에서는 Dataflow 스냅샷과 상호작용할 때 일반적인 문제를 해결하기 위한 지침을 제공합니다.

지원팀에 문의하기 전에 알려진 제한사항 및 다음 문제 해결 섹션에 관련된 문제가 발생했는지 확인하세요.

스냅샷 생성 요청이 거부됨

Google Cloud 콘솔 또는 gcloud CLI에서 스냅샷 생성 요청을 제출하면 Dataflow 서비스는 전제조건 확인을 수행하고 모든 오류 메시지를 반환합니다. 스냅샷 생성 요청은 오류 메시지에 지정된 다양한 이유로 거부될 수 있습니다(예: 작업 유형이 지원되지 않거나 리전을 사용할 수 없는 경우).

작업이 너무 오래되어 요청이 거부되면 스냅샷을 요청하기 전에 작업을 업데이트해야 합니다.

스냅샷 생성 실패

여러 가지 이유로 스냅샷을 만들지 못할 수 있습니다. 예를 들어 소스 작업이 취소되었거나 프로젝트에 Pub/Sub 스냅샷을 만들 수 있는 올바른 권한이 없습니다. 작업의 job-message 로그에는 스냅샷 만들기의 오류 메시지가 포함됩니다. 스냅샷을 만들 수 없으면 소스 작업이 다시 시작됩니다.

스냅샷에서 작업을 만들 수 없음

스냅샷에서 작업을 만들 때 스냅샷이 존재하고 만료되지 않았는지 확인합니다. 새 작업은 Streaming Engine에서 실행해야 합니다.

일반적인 작업 생성 문제는 Dataflow 문제 해결 가이드를 참조하세요. 특히 스냅샷에서 생성된 새 작업에는 업데이트 호환성 검사가 적용되며, 이때 새 작업은 스냅샷된 소스 작업과 호환되어야 합니다.

스냅샷에서 생성된 작업이 거의 진행되지 않음

작업의 job-message 로그에는 작업 만들기에 대한 오류 메시지가 포함됩니다. 예를 들어 작업에서 Pub/Sub 스냅샷을 찾을 수 없습니다. 이 경우 Pub/Sub 스냅샷이 있고 만료되지 않았는지 확인합니다. 스냅샷의 가장 오래된 메시지가 7일이 지나면 Pub/Sub 스냅샷은 만료됩니다. Pub/Sub 서비스에서 만료된 Pub/Sub 스냅샷을 자동으로 삭제할 수 있습니다.

Pub/Sub 소스 스냅샷이 포함된 Dataflow 스냅샷에서 만든 작업의 경우 새 작업에 처리할 대규모 Pub/Sub 백로그가 있을 수 있습니다. 스트리밍 자동 확장을 사용하면 새 작업에서 백로그를 더 빠르게 지울 수 있습니다.

스냅샷이 생성되기 전에 스냅샷 소스 작업이 이미 비정상 상태일 수 있습니다. 소스 작업이 비정상 상태인 이유를 파악하면 새 작업의 문제를 해결하는 데 도움이 될 수 있습니다. 일반적인 작업 디버깅 팁은 Dataflow 문제 해결 가이드를 참조하세요.