내 작업에서 처리량 (기록 된 레코드 수/초)이 "그룹화 기준"단계 후에 크게 느려졌습니다. 워크 플로 단계가 실행되면 일부 인스턴스는 유휴 상태 인 것처럼 보이지만 일부 인스턴스는 ~ 30 %의 CPU 사용률을가집니다.그룹 후 처리량이 느림
데이터 흐름 문제입니까? 아니면이 단계의 병렬 처리를 높이기 위해 어떻게 든 워크 플로에 지시해야합니까?
감사합니다, G
내 작업에서 처리량 (기록 된 레코드 수/초)이 "그룹화 기준"단계 후에 크게 느려졌습니다. 워크 플로 단계가 실행되면 일부 인스턴스는 유휴 상태 인 것처럼 보이지만 일부 인스턴스는 ~ 30 %의 CPU 사용률을가집니다.그룹 후 처리량이 느림
데이터 흐름 문제입니까? 아니면이 단계의 병렬 처리를 높이기 위해 어떻게 든 워크 플로에 지시해야합니까?
감사합니다, G
그것의 파이프 라인이 무엇을하고 있는지에 대한 자세한 세부 사항을 모르고 무슨 일이 일어나고 있는지 확실히 알고 어렵다. 일반적으로 처리량 (레코드 수/초)에서
는 기록의
의한 처리
가있다 입력 레코드보다 훨씬 큽니다. 기록이 더 커지므로 처리하는 데 더 오래 걸리므로 기록/초는 줄어들 것입니다.
데이터 흐름의 알파 릴리스에서 CPU 사용률이 낮지는 않습니다. 현재 Dataflow는 모든 VM 코어를 완전히 처리하지 못하고 있습니다. 이를 개선하기위한 많은 성능 향상이 이루어졌습니다.
데이터 흐름은 현재
--numWorkers=<integer>
--workerMachineType=<Name of GCE VM Machine Type>
--numWorkers 당신이 병렬로 데이터를 처리하는 데 사용 근로자의 수를 늘리거나 줄일 수있는 플래그를 통해 병렬 처리의 양을 조정하기위한 두 개의 손잡이를 제공합니다. 일반적으로 작업자 수를 늘리면 더 많은 데이터를 병렬로 처리 할 수 있습니다.
--workerMachineType을 사용하면 더 많거나 적은 CPU 또는 RAM이있는 시스템을 선택할 수 있습니다.
VM의 CPU가 제대로 활용되지 않는 경우 CPU 수가 적은 컴퓨터를 선택할 수 있습니다. 기본적으로 Dataflow는 VM 당 4 개의 CPU를 사용합니다. 시스템 당 CPU를 줄이지 만 numWorkers를 늘려 총 CPU 수가 거의 같으면 작업 비용을 높이 지 않고 병렬 처리 수준을 높일 수 있습니다.
지금 데이터 흐름은 글로벌 수준 (단 단계 수준이 아니라)에서 병렬 처리량을 제어하는 매우 거친 노브를 제공합니다. 이것은 미래에 바뀔 수도 있습니다. 그러나 일반적으로 우리의 목표는 병렬 처리의 양을 자동으로 조정하여 사용자가하지 않아도되도록하는 것입니다.
낮은 처리량은 "바로 가기 키"또는 매우 자주 발생하는 키의 결과 일 수 있습니다. 이렇게하면 단일 작업자가 단일 코어로 처리하는 매우 큰 콜렉션이 생성됩니다.
Here은 단축키에 대한 Google의 공식 문서 및이를 처리하는 방법입니다.내 경험상, Combine.PerKeyWithHotKeyFanout을 사용하여 선택적으로 팬 아웃 팩터를 적용하면 좋은 결과가 나타납니다.