PubsubIO.Read + 恰好一次交付

PubsubIO.Read + exactly once delivery

使用 Pubsub 自动应用的 2.2 Dataflow SDK is it possible to achieve exactly-once delivery using the messageId 字段?或者这甚至可能是默认行为?

这似乎通常可以通过 PubsubIO.Read.withIdAttribute 实现,但我无法控制已发布的消息,因此我希望使用 messageId 字段。

在旧的 1.x docs 中指出:

In addition, you can achieve exactly once processing of Pub/Sub message streams, as PubsubIO de-duplicates messages based on custom message identifiers or identifiers assigned by Pub/Sub.

最后一部分暗示读取的默认行为可能固有地使用 messageId 来实现一次性传递目的。

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

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