我正在使用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()
答案 0 :(得分:1)
上面的代码可行,但最好执行以下操作:
.triggering(
AfterWatermark.pastEndOfWindow().withEarlyFirings(
AfterPane.elementCountAtLeast(100))
.discardingFiredPanes()
这是等效的,因为withEarlyFirings
会在满足触发条件时反复触发。
这比使用AfterFirst.of
更有效,因为它为流数据流运行时提供了有关您想要执行的操作的更多信息。使用AfterFirst.of
数据流并不知道两个触发条件是相关的。通过使用withEarlyFirings
,数据流运行时了解更多并且可以更好地优化它。在实践中,这里建议的代码将更有效。