2017-12-15 5 views
1

나는 DataStream을 가지고 있으며 그것에 창 집계를 계산해야합니다. 일반 창 집계를 수행 할 때 네트워크 IO가 매우 높습니다. 그래서 네트워크 IO를 줄이기 위해 로컬 사전 집계를 수행하고 싶습니다.Apache Flink : 로컬 사전 집계를 사용하여 창을 계산하려면 어떻게해야합니까?

작업 관리자에서 로컬로 사전 집계 (즉, 레코드를 셔플 링하기 전에) 한 다음 전체 집계를 수행 할 수 있는지 궁금합니다. Flink의 DataStream API로 이것이 가능합니까?

내 코드는 다음과 같습니다

DataStream<String> dataIn = .... 
dataIn 
    .map().filter().assignTimestampsAndWatermarks() 
    .keyBy().window().fold() 

답변

0

FLINK (FLINK 1.4.0 12 월 2017 년)의 현재 버전은 기능하지 않는 내장 된 사전 집계에 대한 지원. 그러나 다음 릴리스 (1.5.0)에이를 추가하는 방법에 대한 노력이 있습니다 (FLINK-7561 참조).

ProcessFunction을 기반으로 사전 집계 작업을 구현할 수 있습니다. ProcessFunction은 주기적으로 사전 집계를 방출하기 위해 사전 집계를 메모리의 고정 된 크기 인 HashMap에 유지하고 타이머를 이벤트 시간 및 처리 시간을 등록 할 수 있습니다. 장애 발생시 데이터 손실을 방지하기 위해 상태 (즉, HashMap의 내용)는 managed operator state에 유지되어야합니다. 타이머를 설정할 때 창 경계를 존중해야합니다.

FoldFunction은 더 이상 사용되지 않으며 AggregateFunction으로 대체되어야합니다.

+0

감사합니다. Fabian – Chen