应对 GCS Bucket Listing 的最终一致性

Coping with eventual consistency of GCS Bucket Listing

我们的数据流作业从包含感兴趣文件的 GCS 多区域存储桶中读取。这些文件也被移动到存档桶中,因此有时我们会看到 GCS 列表操作 return 已移动的文件(正如您所期望的那样,因为它是最终一致的操作)。

不幸的是,当 FileBasedSource 试图读取这些 "ghost" 文件时,我们的工作失败了。 Google 的 Dataflow SDK 和 Apache Beam 似乎都已将打开 GCS 文件的方法设为最终方法(在 FileBasedSource 中:createReaderstartImpl),因此我们无法覆盖他们。

除了不移动文件外,还有解决此问题的建议吗? Stack Overflow question 表明其他人遇到了类似的问题,但似乎响应是 "blowing up as expected"。

现在,Google Cloud Storage 对象列表操作是 strongly consistent,所以原来的问题不再适用。

它仍然适用于使用最终一致的文件系统(例如 S3)。请参阅 BEAM JIRA 以跟踪此问题。