我有一个将数据写入 Google Cloud pubsub 的应用程序,根据 pubsub 的文档,由于重试机制而导致的重复偶尔可能会发生。还有消息乱序的问题,这在 pubsub 中也得不到保证。
另外,根据文档,可以使用 Google Cloud Dataflow 来删除这些消息的重复数据。
我想让这些消息在消息队列(意味着云 pubsub)中可用,以供服务使用,云数据流似乎确实有一个 pubsubio 编写器,但是您不会回到写入 pubsub 可能会创建的完全相同的问题吗?重复?订单不也是同样的问题吗?如何使用 pubsub (或任何其他系统)按顺序传输消息?
是否可以使用云数据流从一个 pubsub 主题读取并写入另一个 pubsub 并保证不重复?如果不是的话,你会怎么做才能支持相对少量数据的流式传输?
另外,我对 Apache Beam/Cloud Dataflow 非常陌生。如此简单的用例会是什么样子?我想我可以使用 pubsub 本身生成的 ID 进行重复数据删除,因为我让 pubsub 库进行内部重试而不是自己进行重试,因此重试时 ID 应该相同。
Cloud Dataflow / Apache Beam 是 Mac 卡车。它们专为大型数据源/流的并行化而设计。您可以向 PubSub 发送大量数据,但检测重复项并不是 Beam 的工作,因为此任务需要序列化。
读取 PubSub 然后写入不同的主题并不能消除重复的问题,因为您正在写入的新主题上可能会发生重复。此外,队列写入的并行化进一步增加了无序消息的问题。
重复的问题需要在从订阅读取的客户端上解决。一个简单的数据库查询可以让您知道某个项目已经被处理。然后你就丢弃该消息。
处理无序消息也必须设计到您的应用程序中。
PubSub 被设计为一个轻量级廉价的消息队列系统。如果您需要保证消息排序、无重复、先进先出等,您将需要使用不同的解决方案,这当然要昂贵得多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)