首页 > 解决方案 > Apache Beam 转换中对数据存储的同步调用的高挂墙时间

问题描述

我一直在调查一个运行速度非常慢的 Beam 作业(使用 GCP 数据流)。使用 GCP 分析器,我能够确定大部分时间都花在等待使用标准 Java 数据存储库 ( https://cloud.google.com/datastore/docs/ ) 调用数据存储(在梁转换内)参考/图书馆)。我写了一个测试作业,它只是在光束变换中进行简单的数据存储读取,并看到了相同的结果。这是分析器的屏幕截图

在此处输入图像描述

您可以在屏幕截图中看到,运行这些简单的 Datastore 查询平均需要大约 19 秒。我知道使用梁数据存储库来并行化/批处理这些对数据存储的调用是最佳实践,但对于我们的用例,我们需要在梁转换中进行这些顺序同步读取。无论如何,我想知道是否有人对为什么这些电话可能会花这么长时间有任何见解?您可以在屏幕截图中看到,大部分时间都花在等待 SocketInputStream.socketRead0() 方法上,这表明可能存在网络或远程服务器延迟。

这是我编写的运行上述配置文件的测试作业 DoFn 代码的屏幕截图:

在此处输入图像描述

标签: google-cloud-platformgoogle-cloud-datastoregoogle-cloud-dataflowapache-beam

解决方案


推荐阅读