Google Cloud Dataflow:会话 window 提前触发触发器以限制会话长度

Google Cloud Dataflow: Session window with early firing trigger to limit session length

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

通过使用 Composite 触发器并将 Window 累积模式设置为 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()

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

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

这是等价的,因为withEarlyFirings会在满足触发条件时重复触发

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