dataflow - 排空使用 FILE_LOAD 写入方法的数据流作业是否确保写入所有元素?
问题描述
您正在通过以下方式将元素写入 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 工具或谷歌云控制台排出工作,似乎工作几乎立即被认为是“排出”,即使withTriggeringFrequency
之前刚刚触发。排水功能的行为是否会触发所有未决的写入?
解决方案
是的,Dataflow 会立即关闭所有进程中的窗口并触发所有触发器。一旦触发 Drain,管道将停止接受新的输入。输入水印将被推进到无穷大。已经在管道中的元素将继续被处理。可以安全地取消已排空的作业。当您发出排空命令时。
如需参考,请参阅 Google Effects of draining a job Effects of draining a job 的此文档