我想使用Google创建会话窗口,如数据流模型纸中所解释的那样。我想将我的未绑定数据发送到Pub/Sub,然后以流式方式在Cloud中读取它。我想使用大超时的会话窗口(30分钟到120分钟)。
我的问题是:
1)如果数据流进程失败,会发生什么情况?
2)是否丢失了存储在窗口中但仍未超时的所有数据?
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条消息已经被加到Pub/Sub上了,所以它们不会被重传。
当Dataflow重新启动时,它会以某种方式用键7恢复窗口的状态,以便在120秒时它可以生成一个7 -> 140对,还是只生成一个7 -> 60对?
还有一个相关的问题--如果我取消数据流作业并启动一个新的作业,我想新的作业不会有前一个作业的状态。有没有办法把国家转移到新的工作岗位上?
发布于 2016-02-15 19:40:26
云数据流透明地处理故障。例如,它只会在Cloud中对消息进行处理并持久地提交结果之后,才会“破坏”消息。如果数据流进程失败(假设您指的是一个工人JVM的崩溃,然后将自动重新启动,而不是整个作业的完全失败),重新启动时它将再次连接到Pubsub,所有未加标记的消息都将被重新传递和重新处理,包括分组到windows等。在失败时,窗口状态也会被持久地保存,所以在这种情况下,它应该会生成7 -> 140。
如果您对此持久性的实现感兴趣,请参阅磨轮纸 -它的日期早于Dataflow,但是Dataflow在流运行程序中使用相同的持久性层。
Dataflow中没有面向用户的恢复机制,因为编程模型将您与处理故障的必要性隔离开来,运行程序负责所有必要的恢复;故障可见的唯一方法是可以多次处理记录,即如果在DoFn中执行任何副作用,这些副作用必须是幂等的。
目前,在作业之间发生状态转移的唯一情况是在管道更新操作期间。
https://stackoverflow.com/questions/35400529
复制相似问题