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 主题

Apache Beam FixedWindows 之间的延迟

Apache Beam 使用多个表时的写入次数

如何在不运行管道的情况下使用Apache Beam连接器

未找到 Pubsub 订阅用户代理配置

数据流管道上的 Apache Beam StatusRuntimeException