首页 > 其他分享 >MQ——如何选择消息队列

MQ——如何选择消息队列

时间:2023-01-12 22:44:23浏览次数:33  
标签:场景 队列 RabbitMQ Kafka 选择 MQ 消息 RocketMQ

一个好的消息队列需满足以下几点:

1、首先,必须是开源的产品,这个非常重要。

开源意味着,如果有一天你使用的消息队列遇到了一个影响你系统业务的 Bug,你至少还有机会通过修改源代码来迅速修复或规避这个 Bug,解决你的系统火烧眉毛的问题,而不是束手无策地等待开发者不一定什么时候发布的下一个版本来解决。

2、有一定社区活跃度的产品

流行的好处是,只要你的使用场景不太冷门,你遇到 Bug 的概率会非常低,因为大部分你可能遇到的 Bug,其他人早就遇到并且修复了。你在使用过程中遇到的一些问题,也比较容易在网上搜索到类似的问题,然后很快的找到解决方案。还有一个优势就是,流行的产品与周边生态系统会有一个比较好的集成和兼容。

3、最后,作为一款及格的消息队列产品,必须具备的几个特性包括:

    • 消息的可靠传递:确保不丢消息;
    • Cluster:支持集群,确保不会因为某个节点宕机导致服务不可用,当然也不能丢消息;
    • 性能:具备足够好的性能,能满足绝大多数场景的性能要求。

可供选择的消息队列产品:

1、RabbitMQ

  • RabbitMQ 是使用一种比较小众的编程语言:Erlang 语言编写的,它最早是为电信行业系统之间的可靠通信设计的,也是少数几个支持 AMQP 协议的消息队列之一。轻量级、迅捷,开箱即用的消息队列,非常容易部署和使用。
  • RabbitMQ 一个比较有特色的功能是支持非常灵活的路由配置,和其他消息队列不同的是,它在生产者(Producer)和队列(Queue)之间增加了一个 Exchange 模块,你可以理解为交换机。这个 Exchange 模块的作用和交换机也非常相似,根据配置的路由规则将生产者发出的消息分发到不同的队列中。路由的规则也非常灵活,甚至你可以自己来实现路由规则。基于这个 Exchange,可以产生很多的玩儿法,如果你正好需要这个功能,RabbitMQ 是个不错的选择。
  • RabbitMQ 的客户端支持的编程语言大概是所有消息队列中最多的。

存在的问题:

    • RabbitMQ 对消息堆积的支持并不好,当大量消息积压的时候,会导致 RabbitMQ 的性能急剧下降。
    • RabbitMQ 的性能是我们介绍的这几个消息队列中最差的,大概每秒钟可以处理几万到十几万条消息。
    • RabbitMQ 使用的编程语言 Erlang,这个编程语言不仅是非常小众的语言,更麻烦的是,这个语言的学习曲线非常陡峭。

2、RocketMQ

    • RocketMQ 就像一个品学兼优的好学生,有着不错的性能,稳定性和可靠性,具备一个现代的消息队列应该有的几乎全部功能和特性,并且它还在持续的成长中。
    • 有非常活跃的中文社区,大多数问题你都可以找到中文的答案,也许会成为你选择它的一个原因。
    • 使用 Java 语言开发,它的贡献者大多数都是中国人,源代码相对也比较容易读懂,你很容易对 RocketMQ 进行扩展或者二次开发。
    • RocketMQ 对在线业务的响应时延做了很多的优化,大多数情况下可以做到毫秒级的响应,如果你的应用场景很在意响应时延,那应该选择使用 RocketMQ。
    • 每秒钟大概能处理几十万条消息。

存在的问题:作为国产的消息队列,相比国外的比较流行的同类产品,在国际上还没有那么流行,与周边生态系统的集成和兼容程度要略逊一筹。

3、Kafka

    • 当下的 Kafka 已经发展为一个非常成熟的消息队列产品,无论在数据可靠性、稳定性和功能特性等方面都可以满足绝大多数场景的需求。
    • Kafka 与周边生态系统的兼容性是最好的没有之一,尤其在大数据和流计算领域,几乎所有的相关开源软件系统都会优先支持 Kafka。
    • Kafka 使用 Scala 和 Java 语言开发,设计上大量使用了批量和异步的思想,这种设计使得 Kafka 能做到超高的性能,大约每秒钟可以处理几十万条消息

