【问题标题】:Google Cloud PubSub: How to read only latest recordsGoogle Cloud PubSub:如何仅读取最新记录
【发布时间】:2020-01-08 08:17:03
【问题描述】:

在 Kafka 中有 2 个设置 earliestlatest,您可以从主题的最早偏移量 (0) 或最新事件(对实时有用)进行读取

我现在将 PubSub 与 Dataflow 和 Beam 一起使用,但默认情况下,该作业似乎每次启动时都会从最早读取。如何配置它以使其仅读取最新记录?

latest 是 Kafka 中的默认值,谁能解释为什么这在 Pub/Sub 中不容易实现?

【问题讨论】:

标签: google-cloud-platform apache-kafka google-cloud-pubsub dataflow


【解决方案1】:

最新的定义是什么?事实上,使用 Beam,PubsubIO 阅读器是无限阅读。也就是说,没有尽头,最近之后总会有更近的!

所以,这是哲学部分。其实你要定义,最新的比较是什么。使用光束,您可以使用windowing。然后,您可以说,在 5 分钟的窗口内,我想处理最后一个。这里最新的定义是正确的,可以实现。

【讨论】:

  • 我熟悉窗口化,但它不适合我的情况。如果我重新启动一个应用程序,我不希望它从一开始就处理一个主题的所有消息,只处理应用程序启动后到达的新消息。这在 Beam / PubSub 中是否可行?
  • 在这种情况下,寻求最佳解决方案。将 seek 设置为 Now,然后启动您的管道。
【解决方案2】:

您可以尝试使用 seek 选项:https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions/seek

它仍然有点初级,因为您需要确定时间戳或快照。

我猜 Apache Beam 选项将使用 withTimestampAttribute

https://beam.apache.org/releases/javadoc/2.15.0/org/apache/beam/sdk/io/gcp/pubsub/PubsubIO.Read.html#withTimestampAttribute-java.lang.String-

【讨论】:

  • 根据链接文档,seek API 确认早于给定时间戳的消息。所以是的,您将阅读最后的消息但您会丢失较旧的消息,因为它们会被确认。我认为这不是 OP 想要实现的目标。
  • 您可以通过设置retain-acked-messages 功能来避免丢失旧邮件。这将确保消息不会丢失,但要接收它们,您必须回到更早的位置。
猜你喜欢
  • 2018-06-22
  • 2016-12-31
  • 1970-01-01
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
  • 2018-10-17
  • 1970-01-01
相关资源
最近更新 更多