Google cloud dataflow GoogleCloudDataflow:会话窗口,带有提前触发触发器以限制会话长度

Google cloud dataflow GoogleCloudDataflow:会话窗口,带有提前触发触发器以限制会话长度,google-cloud-dataflow,Google Cloud Dataflow,我正在实现gapduration=10分钟的会话窗口,并对会话可以拥有的最大事件数(100)进行限制。任何超过100个元素的会话都将被拆分为多个会话 通过使用复合触发器并将窗口累积模式设置为discardingFiredPanes(),它似乎可以工作 我想听听你对这种方法的看法。有没有不必要的副作用 谢谢 //Ex: Session timeout 10 mins and max events session can have is 100. --skip .triggering( R

我正在实现gapduration=10分钟的会话窗口,并对会话可以拥有的最大事件数(100)进行限制。任何超过100个元素的会话都将被拆分为多个会话

通过使用复合触发器并将窗口累积模式设置为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()
这是等效的,因为当满足触发条件时,早期点火的
将反复点火


这比使用
的AfterFirst.of更有效,因为它为流式数据流运行时提供了有关您想要做什么的更多信息。使用
AfterFirst.of
数据流不知道这两个触发条件是相关的。通过将
与earlyfirings一起使用
,数据流运行时可以了解更多信息,并且可以更好地进行优化。实际上,这里建议的代码会更有效。

非常感谢您的建议。这很奇怪。AfterWatermark.pastEndOfWindow().WithEarlyFireings()方法不适用于我们。似乎是AfterPane.elementCountAtLeast()触发器被忽略,或者运行时引擎还没有元素的计数?这是Sessions.withGapDuration窗口独有的吗?您看到的症状是什么?您是否获得包含100多个元素的会话窗口?一般来说,
elementcountlatest(N)
不保证它会在N处被触发。因此会话可能会首先被触发。