2017-03-14 3 views
0

GapDuration = 10 분인 세션 창을 구현하고 있으며 세션에있을 수있는 이벤트의 최대 개수 (100 개)를 제한합니다. 100 개가 넘는 세션은 여러 세션으로 분할됩니다.Google Cloud Dataflow : 세션 길이를 제한하는 조기 트리거가있는 세션 창

합성 트리거를 사용하고 Window Accumulation Mode를 discardingFiredPanes()를 설정하면 작동하는 것 같습니다.

이 접근 방식에 대한 의견을 듣고 싶습니다. 원하지 않는 부작용이 있습니까?

감사

//Ex: Session timeout 10 mins and max events session can have is 100. 
--skip 
.triggering(
    Repeatedly.forever(
     AfterFirst.of( 
      AfterPane.elementCountAtLeast(100), // max 100 events per session 
      AfterWatermark.pastEndOfWindow() 
     ) 
    ) 
) 
.discardingFiredPanes() 

답변

1

위의 코드는 작동합니다, 그러나 다음을 수행하는 것이 좋습니다 :

.triggering(
    AfterWatermark.pastEndOfWindow().withEarlyFirings(
     AfterPane.elementCountAtLeast(100)) 
.discardingFiredPanes() 

트리거 조건이 충족 될 때 withEarlyFirings가 반복적으로 발생하기 때문에이 동일합니다.

AfterFirst.of을 사용하는 것보다 효율적입니다. 스트리밍 데이터 흐름 런타임에 원하는 정보를 제공하기 때문에 더 효율적입니다. AfterFirst.of 데이터 흐름을 사용하면 두 트리거 조건이 관련되어 있는지 알 수 없습니다. withEarlyFirings을 사용하면 데이터 흐름 런타임이 더 많이 알고 더 효율적으로 최적화 할 수 있습니다. 실제로 여기에 제시된 코드는보다 효율적입니다.

+0

감사합니다. – Alex

+0

매우 이상합니다. AfterWatermark.pastEndOfWindow(). withEarlyFirings() 접근 방식은 우리에게 적합하지 않습니다. AfterPane.elementCountAtLeast() 트리거가 무시 중이거나 런타임 엔진에 아직 요소 수가 없습니다. Sessions.withGapDuration 윈도우만의 고유 한 것입니까? – Alex

+0

보고있는 증상은 무엇입니까? 100 개 이상의 요소가있는 세션 창이 나타 납니까? 일반적으로'elementCountAtLeast (N)'은 N에서 정확히 트리거 될 것이라고 보장하지 않습니다. 따라서 세션이 먼저 트리거 될 수 있습니다. –

관련 문제