光束流管道不写入窗口文件

问题描述 投票:0回答:1

我正在尝试在本地计算机上运行来自 Google 的此示例。我正在使用 PubSub 模拟器和 Beam 2.60.0,使用 --runner=DirectRunner 执行。

...
options.setStreaming(true);
options.setPubsubRootUrl("http://localhost:8085");
int numShards = 1;

final Pipeline pipeline = Pipeline.create(options);
pipeline.
.apply("Read PubSub Messages", PubsubIO.readStrings().fromSubscription(options.getInputSubscription()))
.apply("Log PubSub message", ParDo.of(new LogStringFn()))
.apply(Window.into(FixedWindows.of(Duration.standardMinutes(1))))
.apply("Log windowed message", ParDo.of(new LogStringFn()))
.apply("Write Files", new WriteOneFilePerWindow("outputs/out", numShards));

pipeline.run().waitUntilFinish();

通过日志记录步骤,我可以确认我发布到 PubSub 的消息正在被管道使用。但是,将有效负载写入窗口文件的最后一步永远不会发生,并且管道不会按其应有的方式确认来自 PubSub 的消息。我尝试将日志添加到 WriteOneFilePerWindow - PerWindowFiles FilenamePolicy 中的任何方法都没有被调用。

我尝试过的另一个窗口示例(Apache 的 WindowedWordCount 示例)工作正常,但我需要它用于我最终用例的流案例。

额外注意的是,当管道运行时,我的 PubSub 模拟器的 CPU 利用率为 100%。这正常吗?

这里可能存在什么问题 - 为什么 WriteOneFilePerWindow 步骤永远不会被执行?以后遇到这样的问题该如何调试?

google-cloud-dataflow apache-beam google-cloud-pubsub
1个回答
0
投票

很难确定,但这很可能是由于 pubsub 模拟器的工作方式造成的;该模拟器功能不全,Beam 可能无法从模拟器获取正确的水印信息 [1]。您可以尝试使用普通的 pubsub 主题吗?

[1] https://cloud.google.com/dataflow/docs/concepts/streaming-pipelines#watermarks

© www.soinside.com 2019 - 2024. All rights reserved.