我试图了解Dataflow确认pubsub消息的过程,以及无论是否发生故障,我对处理所有数据都有什么样的保证。
我了解Dataflow将其保存到某种持久性存储中时会确认一条消息,但是我不确定何时将存储该消息。
以简单的管道为例,从Pubsub读取消息,对消息类型进行小的转换以转换为易于写的内容(pardo),然后将其保存到GCS中的文本文件中。从StackDriver仪表板看,Dataflow似乎是Acking消息,一旦它们进入管道,并且仅在写入文件的最后一个窗口时才得到备份。
有了这个,我知道消息发生错误时,流式数据流作业将继续运行,直到消息起作用或管道更新as mentioned here。但是,由于存储消息时需要可靠性,在Dataflow本身或Beam遇到内部错误而导致管道崩溃的情况下会发生什么。如果消息被写入某种持久性存储(而不是我的末尾GCS存储桶),那么新的管道可以接收这些消息吗?
TLDR :在Dataflow本身完全失败的情况下会发生什么。这些似乎在收到时被确认的消息会丢失还是会被替换邮件代替?
注意:我阅读了here给出的答案,但这似乎是在完全失败之前的一步,谈论失败案例。
答案 0 :(得分:0)
Streaming Dataflow将重试失败的工作项,因此,如果工作程序由于某种原因而失败,则Dataflow将重试相同的工作,并且应该从失败的角度进行恢复,而不会丢失数据。
如您在前面提到的答案中所述,当前无法在两个管道之间转移状态(除非是更新),因此,如果管道完全失败(这种情况很少见)并且您启动了一个新管道,第二个管道将从PubSub主题中最后一个未确认的消息中提取。