2017-11-04 9 views
2

가능한 경고 생성을 위해 스트리밍 창 지원을 위해 특별히 Flink를 평가 중입니다. 내 관심사는 메모리 사용량이므로 다른 사람이 도움을 줄 수 있으면 감사하겠습니다.Flink Stream Window 메모리 사용량

예를 들어,이 응용 프로그램은 주어진 텀블링 윈도우 (tumbling window) 내에서 5 분 동안 상당한 양의 데이터를 스트림에서 소비합니다. 평가 시점에서 기준과 일치하는 예를 들어 백만 개의 문서가 있다고 가정하면 모두 메모리에로드됩니까?

일반적인 흐름은 다음과 같습니다

producer -> kafka -> flinkkafkaconsumer -> table.window(Tumble.over("5.minutes").select("...").where("...").writeToSink(someKafkaSink)

또한, 메모리가 나는 누군가가 그런이 될 수 있음을 간과 할 수있다 이러한 경우에 처리되는 방법을 설명 분명한 문서가있는 경우 도움이됩니다.

감사

답변

3

그룹 창 집계 저장된 데이터의 양은 응집의 종류에 따라 달라진다. COUNT, SUMMIN/MAX과 같은 많은 집계 함수는 사전 집계 될 수 있습니다. 즉, 창당 단일 값만 저장하면됩니다. MEDIAN과 같은 다른 집계 함수 나 특정 사용자 정의 집계 함수는 결과를 계산하기 전에 모든 값을 저장해야합니다.

집계를 위해 저장해야하는 데이터는 state backend에 저장됩니다. 상태 백엔드의 선택에 따라 데이터는 JVM 힙의 메모리 또는 RocksDB 인스턴스의 디스크에 저장 될 수 있습니다.

테이블 API 쿼리는 관계형 최적화 도구 (Apache Calcite에 기반 함)에 의해 최적화되어 필터가 소스에 최대한 가깝게 푸시됩니다. 술어에 따라 집계 전에 필터가 적용될 수 있습니다.

마지막으로, 당신은 당신의 예제 쿼리에서 groupBy()select()window() 사이를 추가합니다 (docs의 예제 참조)해야합니다.

+0

감사합니다. 제공하신 주 백엔드 링크가 내가 원하는 것으로 보입니다. – Sam