首页 > 解决方案 > apache beam PubSub 在普通 pubsub 客户端库中读取 withIdAttribute 的替代方案

问题描述

在 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-subscribegoogle-cloud-pubsub

解决方案


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

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

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


推荐阅读