2017-05-12 4 views
1

우선, 나는 스트림 처리 프레임 워크를 처음 사용합니다. 나는 그 중 일부를 벤치마킹하여 Flink로 시작했으면 좋겠다.Flink 스트리밍 : 다른 창에서 이벤트 비교

필자는 창 t의 이벤트를 크기가 15 분인 창 t-1의 이벤트와 비교해야하며 일부 집계를 수행해야합니다.

우리는 형태의 튜플로 분석 된 사건을 고려 : 여기

내 유스 케이스의 단순화 된 버전입니다. 창 2에서 (D, 6)과 (B, 7)을 갖는다. 그런 다음 현재 창의 이벤트를 이전 창의 이벤트와 비교하고 다음 조건을 확인하는 이벤트를 유지해야합니다. Win2 (K) - Win1 (K)> 5. 따라서 앞의 예에서 우리는 (B, 5)를 얻습니다. (동일한 키를 가진 두 개의 이벤트가있는 경우 합계해야합니다.)

두 창을 모두 메모리에 유지하는 방법을 모르겠습니다. 나는 15 분 (창 t)의 텀블링 창과 15 분 슬라이드하는 30 분 슬라이딩 창을 만들고 t - 1 창을 계산하기 위해 마이너스 연산을 수행 할 생각이었다.

좋은 해결책인가요 아니면 더 좋은 방법인가요?

답변

0

제안한 30 분짜리 슬라이딩 창 대신 ProcessFunction을 사용하는 것이 좋습니다. 이것은 상태, 요소 별 처리 및 타이머를 결합한 버전 1.2부터 Apache Flink가 제공하는 저수준 작업입니다. 키 스트림의 경우 상태와 타이머는 키별로 자동으로 범위가 지정됩니다.

주 : 최신 값과 타임 스탬프는 각 요소로

(암시 적으로이 각 키에 대한 것입니다)
저장소가 도착 :
1. 상태를 경우 (여기이 작동하는 방법의 개요입니다 적절한 뭔가를 방출,이 키) 이전 요소를 보유하고 차이가 5보다 큰 저장된 값과 타임 스탬프
3. 16 분 후

을 발사 할 수있는 타이머를 설정
2. 업데이트 할 때 타이머 화재 :
저장된 상태가 15 분 이상 경과 된 경우 지워짐

키 공간이 작 으면 타이머를 걱정하지 않기로 결정할 수 있습니다. 따라서 사용자는 잠재적으로 제한되지 않는 양을 유지하지 않습니다. 부실 키 관련 스토리지

자세한 내용은 ProcessFunctionworking with state의 문서를 참조하십시오.

이 제안에서는 동일한 키를 사용하여 여러 요소에 대해 언급 한 내용을 무시했지만 조정하기가 어렵지 않습니다. (나는 또한 데이터가 파이프 라인의이 부분에 도달 할 때까지 적어도 키 단위로 순서대로 진행된다고 가정했다.)

나는 ProcessFunction을 제안하지 않았다. 30 분짜리 슬라이딩 윈도우 제안보다 간단하지만 더 유연하고 적응력이 좋습니다. 다른 방법으로는 Flink의 Complex Event Processing 라이브러리를 사용하는 것이 더 간단합니다. Flink 1.3에서는 CEP를 사용하여 수행하는 작업을 표현할 수는 있지만 버전 1.3은 몇 주 동안 더 이상 릴리스되지 않습니다. 1.3 here에 대한 문서를 찾을 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 그것은 매우 유용했습니다. 내가 얘기했던'ProcessFunction'을 사용하려고합니다. 나는 doc 페이지에 주어진 예제를 따라왔다. 그러나 방아쇠 문제가 있습니다. 병렬 처리가 1 (또는 2)로 설정된 경우에만 호출됩니다. 큰 데이터 세트가 없기 때문에 이것 만입니까? 다른 노드의 동일한 키를 사용하여 이벤트를 분할하는 것을 볼 수 있습니다. – ddizz

+0

약간의 코드를 공유 할 수 있습니까? 사물이 어떻게 구성되어 있는지 보지 않고는 디버그하기가 어렵습니다. 'ProcessFunction' 앞에 keyBy()가 있습니까? –

+0

늦게 답변 해 주셔서 감사합니다. 나는 그 문제를 해결했다. 나는 keyBy()를 넣었지만, 코드를 다시 작성 했으므로 뭔가 잘못되었다고 생각하며 도움을 주신 것에 대해 다시 한 번 감사드립니다. – ddizz

관련 문제