동적 스레드 확장

동적 스레드 확장은 Dataflow 수직 확장 기능 제품군의 일부입니다. 이는 각 Dataflow 작업자가 실행하는 동시 작업 수(번들이라고도 함)를 조정하여 Dataflow의 수평 자동 확장 기능을 보완합니다. 목표는 전반적인 Dataflow 파이프라인의 효율성을 높이는 것입니다.

Dataflow가 파이프라인을 실행할 때 작업자라고 하는 여러 Compute Engine 가상 머신(VM)에 처리가 분산됩니다. 스레드는 더 큰 프로세스 내에서 실행되는 단일 실행 가능 태스크입니다. Dataflow는 각 작업자에서 스레드를 여러 개 실행합니다.

동적 스레드 확장을 사용 설정하면 Dataflow 서비스에서 자동으로 각 Dataflow 작업자에서 실행하기 적절한 스레드 수를 선택합니다. 각 스레드에서 태스크를 실행하므로 스레드 수를 늘리면 작업자에서 더 많은 태스크가 동시에 실행될 수 있습니다. 수평 자동 확장 기능과 함께 이 기능을 사용하면 파이프라인에서 사용되는 스레드 총개수는 동일하게 유지되지만 작업자가 더 적게 사용됩니다.

동적 스레드 확장은 알고리즘을 사용하여 파이프라인 실행 중에 생성된 리소스 사용률 신호를 기반으로 각 작업자에게 필요한 스레드 수를 결정합니다. 자세한 내용은 이 페이지의 작동 방식 섹션을 참조하세요.

이점

동적 스레드 확장에는 다음과 같은 잠재적인 이점이 있습니다.

  • 작업자당 CPU 및 메모리 사용률을 향상시켜 Dataflow 작업자가 데이터를 더욱 효율적으로 처리할 수 있습니다.
  • 파이프라인 실행 중에 태스크를 동시에 실행할 수 있는 작업자 스레드 수를 조정하여 병렬 처리를 향상시킵니다.
  • 대규모 데이터 세트를 처리하는 데 필요한 작업자 수를 줄여 비용을 줄일 수 있습니다.

지원 및 제한 사항

  • Java, Python, Go SDK를 사용하는 파이프라인에 동적 스레드 확장을 사용할 수 있습니다.
  • Dataflow 작업은 Runner v2를 사용해야 합니다.
  • 일괄 파이프라인만 지원됩니다.
  • CPU 또는 메모리를 많이 사용하는 파이프라인은 동적 스레드 확장으로 얻는 혜택이 없을 수 있습니다.
  • 동적 스레드 확장을 사용해도 Dataflow 작업을 완료하는 데 걸리는 시간은 감소하지 않습니다.

작동 원리

동적 스레드 확장은 자동 조정 원칙을 사용하여 Dataflow 작업자 풀의 각 작업자에서 스레드 수를 동적으로 올리거나 줄입니다. 스레드 수는 작업자별로 독립적으로 확장됩니다. 각 스레드에서 태스크를 실행합니다. 스레드 수를 늘리면 작업자에서 더 많은 태스크를 동시에 실행할 수 있습니다. 태스크가 완료되고 스레드가 더 이상 필요하지 않으면 스레드 수가 줄어듭니다. 알고리즘은 각 작업자에게 필요한 스레드 수를 결정합니다.

다음 두 조건 모두 충족되면 작업자의 스레드 수가 vCPU당 스레드 최대 2개로 증가합니다.

  • 작업자의 메모리 사용률이 50% 미만입니다.
  • 작업자의 CPU 사용률이 65% 미만입니다.

다음 조건이 충족되면 작업자의 스레드 수가 vCPU당 스레드 최소 하나로 줄어듭니다.

  • 작업자의 메모리 사용률이 70%를 초과합니다.

작업의 메모리 및 CPU 사용률을 보려면 Dataflow 웹 인터페이스의 작업 측정항목 탭을 사용합니다.

권장사항이 유효한지 확인하려면 Dataflow는 리소스 사용률이 안정화될 때까지 기다린 후 작업자에게 권장사항을 전송합니다. 예를 들어 메모리 및 CPU 사용률이 확장 범위 내에 있을 수 있지만 리소스 사용률이 계속 증가하므로 Dataflow는 권장사항을 전송하지 않습니다. 리소스 사용률이 안정화되면 Dataflow에서 권장사항을 전송합니다.

메모리 부족(OOM) 오류가 발생하면 스레드 확장이 자동으로 중지되고 파이프라인이 vCPU당 스레드 하나로 실행됩니다.

동적 스레드 확장 사용 설정

동적 스레드 확장을 사용 설정하려면 다음 Dataflow 서비스 옵션을 사용합니다.

자바

--dataflowServiceOptions=enable_dynamic_thread_scaling

