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.of
dataflow不知道两个触发条件是相关的。通过使用 withEarlyFirings
,数据流运行时了解更多信息并且可以更好地优化它。在实践中,这里建议的代码会更有效率。
我正在实施会话 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.of
dataflow不知道两个触发条件是相关的。通过使用 withEarlyFirings
,数据流运行时了解更多信息并且可以更好地优化它。在实践中,这里建议的代码会更有效率。