将 Streaming 数据写入 GCS 时修复 NumShards

Fix the NumShards while writing Streaming data to GCS

实际上,我正在尝试将流数据转储到 BigTable 以防万一由于解析或任何其他问题而失败,我将该记录转储到 GCS。所以我在这里应用 fixed window,但我关心的一件事是 num shards。如何指定 num 分片以及 num 分片在将数据写入 GCS 时如何准确工作。

.apply(Window.<String>into(FixedWindows.of(Duration.standardSeconds(30L))))
               .apply(TextIO.write().to("gs:").withWindowedWrites());

如果分片数量超过限制,TextIO 是否会覆盖现有文件。

分片数设置不能以覆盖文件结束。它是要写入的文件数,在这种情况下,要写入存储(per-window)。通过修改此值,您可以尝试将所有 window 写入单个文件,也可以将每个元素写入单个文件。

分片的数量决定了对存储进行多少次并行写入。因此,在考虑管道的性能时,此设置非常重要。分片数量越多,并行化越容易,但会产生大量文件。分片数量越少,创建的文件越少,但会限制并行度。

根据梁documentation:

Setting this value is not recommended unless you require a specific number of output files.

如果不设置这个值,则由使用的runner决定。例如,DataflowRunner 使用管道中设置的最大工作线程数来设置分片数。