我有一个将数据写入Google Cloud pubsub的应用程序,根据pubsub的文档,由于重试机制而导致的重复有时会发生。还有不规则消息的问题,在pubsub中也不能保证。
同样,根据文档,可以使用Google Cloud Dataflow对这些消息进行重复数据删除。
我想让这些消息在消息传递队列(意味着云pubsub)中可供服务使用,并且Cloud Dataflow似乎有一个pubsubio编写器,但是您是否会回到写pubsub可以创建的完全相同的问题上重复吗?那不是订单的问题吗?如何使用pubsub(或与此相关的任何其他系统)按顺序流式传输消息?
是否可以使用云数据流从pubsub主题中读取并写入另一个pubsub,并且保证没有重复?如果不是,那么您将如何做以支持流式传输相对少量数据呢?
我对Apache Beam / Cloud Dataflow也很陌生。这样一个简单的用例会是什么样子?我想我可以使用pubsub本身生成的ID进行重复数据删除,因为我允许pubsub库执行其内部重试而不是自己进行,因此该ID在重试时应该相同。
最佳答案
Cloud Dataflow / Apache Beam是Mac卡车。它们设计用于并行处理大型数据源/流。您可以将大量数据发送到PubSub,但是检测重复项并不是Beam的工作,因为此任务需要序列化。
阅读PubSub,然后再写入其他主题并不能消除重复的问题,因为在您要写入的新主题上可能发生重复。同样,队列写入的并行化进一步增加了您出现乱序消息的问题。
重复的问题需要在从订阅中读取的客户端上解决。一个简单的数据库查询可以让您知道某个项目已经被处理。然后,您仅丢弃该消息。
处理乱序消息也必须设计到您的应用程序中。
PubSub被设计为轻量级的廉价消息队列系统。如果您需要保证消息顺序,没有重复项,FIFO等,则需要使用其他解决方案,这当然会贵得多。
关于message-queue - 可以将pubsub消息重复数据删除重复到pubsub并进行数据流吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55111375/