当前适用于 Google Dataflow 的 GoLang SDK 是否支持自动缩放和并行处理?

dai*_*oro 0 go google-cloud-platform google-cloud-dataflow apache-beam

目前使用 Google Dataflow 和 Python 进行批处理。这工作得很好,但是,我有兴趣在不处理 Java 的情况下提高我的数据流作业的速度。

使用 Go SDK,我实现了一个简单的管道,它从 Google Storage读取一系列100-500mbtextio.Read文件(使用),进行一些聚合并使用结果更新 CloudSQL。正在读取的文件数量可以从数十个到数百个不等。

当我运行管道时,我可以从日志中看到文件是串行读取的,而不是并行读取的,因此作业需要更长的时间。使用 Python SDK 执行的同一进程会触发自动缩放并在几分钟内运行多次读取。

我尝试使用 指定工作人员数量--num_workers=,但是,Dataflow 在几分钟后将作业缩减为一个实例,并且从日志来看,在实例运行期间不会发生并行读取。

如果我删除textio.Read并实现自定义 DoFn 以从 GCS 读取,则会发生类似的情况。读取过程仍然串行运行。

我知道当前的 Go SDK 是实验性的,缺乏许多功能,但是,我还没有找到对并行处理限制的直接参考,在这里。Go SDK 的当前版本是否支持 Dataflow 上的并行处理?

提前致谢

dai*_*oro 5

在实际为 Go SDK 创建我自己的 IO 包后,设法找到了这个问题的答案。

SplitableDoFns在 Go SDK 中尚不可用。这一关键功能允许 Python 和 Java SDK 并行执行 IO 操作,因此在规模上比 Go SDK 快得多。