Google cloud dataflow 谷歌云数据流:使用DirectPipelineRunner访问管道中的谷歌云发布/订阅(本地作业)?

Google cloud dataflow 谷歌云数据流:使用DirectPipelineRunner访问管道中的谷歌云发布/订阅(本地作业)?,google-cloud-dataflow,google-cloud-pubsub,Google Cloud Dataflow,Google Cloud Pubsub,我已经使用Google Cloud Dataflow SDK编写了一个流式管道,但是我想在本地测试我的管道。我的管道从Google Pub/Sub获取输入数据 是否可以使用DirectPipelineRunner(本地执行,而不是谷歌云)运行访问发布/订阅(pubsubIO)的作业 我以普通用户帐户登录时遇到权限问题。我是具有我试图访问的发布/订阅主题的项目的所有者。DirectPipelineRunner当前不支持发布/订阅。在本地使用时,您将收到一个错误,指出“没有为PubsubIO.Rea

我已经使用Google Cloud Dataflow SDK编写了一个流式管道,但是我想在本地测试我的管道。我的管道从Google Pub/Sub获取输入数据

是否可以使用DirectPipelineRunner(本地执行,而不是谷歌云)运行访问发布/订阅(pubsubIO)的作业


我以普通用户帐户登录时遇到权限问题。我是具有我试图访问的发布/订阅主题的项目的所有者。

DirectPipelineRunner当前不支持发布/订阅。在本地使用时,您将收到一个错误,指出“没有为PubsubIO.Read注册的计算器”


您的权限问题可能来自其他来源。

这实际上是可能的,但DirectPipelineRunner不支持无界数据源。因此,您必须设置
maxReadTime
maxNumRecords
如下:

PubsubIO.Read.topic("projects/<project-id>/topics/<topic>").maxNumRecords(1000);
publisubio.Read.topic(“projects//topics/”).maxNumRecords(1000);
发件人:

连续读取云发布/子流的p传输,以及 返回包含流中项目的字符串的PCollection。 当使用仅支持边界的PipelineRunner运行时 P集合(如DirectPipelineRunner),仅为 可以处理输入的发布/子流。同样地 PubsubIO.Read.Bound.maxNumRecords(int)或 必须设置PubsubIO.Read.Bound.maxReadTime(持续时间)

是中引入的DirectPipelineRunner的新版本,包括对无界PCollection的支持

(注意:在Apache BAM中,这个功能已经被添加到DirectRunner中,但是在java的DATAFOFF SDK中,直到2,我们不能这么做,因为它更好地检查模型可能会导致额外的测试失败,我们认为这是一个向后的不兼容的变化。因此,加入了InProcessPipelineRunner的时间Bee。ng.)


还有一些很棒的新功能,用于测试延迟和无序数据。

只是为了帮助任何想要搜索这些数据的人

使用最新版本,您可以执行此操作。如果要在本地运行管道,请使用“DirectRunner”在本地运行此操作。使用“DataflowRunner”在云中运行此操作

设置分段位置和流道,如下所示

streamingOption.setStagingLocation(PipelineConstants.PUBSUB_STAGING_LOCATION);

streamingOption.setRunner(DataflowRunner.class);
或者将其作为参数传递


你能详细说明一下你所面临的权限问题吗?

顺便说一句,有没有强烈的理由不支持它?我想这并不难支持。请看下面更新的答案——InProcessPipelineRunner是DirectPipelineRunner的新版本,可以处理无限的PCollection。通过“尝试访问”,您到底做了什么?如果您是项目的所有者,每个操作都应该正常工作。这在最新的Dataflow SDK(2.4.0)中似乎不可用