排空使用 FILE_LOAD 写入方法的数据流作业是否确保写入所有元素?

Does draining a dataflow job that uses FILE_LOAD write method ensure that all elements are written?

您正在通过以下方式将元素写入 bigquery:

pcoll.apply(BigQueryIO.writeTableRows()
     .to(destination)
     .withSchema(tableSchema)
     .withMethod(BigQueryIO.Write.Method.FILE_LOADS)
     .withTriggeringFrequency(org.joda.time.Duration.standardMinutes(10))
     .withNumFileShards(10)
     .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
     .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED));

并通过 gcloud cli 工具或 google 云控制台耗尽该作业,似乎该作业几乎立即被视为 "drained",即使 withTriggeringFrequency 刚刚之前触发。 drain 函数的行为是否触发所有待处理的写入?

是 Dataflow 立即关闭任何进程中的 windows 并触发所有触发器。 一旦 Drain 被触发,管道将停止接受新的输入。输入水印将被推进到无穷大。管道中已有的元素将继续处理。耗尽的作业可以安全地 cancelled.When 您发出耗尽命令。

有关参考,请参阅此文档 Google 裁员的影响 Effects of draining a job