数据流如何触发AfterProcessingTime.pastFirstElementInPane()工作?

Ani*_*lla 5 google-cloud-dataflow apache-beam spotify-scio

在数据流流世界中。

我说的时候的理解:

Window.into(FixedWindows.of(Duration.standardHours(1)))
  .triggering(AfterProcessingTime.pastFirstElementInPane()
      .plusDelayOf(Duration.standardMinutes(15))
Run Code Online (Sandbox Code Playgroud)

就是对于一个小时的固定窗口,触发器在看到第一个元素之后将等待或批处理这些元素。

但是当我说:

Window.into(FixedWindows.of(Duration.standardHours(1)))
  .triggering(AfterProcessingTime.pastFirstElementInPane()
Run Code Online (Sandbox Code Playgroud)

它是从第一次看到第一个元素起就每次触发,还是隐式地对元素进行批处理?因为在每个元素上触发都会使系统过载。

Ben*_*ers 5

使用这两个触发器,窗口将被触发一次,所有剩余元素都将被丢弃。您可以Repeatedly.forever(...)用来触发多次。

关于您的特定问题,如果元素大约在同一时间到达,则会发生少量批处理。

假设您的意思是以下内容,那么是的,第二个将触发更多次,并且可能会使系统过载。

Repeatedly.forever(AfterProcessingTime.pastFirstElementInPane()
    .plusDelayOf(Duration.standardMinutes(15)))
Run Code Online (Sandbox Code Playgroud)

Repeatedly.forever(AfterProcessingTime.pastFirstElementInPane())
Run Code Online (Sandbox Code Playgroud)