Apache Beam最近通过StateSpec
和@StateId
注释引入了状态单元,部分支持Apache Flink和Google Cloud Dataflow。Beam中的状态处理 - 是否跨窗口窗格共享状态?
我的问题是关于状态垃圾收集,在有状态的DoFn用于窗口流的情况下。典型地,当窗口到期时(即,水印经过窗口的末端),由跑步者移除状态(垃圾收集)。然而,考虑窗玻璃被触发早期的情况下,以及解雇窗格被丢弃:
input.apply(Window.<MyElement>into(CalendarWindows.days(1))
.triggering(AfterWatermark.pastEndOfWindow()
.withEarlyFirings(
AfterProcessingTime.pastFirstElementInPane()
.plusDelayOf(Duration.standardMinutes(10))
))
.discardingFiredPanes()
.apply(ParDo.of(new MyStatefulDofn()));
在这种情况下,会为他们清早发射键的状态一直保持,直到窗口到期后?即在相同窗口中的后续窗格是否可以访问由较早的窗格写入的状态?