问题描述
我正在尝试将数据从 Cloud Pub/Sub 传递到 Google Cloud Storage。当我使用 runner DataflowRunner
时,管道会发布到 Google Cloud Dataflow 并按预期工作。但是,对于某些测试,我希望管道在本地运行(但仍从 Cloud Pub/Sub 读取并写入 Cloud Storage)。当我使用运行程序 DirectRunner 时,该进程会写出 INFO:apache_beam.runners.direct.direct_runner:Running pipeline with DirectRunner.
,但在将新消息发布到 Pub/Sub 时什么也不做。
我正在使用以下命令执行管道:
python dev_radim_dataflow_gcs_direct.py ^
--project=<GCP_PROJECT> ^
--region="europe-west3" ^
--input_subscription="projects/data-uat-280814/subscriptions/dev-radim-dataflow" ^
--output_path=gs://dev_radim/dataflow_dest_local/ ^
--runner=DirectRunner ^
--window_size=1 ^
--temp_location=gs://dev_radim/dataflow_temp_local/
完整的 dev_radim_dataflow_gcs_direct.py 文件在这里:https://pastebin.com/W7VphH5A
有什么想法为什么消息没有从 Pub/Sub 发送到 GCS?
解决方法
发表@RadRussian 的评论作为答案,因为这也可能发生在其他人身上:
有另一个消费者从同一个订阅中读取数据,因此没有消息到达在 DirectRunner 中运行的管道。在这种情况下,使用者是 Dataflow 作业,但它可以是任何东西。