在普通pubsub客户端库中用idAttribute读取的Apache Beam PubSub的替代方法

问题描述

在Beam sdk中,pubusbIO读取提供了一个使用消息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。

谢谢。

解决方法

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

使用PubSub时,并且由于PubSub仅保证at-least-one-delivery,因此建议您的过程是幂等的

通常,要容纳多于一次的传递,则要求您的订户在处理消息时必须是幂等的。