Python

--dataflow_service_options=enable_dynamic_thread_scaling

Go

--dataflow_service_options=enable_dynamic_thread_scaling

동적 스레드 확장을 사용 설정하면 실행 중에 파이프라인을 사용할 수 있는 초기 작업자 수와 최대 작업자 수도 설정할 수 있습니다. 자세한 내용은 파이프라인 옵션을 참조하세요.

동적 스레드 확장이 사용 설정되어 있는지 확인

동적 스레드 확장이 사용 설정되면 작업자 로그 파일에 다음 메시지가 표시됩니다.

Enabling thread vertical scaling feature in worker.

작업자 로그 파일을 보려면 로그 탐색기에서 쿼리을 사용하여 로그 이름으로 로그를 필터링합니다. 필터에 다음 로그 이름을 사용합니다.

projects/PROJECT_ID/logs/dataflow.googleapis.com%2Fharness

작업자 로그 파일에서 권장 스레드 수를 확인할 수 있습니다. 다음 메시지에는 권장 스레드 수가 포함되어 있습니다.

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

리소스 사용률이 확장 범위에 있지 않는 경우 표시된 값은 작업자의 vCPU 수와 동일합니다.

Google Cloud 콘솔을 사용하여 동적 스레드 확장이 사용 설정되었는지 여부를 확인할 수도 있습니다. 사용 설정된 경우 Dataflow 작업 정보 패널 파이프라인 옵션 섹션의 dataflowServiceOptions 행에 enable_dynamic_thread_scaling이 표시됩니다.

문제 해결

이 섹션에서는 동적 스레드 확장과 관련된 일반적인 문제를 해결하기 위한 지침을 제공합니다.

동적 스레드 확장을 사용 설정하면 성능이 저하됨

다음과 같은 경우 스레드 수가 증가하면 성능 문제가 발생할 수 있습니다.

  • 여러 프로세스가 동일한 리소스를 사용하려고 할 때 한 프로세스가 리소스를 사용하는 동안 다른 프로세스는 대기해야 합니다. 이러한 상황을 리소스 경합이라고 합니다. 리소스 경합이 발생하면 파이프라인 성능이 저하될 수 있습니다.
  • 메모리 부족 오류가 발생하면 동적 스레드 확장이 중지됩니다. 일부 경우에는 메모리 부족 오류로 인해 파이프라인이 실패할 수 있습니다.

스레드 수가 증가했는지 확인합니다. 권장 스레드 수를 확인하는 방법에 대한 자세한 내용은 이 페이지의 스레드 확장이 사용 설정되었는지 확인을 참조하세요.

스레드 확장이 사용 설정된 경우 이 문제를 해결하려면 파이프라인을 실행할 때 동적 스레드 확장 서비스 옵션을 포함하지 마세요.

통합 작업자 … 사용 설정 및 사용 중지

동적 스레드 확장을 사용 설정하면 다음 오류와 함께 작업이 실패할 수 있습니다.

The workflow could not be created. Causes: (ID): Unified worker misconfigured by user and was both enabled and disabled.

이 오류는 Runner v2가 명시적으로 사용 중지된 경우에 발생합니다.

이 문제를 해결하려면 Runner v2를 사용 설정합니다. 자세한 내용은 'Dataflow Runner V2 사용' 페이지의 Dataflow Runner v2 사용 설정 섹션을 참조하세요.

SDK 업그레이드

동적 스레드 확장을 사용 설정하면 다음 오류와 함께 작업이 실패할 수 있습니다.

자바

Dataflow Runner v2 requires the Apache Beam Java SDK version 2.29.0 or higher. Please upgrade your SDK and resubmit your job.

Python

Dataflow Runner v2 requires the Apache Beam SDK, version 2.21.0 or higher. Please upgrade your SDK and resubmit your job.

이 오류는 SDK 버전이 Runner v2를 지원하지 않아 사용 설정할 수 없을 때 발생합니다.

이 문제를 해결하려면 Runner v2를 지원하는 SDK 버전을 사용합니다.

스레드 수직 확장 기능을 사용 설정할 수 없음

동적 스레드 확장을 사용 설정하면 다음 오류와 함께 작업이 실패할 수 있습니다.

The workflow could not be created. Causes: (ID): Thread vertical scaling feature can not be enabled while number_of_worker_harness_threads is specified.

이 오류는 파이프라인이 numberOfWorkerHarnessThreads 또는 number_of_worker_harness_threads 파이프라인 옵션을 사용하여 작업자당 스레드 수를 명시적으로 설정할 때 발생합니다.

이 문제를 해결하려면 파이프라인에서 numberOfWorkerHarnessThreads 또는 number_of_worker_harness_threads 파이프라인 옵션을 삭제합니다.