存在的问题:Kafka 这种异步批量的设计带来的问题是,它的同步收发消息的响应时延比较高,因为当客户端发送一条消息的时候,Kafka 并不会立即发送出去,而是要等一会儿攒一批再发送,在它的 Broker 中,很多地方都会使用这种“先攒一波再一起处理”的设计。当你的业务场景中,每秒钟消息数量没有那么多的时候,Kafka 的时延反而会比较高。所以,Kafka 不太适合在线业务场景。

4、ActiveMQ

ActiveMQ 是最老牌的开源消息队列,是十年前唯一可供选择的开源消息队列,目前已进入老年期,社区不活跃。无论是功能还是性能方面,ActiveMQ 都与现代的消息队列存在明显的差距,它存在的意义仅限于兼容那些还在用的爷爷辈儿的系统。

 

总结

  • 如果说,消息队列并不是你将要构建系统的主角之一,你对消息队列功能和性能都没有很高的要求,只需要一个开箱即用易于维护的产品,我建议你使用 RabbitMQ。
  • 如果你的系统使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,那 RocketMQ 的低延迟和金融级的稳定性是你需要的。
  • 如果你需要处理海量的消息,像收集日志、监控信息或是前端的埋点这类数据,或是你的应用场景大量使用了大数据、流计算相关的开源产品,那 Kafka 是最适合你的消息队列。

 

标签:场景,队列,RabbitMQ,Kafka,选择,MQ,消息,RocketMQ
From: https://www.cnblogs.com/shog808/p/17048165.html

相关文章

  • python 队列
    将(a,b)这样格式的数据放在队列,,get取得时候报错img=cv.imread('../xavier/UDP/qqq.jpg')img_encode=cv.imencode('.jpg',img)[1]data_encode=np.array(img_encode)dat......
  • 为什么我放弃Java,选择Kotlin(靠特灵)?
    今天查了一下,竟然发现Oracle的JDK听说是收费了。也就是说,你要用于生产环境的话,Oracle一旦查到你,你就要交钱的。我本身是个穷光蛋,哪还有钱交给Oracle。为了避免繁琐的法律制......
  • rocketMQ中通过消息查看生成者
    在控制台,通过topic或者消息,默认只展示了消费者列表和具体的消费者,没有展示生产者的IP如何查看呢其实这是数据有,但是控制台没有展示后台:消息:输入topic查询最近一个小时......
  • 为什么使用消息队列?
    理解:但是比较核心的有3个:解耦、异步、削峰解耦:A把数据放到MQ中,BCD需要就取,不需要就不取。A不用管BCD的需求异步:BCD会把数据存入对应的MQ,A可以直接取,可达到异步缩减时......
  • 选择Fortify静态代码分析工具作为您的下一个SAST工具是正确的吗?
    嵌入式系统有很多,但真正能支持嵌入式软件开发人员的静态代码分析工具却很少。OpenText最近对MicroFocus(包括Fortify静态代码分析工具)的收购,重新引发了一个问题,即哪种静......
  • RabbitMQ学习笔记06:Topics
    参考资料:RabbitMQtutorial-Topics—RabbitMQ  前言在上一篇博文中我们使用direct类型的exchange改善了我们的日志系统,但是它仍然有一定的限制,它没有办法基于多个......
  • 高考在即,如何选择一个靠谱的专业?
    大学选专业无非受两个因素的影响:一是家庭选择二是兴趣使然。第一种家庭帮忙选择很多人都面临过,大学是人生的一个转折点,学什么专业更是一个至关重要选择。父母这个时候为孩子......
  • SpringBoot系列之Redis实现消息队列
    1前言本教程主要讲解的是如何在SpringBoot中用Redis实现消息队列。学习本教程的前提知识点是有SpringBoot、Redis、消息队列等基础。所以默认各位大佬已经掌握以上知识点。......
  • jQuery(小结,了解jQuery/jQuery的两把利器/选择器/属性/文本)
    视频加粗部分是笔试常考1.了解jQuery是什么:What?一个JS函数库:writeless,domore封装简化DOM操作(CRUD)/Ajax为什么用它:why?强大选择器:方便快速查......
  • MQTT 发布/订阅模式介绍
    MQTT发布/订阅模式发布订阅模式(Publish-SubscribePattern)是一种消息传递模式,它将发送消息的客户端(发布者)与接收消息的客户端(订阅者)解耦,使得两者不需要建立直接的联系也不......