Pub/Sub to BigQuery 권장사항

이 페이지에서는 Pub/Sub에서 읽고 BigQuery에 쓰는 Dataflow 파이프라인을 최적화하기 위한 권장사항을 설명합니다. 사용 사례에 따라 다음 제안사항을 적용하면 실적이 개선될 수 있습니다.

파이프라인 백로그의 초기 솔루션

Pub/Sub to BigQuery 파이프라인의 백로그가 증가하고 수신 메시지를 따라갈 수 없는 경우 다음 단계를 즉시 수행할 수 있습니다.

  • Pub/Sub 확인 기한 늘리기: 연결된 Pub/Sub 구독의 경우 예상되는 최대 메시지 처리 시간보다 약간 긴 값으로 확인 기한을 늘립니다. 이렇게 하면 메시지가 아직 처리 중일 때 조기에 다시 전송되지 않습니다.
  • 작업자 수 확장: 확인되지 않은 메시지 수와 구독 백로그가 빠르게 증가하는 경우 파이프라인의 처리 용량이 부족할 수 있습니다. 메시지 볼륨을 처리하기 위해 Dataflow 작업자 수를 늘립니다.
  • 지수 백오프 사용 설정: 지수 백오프를 사용 설정하여 파이프라인에서 일시적인 문제에 대한 재시도를 처리하는 방식을 개선하여 복원력을 높입니다.

장기적인 코드 및 파이프라인 최적화

지속적인 성능과 안정성을 위해 다음 아키텍처 및 코드 변경사항이 권장됩니다.

  • BigQuery에 대한 getTable 호출 감소: getTable 메서드 호출이 과도하면 비율 제한 및 성능 병목 현상이 발생할 수 있습니다. 이 문제를 완화하려면 다음 단계를 따르세요.
    • 동일한 테이블에 대한 반복 호출을 방지하기 위해 작업자 메모리에 테이블 존재 정보를 캐시합니다.
    • 각 개별 요소가 아닌 번들 단위로 getTable 호출을 일괄 처리합니다.
    • 모든 메시지에 대해 테이블 존재 여부를 확인할 필요가 없도록 파이프라인 코드를 리팩터링합니다.
  • BigQuery Storage Write API 사용: BigQuery에 쓰는 스트리밍 파이프라인의 경우 표준 스트리밍 삽입에서 Storage Write API로 이전합니다. Storage Write API는 더 나은 성능과 훨씬 높은 할당량을 제공합니다.
  • 카디널리티가 높은 작업에 기존 Dataflow 러너 사용: 매우 많은 수의 고유 키(카디널리티가 높음)를 처리하는 작업의 경우 언어 간 변환이 필요하지 않다면 기존 Dataflow 러너가 Runner v2보다 더 나은 성능을 제공할 수 있습니다.
  • 키 공간 최적화: 파이프라인이 수백만 개의 활성 키에서 작동하면 성능이 저하될 수 있습니다. 더 작고 관리하기 쉬운 키 공간에서 작업을 실행하도록 파이프라인의 로직을 조정합니다.

리소스, 할당량, 구성 관리

파이프라인 상태에는 적절한 리소스 할당 및 구성이 중요합니다.

  • 할당량 사전 관리: 할당량을 모니터링하고 확장 이벤트 중에 도달할 수 있는 할당량의 상향을 요청합니다. 예를 들어 다음 확장 이벤트를 고려해 보세요.
    • TableService.getTable 또는 tabledata.insertAll 메서드에 대한 호출 비율이 높으면 초당 최대 쿼리 수 (QPS)를 초과할 수 있습니다. 한도 및 할당량 추가 요청 방법에 대한 자세한 내용은 BigQuery 할당량 및 한도를 참고하세요.
    • 사용 중인 IP 주소 및 CPU의 Compute Engine 할당량이 최대 한도를 초과할 수 있습니다. 한도 및 할당량 추가 요청 방법에 대한 자세한 내용은 Compute Engine 할당량 및 한도 개요를 참고하세요.
  • 작업자 구성 최적화: 메모리 부족 (OOM) 오류를 방지하고 안정성을 개선하려면 다음 단계를 따르세요.
    • 메모리가 더 많은 작업자 머신 유형을 사용합니다.
    • 작업자당 스레드 수를 줄입니다.
    • 작업자 수를 늘려 워크로드를 더 고르게 분산하고 자동 확장 이벤트가 자주 발생할 때의 성능 영향을 줄입니다.

다음 단계