gpt4 book ai didi

java - DirectRunner 不按照我在 Beam Java SDK 中使用 FixWindows 指定的方式从 Pub/Sub 读取数据

转载 作者:行者123 更新时间:2023-12-02 10:13:23 25 4
gpt4 key购买 nike

我目前正在开发一个数据流管道,该管道使用 Apache Beam Java SDK 2.8.0 从 Pub/Sub 读取流数据。该管道只是来自 Google 的 PubsubToText.java 模板。

https://github.com/GoogleCloudPlatform/DataflowTemplates/blob/master/src/main/java/com/google/cloud/teleport/templates/PubsubToText.java

虽然使用 DataflowRunner 部署到云可以按预期工作,但它无法使用 DirectRunner 正确运行,即当我在本地环境中工作时,这使得开发管道变得非常困难。

例如,当我将 FixWindows 速率设置为 30 秒时,云上的 Dataflow Runner 每 30 秒生成一次文件,这是预期的。

但是,当我在本地环境中为 DirectRunner 设置相同的速率时,它不会每 30 秒发出一次文件。相反,它以不稳定的方式生成文件。

例如,它在 4 分钟后发出第一个数据,并创建了 8 个应该创建的文件,实际上是一次生成的,5 分钟后生成下一个,3 分钟后生成下一个,......等等,这使得本地开发过程极其耗时且令人沮丧。

我为什么要观察这个?

将 Java SDK 从 8 切换到 11,将 Beam SDK 从 2.8.0 切换到 2.9.0 或 2.10.0,将环境从本地切换到 GCE 实例,或者将管道输出从 GCS 切换到本地都没有帮助。

以下是重现问题的全部内容:

  1. git clone https://github.com/GoogleCloudPlatform/DataflowTemplates
  2. 删除 <scope>test</scope> pom.xml 中的 beam-runners-direct-java 行,使其在运行时支持 DirectRunner。
  3. 按照 https://github.com/GoogleCloudPlatform/DataflowTemplates/blob/master/src/main/java/com/google/cloud/teleport/templates/PubsubToText.java 上的建议编译并运行程序,但将运行程序更改为 DirectRunner 并添加 --outputShardTemplate=W-P-SS-of-NN ,这是一个省略的选项,在本地运行时是必需的。
  4. 删除 --project , --stagingLocation ,和tempLocation同时线路,因为它不会部署到云端。
  5. 发送文件需要很长时间,尽管我设置了,例如windowDuration=30s

我怀疑这是与 Pub/Sub 相关的问题,但是当我运行 tcpdump 时,它开始连接到 Pub/Sub 并立即提取数据。这可能是 DirectRunner 特定的问题。

最佳答案

虽然我不知道为什么会发生这种情况,但我找到了解决此问题的方法。虽然 DataflowRunner 不需要您设置触发器即可使其按预期工作,但您必须为 DirectRunner 指定显式触发器。

.trrigering 附加到 Window.into,问题就消失了。

关于java - DirectRunner 不按照我在 Beam Java SDK 中使用 FixWindows 指定的方式从 Pub/Sub 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54841814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com