【问题标题】:PubsubIO.Read + exactly once deliveryPubsubIO.Read + 恰好一次交付
【发布时间】:2018-07-15 20:49:00
【问题描述】:

使用 2.2 Dataflow SDK 是否可以使用 Pubsub 自动应用的 messageId 字段实现一次性交付?或者这甚至可能是一种默认行为?

PubsubIO.Read.withIdAttribute 似乎通常可以做到这一点,但我无法控制已发布的消息,所以我希望使用 messageId 字段。

在旧的1.x docs 中声明:

此外,您可以实现对 Pub/Sub 消息流的一次性处理,因为 PubsubIO 根据自定义消息标识符或 Pub/Sub 分配的标识符对消息进行重复数据删除。

最后一部分暗示读取的默认行为可能会固有地将 messageId 用于完全一次传递的目的。

【问题讨论】:

    标签: google-cloud-dataflow apache-beam google-cloud-pubsub


    【解决方案1】:

    是的,1.x 和 2.2 在这方面是相同的。两者都提供一次性处理语义。两者都使用了 Pubsub 消息 ID。

    请注意,一次性“处理”和“一次性”“交付”并不总是相同的。交付通常意味着接收到外部系统,这超出了 Dataflow 管道的范围。当管道中有重试时,接收器可能有重复写入。

    【讨论】:

    • 您是否碰巧有任何文档的链接,该链接说明它将在何处使用 messageId 进行一次性处理?另外,如果它默认提供这种一次性处理,那么使用PubsubIO.Read.withIdAttribute 有什么意义?
    • 我确实找到了this,这似乎描述了我所指的行为。再次感谢
    • 你是对的。 Apache Beam 中的默认文档是指开源 PubsubIO,并不是很有用[1]。数据流管道使用它自己的实现(带有一些服务器端组件)。我将提交有关如何将其传达给用户的错误。 [1]:beam.apache.org/documentation/sdks/javadoc/2.2.0/org/apache/…
    • 我提交了一份内部错误报告以改进 PubSubIO 的文档。
    猜你喜欢
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2012-11-14
    • 2017-01-14
    • 2020-10-04
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多