Google cloud dataflow 云数据流故障恢复

Google cloud dataflow 云数据流故障恢复,google-cloud-dataflow,Google Cloud Dataflow,我想使用GoogleCloudDataflow创建会话窗口,如中所述。我想将未绑定的数据发送到Pub/Sub,然后以流式方式在云数据流中读取它。我想使用大超时的会话窗口(30分钟到120分钟) 我的问题是: 1) 如果数据流进程失败会发生什么 2) 我是否丢失了windows中存储的所有尚未超时的数据 3) 数据流提供了什么恢复机制 例如: 假设我有一个30分钟超时的会话窗口,它会触发每分钟的累积处理时间。假设这个值是一个整数,我只是对窗口中的所有值求和。假设这些键值对来自Pub/Sub: 7

我想使用GoogleCloudDataflow创建会话窗口,如中所述。我想将未绑定的数据发送到Pub/Sub,然后以流式方式在云数据流中读取它。我想使用大超时的会话窗口(30分钟到120分钟)

我的问题是:

1) 如果数据流进程失败会发生什么

2) 我是否丢失了windows中存储的所有尚未超时的数据

3) 数据流提供了什么恢复机制

例如:

假设我有一个30分钟超时的会话窗口,它会触发每分钟的累积处理时间。假设这个值是一个整数,我只是对窗口中的所有值求和。假设这些键值对来自Pub/Sub:

7 -> 10 (at time 0 seconds)
7 -> 20 (at time 30 seconds)
7 -> 50 (at time 65 seconds)
7 -> 60 (at time 75 seconds)
我假设在时间60秒时,窗口将触发,它将产生一对
7->30
。我还假设在时间120秒时,窗口将再次触发,它将产生一个
7->140
对,因为它是通过累积触发的

我的问题是,如果在时间70时数据流失败,会发生什么?我想在第70秒之前收到的3条消息已经被确认为发布/订阅,因此它们不会被重新发送

当数据流重新启动时,它是否会以某种方式使用键7恢复窗口的状态,以便在120秒时它可以生成
7->140
对,或者它只会生成
7->60


还有一个相关的问题——如果我取消数据流作业并启动一个新的作业,我想新的作业不会具有前一个作业的状态。有没有办法将状态转移到新作业?

云数据流透明地处理故障。例如,只有在处理完云Pubsub中的“ack”消息并持续提交结果后,才会执行此操作。如果数据流进程失败(我假设您指的是工作JVM崩溃,然后会自动重新启动,而不是整个作业完全失败),在重新启动时,它将再次连接到Pubsub,所有未确认的消息都将重新传递和重新处理,包括分组到窗口等。窗口状态也会在故障期间持续保留,因此在这种情况下,它应该生成
7->140

如果您对此持久性的实现感兴趣,请参阅-它早于数据流,但数据流在流式运行程序中使用相同的持久性层

数据流中没有面向用户的恢复机制,因为编程模型将您与处理故障的必要性隔离开来,并且运行程序负责所有必要的恢复;故障可见的唯一方式是记录可以多次处理,即如果在DoFn中执行任何副作用,这些副作用必须是幂等的


目前,作业之间发生状态转移的唯一情况是在作业期间。

我用一个具体的例子更新了这个问题。你能更新关于这个例子的答案吗?