Cloud DataFlow 性能——我们的时代值得期待吗?

Cloud DataFlow performance - are our times to be expected?

正在寻找一些关于如何最好地 architect/design 和构建我们的管道的建议。

经过一些初步测试后,我们没有得到预期的结果。也许我们只是在做一些愚蠢的事情,或者我们的期望太高了。

我们的data/workflow:

我们 运行ning 到目前为止:

我们已经 运行 使用几种不同的工作线程配置来查看其执行情况的作业:

  1. 5 名工人 (5 vCPUs) 花费了 ~17 分钟
  2. 5 名工人 (10 vCPUs) 花费了 ~16 分钟(在这个 运行 中我们将实例提升到 "n1-standard-2"获得双核,看看它是否提高了性能)
  3. 50 分钟和 100 个最大工作人员,自动缩放设置为 "BASIC"(50-100 vCPUs)花费了 ~13 分钟
  4. 100 分钟和 150 个最大工作人员,自动缩放设置为 "BASIC"(100-150 vCPUs)花费了 ~14 分钟

这些时间是否符合您对我们的用例和管道的预期?

BigQuery 的写入限制为每秒 100,000 行/table 或 6M/分钟。在 3100 万行的输入下,只需写入约 5 分钟即可。当您加回每个元素的离散处理时间,然后是图形的同步时间(从 GCS->dispatch->... 读取)时,这看起来是正确的。

我们正在研究 table 分片模型,因此您可以编写一组 table,然后在 BigQuery 中使用 table 通配符来聚合 tables(典型 BigQuery 流式处理用例的通用模型)。我知道 BigQuery 的人也在考虑增加 table 流媒体限制,但没有官方消息可以分享。

Net-net 增加的实例现在不会为您带来更多的吞吐量。

另一种方法 - 在我们致力于改进 BigQuery 同步的同时 - 将通过 TextIO 使用模式匹配对您的读取进行分片,然后 运行 X 个单独的管道针对 X 个 tables。可能是一个有趣的实验。 :-)

有道理吗?

您还可以将输出写入文件,然后使用命令 line/console 将其加载到 BigQuery 中。您可能会节省一些实例的正常运行时间。这就是我在 运行 遇到 Dataflow/BigQuery 界面问题后一直在做的事情。同样根据我的经验,启动和拆除实例会产生一些开销(可能需要 3-5 分钟)。你也把这个时间包括在你的测量中吗?