关于流式计算 和 消息队列的本质区别

发布于 2022-09-13 01:18:11 字数 102 浏览 34 评论 0

总觉得这两种方式非常相似,流式计算 和 消息队列都可以看作是针对单个消息的处理,不是吗?在需要实际计算的场景中,消息队列好像也能满足条件,但这又是两种技术。如何区别他们以选择更加合适的场景?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

¢好甜 2022-09-20 01:18:11

两者不是一个层面上的东西,没啥可比性。

非要比较的话,既然已经说“流”(Streaming)了,那一定是有序的;而消息队列则不关心顺序,虽然消费者从队列里拉取消息是有顺序的,但你怎么保证多个消费者消费消息是有序的呢?

所以在流处理中,“时间”或者“窗口”是个很重要的概念(有股子时序数据库的味道了)。

再一个是流处理从拓扑结构上看只能是线状的,即 A→B→C→D(指单个处理器,多个处理器当然也可能会有网状结构);而消息队列则可以是网状的,A→B 的同时可能也有 A→C,甚至再反过来 C→A(可以是,不代表一定是,你当然也可以在业务上设计出线性的结构)。

所以你看流处理中会强调“状态”,即一个数据当前正处于哪个处理器,而消息队列系统中并不强调(注意不强调不等于不可以,你业务上当然也可以区分状态,只是消息队列本身不关心罢了)。

P.S. 其实广义上的消息队列分两种:一种是生产消费模式,这种模式下一条消息只能被消费一次,然后就被删除了;另一种是发布订阅模式,这种模式下往往会多出一个叫 Topic 或类似概念的东西,一条消息可以被多个消费者都消费到。所以如果一个消息队列是生产消费模式的、并且拓扑结构是线性的、并且你在业务层能保证消费有序,跟流就几乎一样了。

P.S. 有些工具会分别提供流和队列两种 API,比如 Kafka;有些则抽象出一个统一的 API,比如 Pulsar。所以从这个角度上看,二者也不是非此即彼的关系,而是不同维度上描述一个系统的两个概念,可以统一也可以不统一。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文