Google Cloud Dataflow:会话窗口,具有提前触发触发器以限制会话长度

时间:2017-03-14 19:00:02

标签: google-cloud-dataflow

我正在使用GapDuration = 10分钟实现会话窗口,并且还限制了会话可以拥有的事件的最大数量(100)。任何超过100个元素的会话都将分成多个会话。

通过使用Composite触发器并将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 个答案:

答案 0 :(得分:1)

上面的代码可行,但最好执行以下操作:

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

这是等效的,因为withEarlyFirings会在满足触发条件时反复触发。

这比使用AfterFirst.of更有效,因为它为流数据流运行时提供了有关您想要执行的操作的更多信息。使用AfterFirst.of数据流并不知道两个触发条件是相关的。通过使用withEarlyFirings,数据流运行时了解更多并且可以更好地优化它。在实践中,这里建议的代码将更有效。