Google cloud dataflow Apache Beam未从订阅中删除无效元素

Google cloud dataflow Apache Beam未从订阅中删除无效元素,google-cloud-dataflow,apache-beam,apache-beam-io,Google Cloud Dataflow,Apache Beam,Apache Beam Io,刚刚意识到我的管道是错误的,当涉及到错误的事件时,它们一直在被处理,并且从未从订阅中删除 基本上,我有一个简单的管道,其中包含一个触发器,可以将这些事件提取到一个文件中 在其一个阶段中,它确实处理通过PubSub接收的消息的有效负载,并将其转发到下一个阶段。然而,在某些情况下,这将失败 pipeline .apply("Read PubSub Events", PubsubIO.readMessagesWithAttributes().fr

刚刚意识到我的管道是错误的,当涉及到错误的事件时,它们一直在被处理,并且从未从订阅中删除

基本上,我有一个简单的管道,其中包含一个触发器,可以将这些事件提取到一个文件中

在其一个阶段中,它确实处理通过PubSub接收的消息的有效负载,并将其转发到下一个阶段。然而,在某些情况下,这将失败

        pipeline
        .apply("Read PubSub Events",
            PubsubIO.readMessagesWithAttributes().fromSubscription(options.getSubscription()))
        .apply("Map to MyClass",
            ParDo.of(new PubSubMessageToMyClass())) // Exception thrown in this stage.
        .apply("Apply Timestamps", WithTimestamps.of(new SetTimestampFn()).withAllowedTimestampSkew(new Duration(Long.MAX_VALUE)))
        ...
        );
当错误发生时,我会在管道中一遍又一遍地看到相同的事件,就像它永远不会结束处理一样


有没有办法明确告诉Apache Beam使给定消息无效并防止进一步失败的处理?

数据流处理任意捆绑包中的元素,并在该捆绑包中的任何元素出现错误时重试整个捆绑包。在批处理模式下运行时,包含失败项的捆绑包将重试4次当单个捆绑包失败4次时,管道将完全失败。在流模式下运行时,包含失败项目的捆绑包将无限期重试,这可能会导致管道永久停止


考虑通过添加异常处理程序来防止代码中出现错误。例如,如果要删除在ParDo中进行的某些自定义输入验证失败的元素,请在ParDo中使用try/catch块来处理异常并删除元素。

数据流处理任意捆绑包中的元素,并在该捆绑包中的任何元素出现错误时重试整个捆绑包。在批处理模式下运行时,包含失败项的捆绑包将重试4次当单个捆绑包失败4次时,管道将完全失败。在流模式下运行时,包含失败项目的捆绑包将无限期重试,这可能会导致管道永久停止


考虑通过添加异常处理程序来防止代码中出现错误。例如,如果要删除在ParDo中进行的自定义输入验证失败的元素,请在ParDo中使用try/catch块来处理异常并删除元素。

非常感谢Vikram的快速响应。有没有关于如何在ParDo中删除PubSub元素的文档?@czr_RR,这是示例代码。另外,使用pubsub的示例模板非常感谢Vikram的快速响应。有没有关于如何在ParDo中删除PubSub元素的文档?@czr_RR,这是示例代码。使用pubsub的示例模板还有