Google cloud dataflow 云数据流窗口触发器覆盖关闭窗口中的值
我正在编写一个数据流(Beam SDK 2.0.0),它从发布/订阅中读取数据,对窗口中的元素进行计数,然后将计数作为时间序列存储在BigTable中。车窗的持续时间固定为1分钟 我的意图是使用触发器每秒更新当前窗口的值,以便实时更新当前时间窗口 但这似乎不起作用。该值每秒正确更新一次,但一旦数据流在下一分钟开始工作,第一个值将更新为零。所以基本上只有我的最后一个值是正确的,其余的都是零Google cloud dataflow 云数据流窗口触发器覆盖关闭窗口中的值,google-cloud-dataflow,google-cloud-pubsub,google-cloud-bigtable,Google Cloud Dataflow,Google Cloud Pubsub,Google Cloud Bigtable,我正在编写一个数据流(Beam SDK 2.0.0),它从发布/订阅中读取数据,对窗口中的元素进行计数,然后将计数作为时间序列存储在BigTable中。车窗的持续时间固定为1分钟 我的意图是使用触发器每秒更新当前窗口的值,以便实时更新当前时间窗口 但这似乎不起作用。该值每秒正确更新一次,但一旦数据流在下一分钟开始工作,第一个值将更新为零。所以基本上只有我的最后一个值是正确的,其余的都是零 Pipeline pipeline = Pipeline.create(options); PCollec
Pipeline pipeline = Pipeline.create(options);
PCollection<String> live = pipeline
.apply("Read from PubSub", PubsubIO.readStrings()
.fromSubscription("projects/..."))
.apply("Window per minute",
Window
.<String>into(FixedWindows.of(Duration.standardMinutes(1)))
.triggering(Repeatedly
.forever(AfterProcessingTime
.pastFirstElementInPane()
.plusDelayOf(Duration.standardSeconds(1)))
.orFinally(AfterWatermark.pastEndOfWindow()))
.accumulatingFiredPanes()
.withAllowedLateness(Duration.ZERO)
);
Pipeline-Pipeline=Pipeline.create(选项);
PCollection live=管道
.apply(“从PubSub读取”,PubsubIO.readStrings()
.fromSubscription(“projects/…))
.apply(“每分钟窗口数”,
窗口
.into(固定窗口的持续时间标准分钟数(1)))
.触发(重复)
.forever(后处理时间)
.pastFirstElementInPane()
.plusDelayOf(持续时间.standardSeconds(1)))
.orFinally(AfterWatermark.pastEndOfWindow())
.累积燃烧烷()
.允许延迟(持续时间为零)
);
我尝试过使用触发代码,但没有任何帮助。我现在唯一的选择是删除整个
.trigger
块。有人经历过类似的行为吗?在向谷歌报告我的问题后,他们在Beam SDK中发现了一些导致这种情况的问题。有关这些链接的更多详细信息:
当EOW和GC定时器同时触发时(允许非零延迟),我们没有注意到它是最后一个窗格:
如果处理时间计时器与GC计时器一起出现,则不会正确忽略它们:
处理时间计时器仅被解释为GC计时器,完全不正确地比较来自不同时域的时间戳: