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()));
在這種情況下,會爲他們清早發射鍵的狀態一直保持,直到窗口到期後?即在相同窗口中的後續窗格是否可以訪問由較早的窗格寫入的狀態?