2017-05-04 2 views
0

Apache Storm에서 다음 문제를 해결하는 것이 가장 좋습니다.폭풍 : 다양한 크기의 슬라이딩 윈도우에 대한 최소/최대 집계

나는 명시적인 타임 스탬프가 첨부 된 정수 값의 스트림을 생성하는 단일 스파우트를 보유하고 있습니다.

마지막 시간은 쉽게

  • 마지막 시간
  • 마지막 날, 즉 지난 24 시간 :

    topology.setBolt("1h", ...) 
        .shuffleGrouping("spout") 
        .withWindow(Duration.hours(1), Duration.seconds(10)) 
        .withTimestampField("timestamp")); 
    
    목표는이 스트림을 통해 세 슬라이딩 창으로 최소/최대 집계를 수행하는 것입니다

    그러나 오랜 기간 동안 창 대기열 크기가 걱정됩니다. 마지막 시간 집계와 같이 스파우트에서 튜플을 직접 소비 할 때 모든 단일 튜플이 큐에 저장됩니다.

    하나의 가능성은 사전 집계 된 "1 시간"볼트에서 튜플을 소모하는 것입니다. 그러나 명시 적 타임 스탬프를 사용하고 있으므로 "1h"볼트에서 도착한 늦은 튜플은 무시됩니다. 1 시간 지연은 창 평가를 지연시키기 때문에 옵션이 아닙니다. 결과의 적시성에 영향을주지 않고 늦은 튜플을 "허용"할 수있는 방법이 있습니까?

    물론 1 시간마다 집계를 저장 한 다음 "1h"스트림의 최신 값을 포함하여 지난 24 시간 동안의 최소값을 계산할 수도 있습니다. 그러나 스톰 수단을 사용하여이를 올바르게 수행 할 수있는 방법이 있는지 궁금합니다.

    업데이트 arunmahadevan의 대답에 1 개

    덕분에 나는 각각 1 시간 창에있는 모든 튜플의 최대 타임 스탬프 최소 튜플을 방출하는 볼트 최소 상반기를 변경했습니다. 그런 식으로 소모 볼트는 늦은 도착으로 인해 튜플을 버리지 않습니다. 또한 최소 튜플의 원래 타임 스탬프를 유지하기 위해 새 필드 original-timestamp을 도입했습니다.

    업데이트 2

    은 드디어 만 볼트 분 상반기의 상태 변경을 방출하여 더 나은 방법을 발견했다. 새로운 튜플이 제공되지 않는 한 폭풍은 소모 볼트에서 시간을 앞당기 지 않으므로 늦게 도착하는 문제는 방지됩니다. 또한 별도의 필드에 복사하지 않고 원래 타임 스탬프를 유지합니다.

답변

0

정기적으로 "1h"에서 "24h"볼트까지의 분을 작동시켜야하고 "24h"대기열 크기를 유지해야한다고 생각합니다.

지연을 구성하면 볼트의 실행은 해당 지연 후에 만 ​​호출됩니다 (즉, 이벤트 시간이 슬라이딩 간격 + 지연을 교차 할 때).

"1h"볼트가 1 분 지연으로 구성된 경우 실행은 이벤트 시간이 02:01을 지난 후에 01:00 - 02:00 사이의 튜플에 대해 호출됩니다. (즉, 볼트가 타임 스탬프> = 02:01 인 이벤트를 보았습니다). 그러나 실행은 01:00과 02:00 사이의 튜플 만받습니다.

이제 최소 1 시간을 계산하여 1 시간 및 지연 = 0의 슬라이딩 간격을 갖는 "24h"볼트로 결과를 내면 수신 이벤트의 타임 스탬프가 다음 hr을 교차하면 트리거됩니다. 02:00의 타임 스탬프로 01 : 00-02 : 00 분을 내보내는 경우 분 이벤트를 수신하자 마자 "24h"창이 트리거됩니다 (전날 02:00에서 02:00 사이의 이벤트의 경우). 이벤트 시간이 다음 시간을 넘었 기 때문에 구성된 지연은 0입니다.

+0

확인 정말 도움이되는 답변의 중요한 부분은 고려중인 창의 최대 타임 스탬프로 최소값을내는 것입니다. –

+0

평균 집계에 대해 동일한 결과를 얻는 방법에 대한 아이디어가 있습니까? 이는 1h 볼트에서 슬라이딩 윈도우를 사용할 수 없기 때문에 다른데, 이는 동일한 튜플이 평균적으로 여러 번 통합 될 수 있기 때문입니다. 전처리 기반의 전동 윈도우를 소스 스파우트의 최신 요소와 결합하는 방법이 있습니까? 나는 어쨌든 쏟아지는 창에서 오는 집계에 의해 커버되면 큐에서 소스 스파우트 요소를 제거해야 할 것입니다. 하지만 Storm에서 맞춤 퇴거 정책의 가능성은없는 것 같습니다. –