Google cloud dataflow 在Apache Beam/DataFlow中计算无界流的定期检查点

Google cloud dataflow 在Apache Beam/DataFlow中计算无界流的定期检查点,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我使用一个全局无界流,结合有状态处理和计时器,以便按事件时间戳对每个键的流进行完全排序。此问题的答案描述了解决方案: 为了在发生故障或由于其他原因停止后重新启动管道,我需要确定最低的事件时间戳,在该时间戳处,我们可以保证所有其他事件都已在下游处理。该时间戳可以周期性地计算并保存到数据存储中,并用作源IO(Kinesis)的输入,以便可以重新读取流而不必返回到开头。(我们可以重播事件) 我考虑让有状态转换在计时器触发时发出最低处理时间戳作为输出,然后全局合并所有输出以找到最小值。但是,不可能使用

我使用一个全局无界流,结合有状态处理和计时器,以便按事件时间戳对每个键的流进行完全排序。此问题的答案描述了解决方案:

为了在发生故障或由于其他原因停止后重新启动管道,我需要确定最低的事件时间戳,在该时间戳处,我们可以保证所有其他事件都已在下游处理。该时间戳可以周期性地计算并保存到数据存储中,并用作源IO(Kinesis)的输入,以便可以重新读取流而不必返回到开头。(我们可以重播事件)

我考虑让有状态转换在计时器触发时发出最低处理时间戳作为输出,然后全局合并所有输出以找到最小值。但是,不可能使用全局合并操作,因为必须首先应用窗口或触发器

假设我的有状态转换在计时器启动时发出一个表示最小时间戳的长信号,我定义管道如下:

p.apply(events)
 .apply("StatefulTransform", ParDo.of(new StatefulTransform()))
 .apply(Window.<Long>configure().triggering(Repeatedly.forever(AfterFirst.of(
                    AfterPane.elementCountAtLeast(100),
                    AfterProcessingTime.pastFirstElementInPane().plusDelayOf(Duration.standardMinutes(1))))))
 .apply(Combine.globally(new MinLongFn()))
 .apply("WriteCheckpoint", ParDo.of(new WriteCheckpoint()));
p.apply(事件)
.apply(“StatefulTransform”,ParDo.of(new StatefulTransform()))
.apply(Window.configure())触发(重复.forever(第一次之后(
后窗格。元素计数至少(100),
AfterProcessingTime.pastFirstElementInPane().plusDelayOf(Duration.standardMinutes(1‘‘‘‘‘‘)’)
.apply(Combine.globally(新的MinLongFn()))
.apply(“WriteCheckpoint”(新WriteCheckpoint()));

这是否可以确保检查点只在所有并行工作人员发出至少一个窗格时写入?我担心联合收割机操作可能只对部分工人的窗格进行操作,例如,可能有一名工人出现故障或仍在等待另一个事件触发其计时器。

我是梁的新手,但根据本博客,可拆分DoFn可能是您要找的东西


您可以创建一个SDF来获取流并接受输入元素作为起点。

我是Beam的新手,但根据本博客,您可能正在寻找可拆分的DoFn

您可以创建一个SDF来获取流并接受输入元素作为起点