【问题标题】:Alternative for apache beam PubSub read withIdAttribute in normal pubsub client libraryapache beam PubSub 在普通 pubsub 客户端库中读取 withIdAttribute 的替代方案
【发布时间】:2026-01-23 11:55:01
【问题描述】:

在 beam sdk 中,pubusbIO read 提供了一个使用消息 id 来删除重复消息的选项:https://beam.apache.org/releases/javadoc/2.23.0/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.Read.html#withIdAttribute-java.lang.String-

当我检查 Pubsub 客户端库(适用于 java 和 python)时,我没有看到使用消息 ID 删除重复消息的类似选项。

所以我的问题是:

  1. pubsub 客户端库(python 和 java)是否具有类似的功能?可能是因为命名不同而错过了。
  2. 如果他们不这样做,您将如何处理这种情况?我只是好奇它是如何作为灵感解决的。因为我正在考虑使用缓存来存储最近的消息 ID,以便在我的客户端应用程序中进行重复数据删除。

谢谢。

【问题讨论】:

    标签: publish-subscribe google-cloud-pubsub


    【解决方案1】:

    PubSub 客户端库中没有相同的功能。运行 Beam 管道的 Cloud Dataflow 保留最新 messageIds 的缓存(我不知道有多少和多少时间,但只有几分钟)。这是 Beam 功能。

    当您使用 PubSub 时,由于 PubSub 只保证 at-least-one-delivery,建议您的进程具有幂等性

    一般来说,容纳多次传递要求您的订阅者在处理消息时是幂等的。

    【讨论】: