2017-11-07 7 views

답변

0

GroupByKey 기본적으로 입력 PCollection의 워터 마크가 해당 창의 끝 부분에 도달하면 특정 창을 시작합니다. 해고가되지 않으면 입력 PCollection의 워터 마크가 진행 중이 아니거나 처리가 진행되고 있지만 모든 데이터가 늦게 폐기됩니다.

그 이유는 PCollection의 생산 방식에 달려 있습니다. 내 생각 엔 당신이 PubSubIO.read()에서 직접 읽는 것일 것입니다. PubSub의 워터 마크를 계산하는 것은 어렵습니다 (특히 사용자 정의 타임 스탬프 속성을 사용하는 경우). Direct runner에서이 계산과 관련된 몇 가지 알려진 문제가 있습니다. 데이터 흐름 러너는 런타임에 다른 구현을 워터 마크를 더 정확하게 계산하지만 (여전히 불완전하게)

불행히도 우리는 현재 직접 러너에서 워터 마크 진행 상황을 모니터링하는 도구가 없습니다. 일부 로그 문을 PubsubUnboundedSource.PubsubReader.getWatermark()에 추가하여 디버깅을 시도 할 수 있습니다. 또한 읽기와 GBK 사이에 ParDo을 추가하고 수신을 끝내는 이벤트 시간 소인을 인쇄 할 수 있습니다 (c.timestamp()).

지연된 데이터를 삭제하지 않도록 창 전략을 구성 할 수도 있습니다 (Managing late data 참조).