Google cloud dataflow 云数据流持续无法插入

Google cloud dataflow 云数据流持续无法插入,google-cloud-dataflow,Google Cloud Dataflow,我的数据流管道的功能如下: Read from Pubsub Transform data into rows Write the rows to bigquery 有时,传递的数据无法插入。没关系,我知道这次失败的原因。但是数据流不断地尝试一次又一次地插入这些数据。我想限制重试次数,因为它会使工作日志中包含无关信息的日志膨胀。因此,当同一错误反复出现时,排除故障变得极其困难 在本地运行管道时,我得到: no evaluator registered for Read(PubsubSource

我的数据流管道的功能如下:

Read from Pubsub
Transform data into rows
Write the rows to bigquery
有时,传递的数据无法插入。没关系,我知道这次失败的原因。但是数据流不断地尝试一次又一次地插入这些数据。我想限制重试次数,因为它会使工作日志中包含无关信息的日志膨胀。因此,当同一错误反复出现时,排除故障变得极其困难

在本地运行管道时,我得到:

no evaluator registered for Read(PubsubSource)
我希望能够在本地测试管道。但数据流似乎不支持PubSub的这个选项

为了清除错误,我别无选择,只能取消管道并在谷歌云上运行新作业。这需要时间和金钱。有没有办法限制错误?有没有办法在本地测试我的管道?是否有更好的方法调试管道


作业ID:2017-02-08_09_18_15-3168619427405502955

要使用无限数据集在本地运行管道,根据@Pablo的建议,使用
InProcessPipelineRunner

        dataflowOptions.setRunner(InProcessPipelineRunner.class);

本地运行该程序使我能够处理带有异常的错误,并快速优化我的工作流程。

除了异常处理之外,目前没有其他方法限制错误。请看下面的注释:它将无限期地尝试重新运行代码。如果你看一下他们通常从CSV文件中读取本地运行数据的示例,我认为没有办法在本地测试Pub/Sub。假设,当出现异常时,有可能让数据流确认Pubsub消息吗?据我所知,除非Pubsub消息被成功处理,否则云数据流将永远不会确认该消息。这可能完全取决于您希望处理的异常类型。举个例子,在我的例子中,你可以看看这篇博文,我正在接收和解析来自Pub/Sub的JSON消息,如果转换失败,我将捕获并记录有效负载以供以后分析。我正在看你的工作。我将在几个小时后报告。您是否正在尝试使用
DirectPipelineRunner
在本地运行作业?尝试使用
InProcessPipelineRunner
在本地运行管道,它应该支持流式传输。