병목 현상은 한 단계, 스테이지 또는 작업자가 전체 작업 속도를 저하시킬 때 발생합니다. 병목 현상으로 인해 유휴 작업자가 발생하고 지연 시간이 증가할 수 있습니다.
Dataflow가 병목 현상을 감지하면 작업 그래프에 알림이 표시되고 단계 정보 패널에 병목 현상의 종류와 원인이 표시됩니다(알려진 경우). Dataflow는 병목 현상 감지 정보를 Stackdriver 측정항목으로 내보내기도 하며, 이 측정항목은 데이터를 시계열로 표시합니다. 이를 통해 시간 경과에 따른 병목 현상이나 과거의 병목 현상을 확인할 수 있습니다.
병목 현상 이해
Dataflow가 스트리밍 파이프라인을 실행하면 작업은 스트리밍 셔플, 사용자 정의 함수 (DoFn
) 처리 스레드, 영구 상태 체크포인트와 같은 일련의 구성요소로 구성됩니다. 데이터 흐름을 용이하게 하기 위해 Dataflow는 대기열을 사용하여 이러한 구성요소를 연결합니다. 데이터가 업스트림에서 다운스트림으로 푸시됩니다.
많은 파이프라인에서 전체 처리량 용량은 단일 구성요소에 의해 제한되어 파이프라인에 병목 현상이 발생합니다. 데이터가 병목 현상을 통과할 수 있는 속도는 파이프라인이 입력 데이터를 수락하고 처리할 수 있는 속도를 제한합니다.
예를 들어 스트리밍 셔플 다운스트림에서 DoFn
처리가 발생하는 파이프라인을 생각해 보겠습니다. 이들 사이의 대기열은 셔플되었지만 처리되지 않은 데이터를 버퍼링합니다. DoFn
처리가 스트리밍 셔플에서 데이터를 생성하는 속도만큼 빠르게 데이터를 소비할 수 없는 경우 대기열이 증가합니다. 병목 현상이 장기화되면 대기열이 용량에 도달할 수 있습니다. 이 시점에서 추가 셔플이 일시중지되고 백로그가 업스트림으로 전파됩니다. 상류의 대기열에도 백로그가 누적되어 결국 데이터 소스까지 이어지는 속도 저하가 발생하므로 전체 파이프라인이 입력을 따라갈 수 없습니다.
병목 현상이 발생하면 파이프라인의 단일 지점에서 백로그가 발생하더라도 파이프라인의 상당 부분이 비정상으로 표시될 수 있습니다. 이 동작으로 인해 병목 현상을 디버그하기 어려울 수 있습니다. 병목 현상 감지의 목표는 정확한 위치와 원인을 파악하여 추측을 없애 근본 원인을 수정할 수 있도록 하는 것입니다.
지연 시간이 5분 기준점을 초과하면 Dataflow에서 병목 현상을 감지합니다. 지연 시간이 이 기준점을 넘지 않으면 Dataflow에서 병목 현상을 감지하지 않습니다.
병목 현상 감지는 항상 조치를 요구하지 않으며 사용 사례에 따라 다릅니다. 파이프라인은 5분을 초과하는 일시적인 지연이 있어도 정상적으로 작동할 수 있습니다. 사용 사례에서 허용되는 경우 표시된 병목 현상을 해결하지 않아도 됩니다.
병목 현상의 종류
Dataflow에서 병목 현상을 감지하면 모니터링 인터페이스에 문제의 심각도가 표시됩니다. 병목 현상은 다음 카테고리로 분류됩니다.
- 처리가 중단되어 진행되지 않음
- 이 단계에서 파이프라인 진행이 완전히 중단됩니다.
- 처리가 진행 중이지만 속도가 느림
- 파이프라인이 도착하는 데이터를 도착하는 속도로 처리할 수 없습니다. 그 결과 백로그가 증가하고 있습니다.
- 처리가 진행 중이지만 백로그가 꾸준함
- 파이프라인이 진행 중이며 처리 속도가 입력 속도와 비슷합니다. 처리 속도가 충분히 빨라 백로그가 증가하지는 않지만 누적된 백로그도 크게 감소하지는 않습니다.
- 처리가 진행 중이며 백로그를 따라잡고 있음
- 백로그가 감소하고 있지만 현재 병목 현상으로 인해 파이프라인이 더 빨리 따라잡지 못하고 있습니다. 백로그가 있는 파이프라인을 시작하는 경우 이 상태는 정상일 수 있으며 개입이 필요하지 않을 수 있습니다. 진행 상황을 모니터링하여 백로그가 계속 감소하는지 확인합니다.
병목 현상의 원인
모니터링 인터페이스에는 병목 현상의 원인이 표시됩니다(알려진 경우). 이 정보를 사용하여 문제를 해결하세요.
- 처리 시간이 긴 작업
- 계산의 처리 시간이 깁니다. 영향을 받는 계산이 사용자 코드에 있는 경우 코드를 최적화할 방법을 찾아보세요. 디버깅을 지원하기 위해 작업자 로그에는 5분 이상 멈춰 있는 작업의 스택 트레이스가 표시됩니다.
- Apache Kafka 소스 파티션 부족
Apache Kafka 소스 컴퓨팅에 파티션이 부족합니다. 이 문제를 해결하려면 다음을 시도해 보세요.
- Kafka 파티션 수를 늘립니다.
Redistribute
변환을 사용하여 데이터를 더 효율적으로 재배포하고 동시 로드합니다.
자세한 내용은 Apache Kafka에서 Dataflow로 읽기 페이지의 병렬 처리를 참고하세요.
- 소스 병렬 처리 부족
소스 계산의 병렬 처리가 부족합니다. 가능한 경우 소스 내에서 병렬 처리를 늘립니다. 병렬 처리를 늘릴 수 없고 작업에서 최소 한 번 모드를 사용하는 경우 파이프라인에
Redistribute
변환을 추가해 보세요.- 키 병렬 처리 부족 또는 핫키
작업에 핫키가 있거나 키 병렬 처리가 부족합니다.
Dataflow는 각 샤딩 키에 대해 메시지를 순차적으로 처리합니다. Dataflow가 특정 키의 메시지 일괄 처리를 처리하는 동안 해당 키의 다른 수신 메시지는 현재 일괄 처리가 완료될 때까지 대기열에 추가됩니다.
Dataflow가 충분한 개별 키를 병렬로 처리할 수 없으면 병목 현상이 발생할 수 있습니다. 예를 들어 데이터에 고유한 키가 너무 적거나 특정 키가 데이터에서 과도하게 표현될 수 있습니다 ('핫 키'). 자세한 내용은 느리거나 중단된 작업 문제 해결을 참고하세요.
- 과소 프로비저닝된 vCPU
작업에 작업자 vCPU가 충분하지 않습니다. 이 상황은 작업이 이미 최대로 확장되었고 vCPU 사용률이 높으며 여전히 백로그가 있는 경우에 발생합니다.
- 작업자 통신 문제
Dataflow가 일부 작업자 VM과 통신할 수 없습니다. 작업의 작업자 VM 상태를 확인합니다. 다음과 같은 이유로 발생할 수 있습니다.
- 작업자 VM 프로비저닝에 문제가 있습니다.
- 작업이 실행되는 동안 작업자 VM 풀이 삭제됩니다.
- 네트워킹 문제
- Pub/Sub 소스의 병렬 처리 부족
Pub/Sub 소스 계산에 Pub/Sub 키가 부족합니다. 이 경고가 표시되면 지원팀에 문의하세요.
- 알 수 없는 이유로 Pub/Sub 소스 제한됨
Pub/Sub에서 읽는 동안 알 수 없는 이유로 Pub/Sub 소스 계산이 제한됩니다. 일시적인 문제일 수 있습니다. Pub/Sub 구성 문제, 누락된 IAM 권한 또는 할당량 한도를 확인합니다. 하지만 이전 영역 중 어느 것도 근본 원인이 아니고 문제가 계속되면 지원팀에 문의하세요.
- Pub/Sub 싱크 게시가 느리거나 중단됨
Pub/Sub 싱크 계산이 느리거나 중단되었습니다. 이 문제는 구성 문제 또는 할당량 한도로 인해 발생할 수 있습니다.
- 높은 작업 대기열 시간
키가 많고 키가 처리되는 속도로 인해 가장 오래된 적격 작업 연령이 높습니다. 이 경우 각 작업이 비정상적으로 길지 않을 수 있지만 전체 대기열 지연 시간은 높습니다.
Dataflow는 샤딩 키당 단일 처리 스레드를 사용하며 처리 스레드 수가 제한됩니다. 대기열 지연 시간은 키와 스레드의 비율에 키의 각 처리 번들의 스레드 내 지연 시간을 곱한 값과 거의 같습니다.
(key count / total harness threads) * latency per bundle
다음 해결 방법을 시도해 보세요.
- 작업자 수를 늘립니다. 스트리밍 자동 확장을 참고하세요.
- 작업자 하네스 스레드 수를 늘립니다.
numberOfWorkerHarnessThreads
/number_of_worker_harness_threads
파이프라인 옵션을 설정합니다. - 키 수를 줄입니다.
- 작업 지연 시간 감소
- Streaming Engine 백엔드의 일시적인 문제입니다.
Streaming Engine 백엔드에 구성 또는 운영 문제가 있습니다. 일시적인 문제일 수 있습니다. 문제가 지속되면 지원팀에 문의하세요.