【问题标题】:Deduplicate pubsub messages back to pubsub with dataflow possible?可以使用数据流将 pubsub 消息重复数据删除回 pubsub?
【发布时间】:2019-03-11 22:32:18
【问题描述】:

我有一个向 Google Cloud pubsub 写入数据的应用程序,根据 pubsub 的文档,由于重试机制而导致的重复是偶尔会发生的事情。还有乱序消息的问题,这在 pubsub 中也不能保证。

此外,根据文档,可以使用 Google Cloud Dataflow 对这些消息进行重复数据删除。

我想让这些消息在消息队列(即云 pubsub)中可用以供服务使用,而云 Dataflow 似乎确实有一个 pubsubio 写入器,但是您不会回到写入到完全相同的问题pubsub 可以创建重复项吗?订单不是同样的问题吗?如何使用 pubsub(或任何其他系统)按顺序流式传输消息?

是否可以使用云数据流从 pubsub 主题读取并写入另一个 pubsub 并保证不重复?如果不是,您将如何做到这一点,以支持相对少量数据的流式传输?

我对 Apache Beam/Cloud Dataflow 也很陌生。这样一个简单的用例会是什么样子?我想我可以使用 pubsub 本身生成的 ID 进行重复数据删除,因为我让 pubsub 库进行内部重试而不是自己进行,因此重试时 ID 应该相同。

【问题讨论】:

    标签: message-queue google-cloud-dataflow apache-beam google-cloud-pubsub


    【解决方案1】:

    Cloud Dataflow / Apache Beam 是 Mac 卡车。它们专为大型数据源/流的并行化而设计。您可以向 PubSub 发送大量数据,但检测重复不是 Beam 的工作,因为此任务需要序列化。

    阅读 PubSub 然后写入不同的主题并不能消除重复的问题,因为重复可能发生在您正在写入的新主题上。此外,队列写入的并行化进一步增加了乱序消息的问题。

    重复的问题需要在从订阅读取的客户端上解决。一个简单的数据库查询可以让您知道某个项目已被处理。然后你就丢弃这条消息。

    处理乱序消息也必须设计到您的应用程序中。

    PubSub 被设计成一个轻量级的廉价消息队列系统。如果您需要保证消息排序、无重复、FIFO 等,您将需要使用不同的解决方案,这当然要贵得多。

    【讨论】:

    • 感谢您的意见。我一直在到处读到,Dataflow 可以保证一次性交付,并且它在 Beam 库中有一个 pubsubIO 抽象来做到这一点,但是更深入的一瞥似乎表明 API 是已弃用的 v1 API 的一部分。这一切都有些令人困惑。 Dataflow 根本不能用于重复数据删除吗?
    • 当然可以使用 Dataflow - 但为什么要花这么多钱将并行系统转换为串行任务处理器。
    【解决方案2】:

    无法使用 Cloud Dataflow 从 Pub/Sub 主题读取数据并写入另一个可以保证不重复的 Pub/Sub 主题。重复可以通过以下两种方式之一发生:

    1. 发布者两次发布同一消息。从 Pub/Sub 服务的角度来看,这是两条单独的消息,并且都将被传递。例如,如果发布者执行发布但失败并显示 DEADLINE_EXCEEDED 并且发布者重试,则可能会发生这种情况。在这种情况下,可能第一次发布尝试确实成功了,但响应没有及时返回给发布者。

    2. Pub/Sub 服务向订阅者传递一条消息,但它要么不确认该消息,要么该 ack 在传回服务的过程中丢失。 Pub/Sub 具有至少一次交付保证。一个主要来源是 ack 是尽力而为的事实,这意味着即使订阅者发送了一个 ack,它也可能不会一直返回到服务,例如,如果有网络中断。

    鉴于这两种不同的重复模式,对消息进行重复数据删除的唯一方法是在接收消息的最终订阅者中执行此操作,可以通过 Dataflow 或其他一些机制,例如,将接收到的 ID 写入数据库中。请注意,在任何一种情况下,使用 Pub/Sub 服务生成的 ID 可能是不够的,因为在发生错误后重试请求的情况下可能会出现重复发布。

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 2021-01-23
      • 2019-01-29
      • 2017-12-23
      • 2018-12-10
      • 2018-04-01
      • 1970-01-01
      • 2018-05-30
      • 1970-01-01
      相关资源
      最近更新 更多