1

我只有一个在生产项目中创建的主题。我想在需要使用生产 pubsub 主题的开发环境中运行我的数据流作业。当我在开发项目中提交我的数据流作业时,它不工作,它总是显示在数据流 UI 中运行,但没有从 pubsub 读取任何元素。如果我提交生产项目,它会完美运行。

为什么它不读取来自不同项目主题的消息?我正在使用 java-sdk 2.1,跑步者是“dataflowrunner”

PCollection<String> StreamData = p.apply("Read pubsub message",PubsubIO.readStrings().fromSubscription(options.getInputPubSub()));

使用 mvn 提交数据流作业

mvn compile exec:java -Dexec.mainClass=dataflow.streaming.SampleStream  -Dexec.args="—project=project-dev-1276 --stagingLocation=gs://project-dev/dataflow/staging --tempLocation=gs://project-dev/dataflow/bq_temp  --zone=europe-west1-c  --bigQueryDataset=stream_events --bigQueryTable=events_sample --inputPubSub=projects/project-prod/subscriptions/stream-events --streaming=true --runner=dataflowRunner"

注意:如果我使用的是 directrunner,它可以工作并使用来自不同项目 pubsub 主题的消息。 在此处输入图像描述

队列中没有添加任何元素,也没有估计大小。

4

1 回答 1

0

您需要Pub/Sub Subscriber在生产项目中为您的工作将使用的用户(服务帐户)添加权限。默认情况下,工作人员使用您项目的 Compute Engine 服务帐号作为控制器服务帐号。<project-number>-compute@developer.gserviceaccount.com应授予此服务帐户 ( )Pub/Sub Subscriber权限。

在这里阅读更多https://cloud.google.com/dataflow/docs/concepts/security-and-permissions和这里https://cloud.google.com/pubsub/docs/access-control

于 2019-03-08T06:57:51.103 回答