apache beam PubSub 在普通 pubsub 客户端库中读取 withIdAttribute 的替代方案
Posted
技术标签:
【中文标题】apache beam PubSub 在普通 pubsub 客户端库中读取 withIdAttribute 的替代方案【英文标题】:Alternative for apache beam PubSub read withIdAttribute in normal pubsub client library 【发布时间】:2021-01-09 18:22:41 【问题描述】:在 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 删除重复消息的类似选项。
所以我的问题是:
-
pubsub 客户端库(python 和 java)是否具有类似的功能?可能是因为命名不同而错过了。
如果他们不这样做,您将如何处理这种情况?我只是好奇它是如何作为灵感解决的。因为我正在考虑使用缓存来存储最近的消息 ID,以便在我的客户端应用程序中进行重复数据删除。
谢谢。
【问题讨论】:
【参考方案1】:PubSub 客户端库中没有相同的功能。运行 Beam 管道的 Cloud Dataflow 保留最新 messageIds 的缓存(我不知道有多少和多少时间,但只有几分钟)。这是 Beam 功能。
当您使用 PubSub 时,由于 PubSub 只保证 at-least-one-delivery,建议您的进程具有幂等性
一般来说,容纳多次传递要求您的订阅者在处理消息时是幂等的。
【讨论】:
以上是关于apache beam PubSub 在普通 pubsub 客户端库中读取 withIdAttribute 的替代方案的主要内容,如果未能解决你的问题,请参考以下文章
使用 python 根据 apache Beam 中的条件调用特定的 pubsub 主题