当前位置: 首页 > 科技观察

四种常用MQ的优缺点及应用场景选择

时间:2023-03-20 00:18:29 科技观察

一、优缺点ActiveMQ官网地址:http://activemq.apache.org/官网介绍ApacheActiveMQ是最流行的开源、多协议,基于Java的消息代理。它支持行业标准协议,因此用户可以从多种语言和平台的客户端选择中受益。从使用JavaScript、C、C++、Python、.NET等的多个客户端进行连接。使用无处不在的AMQP协议集成多平台应用程序。使用基于WebSocket的STOMP在Web应用程序之间交换消息。使用MQTT管理您的物联网设备。支持您现有的JMS基础设施及其他基础设施。ActiveMQ提供了支持任何消息传递用例的强大功能和灵活性。优点万级单机吞吐量,ms级时效,高可用,基于主从架构的高可用,消息可靠性概率低,数据丢失缺点官方社区现在维护的ActiveMQ5.x越来越少,吞吐量高很少使用场景。Kafka官网地址:http://kafka.apache.org/官网介绍,超过80%的财富100强企业信任并使用Kafka。ApacheKafka是一个开源分布式事件流平台,被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型应用程序。优点性能优异,单机写入TPS在百万条/秒左右,最大的优点是吞吐量高。时效性和ms级可用性非常高。Kafka是分布式的。一份数据有多个副本,几台机器宕机,不会有数据丢失或不可用。消费者使用Pull方式获取消息,消息是有序的。通过control可以保证所有的消息都被消费,并且只消费一次;有一个优秀的第三方KafkaWeb管理接口Kafka-Manager;在日志领域比较成熟,被很多公司和多个开源项目使用;功能支持:功能比较简单,主要支持SimpleMQ功能,大数据领域的实时计算和日志采集被大量使用。缺点Kafka单机超过64个队列/分区,负载会明显增加。队列越多,负载越高,发送消息的响应时间越长。使用短轮询方法,实时性取决于轮询间隔。失败不支持重试;支持消息顺序,但是当一个broker宕机后,消息会乱序,社区更新慢;RocketMQ官网:http://rocketmq.apache.org/官网介绍由于ActiveMQ和Kafka无法满足阿里的需求,他们决定发明一种新的消息引擎来处理更广泛的用例集,从传统的发布/订阅场景到大容量实时零丢失容错交易系统。我们相信这个解决方案是有益的,所以我们想把它开源给社区。如今,超过100家公司在其业务中使用开源版本的RocketMQ。优点单机吞吐量10万级,可用性非常高,分布式架构,消息零丢失,MQ功能比较完善,分布式,扩展性好,支持10亿级消息累积,不会因为累积而导致性能下降,源码是java,大家可以自行阅读源码,定制自己公司的MQ。缺点是支持的客户端语言不多,目前有java和c++,其中c++不成熟;社区普遍活跃,MQ核心并没有实现JMS一些系统迁移一些系统需要修改很多代码RabbitMQ官网:https://www.rabbitmq.com/官网介绍RabbitMQ是最广泛部署的开源消息代理。RabbitMQ拥有数以万计的用户,是最受欢迎的开源消息代理之一。从T-Mobile到Runtastic,RabbitMQ被全世界的小型初创公司和大型企业所使用。RabbitMQ是轻量级的,易于在本地和云端部署。它支持多种消息传递协议。RabbitMQ可以部署在分布式和联合配置中,以满足大规模、高可用性的需求。RabbitMQ可在多种操作系统和云环境中运行,并为最流行的语言提供范围广泛的开发工具。优点由于erlang语言的高并发特性,性能更好;吞吐量达到10000级别,MQ功能比较完善,健壮,稳定,易用,跨平台,支持多种语言如:Python,Ruby,.NET,Java,JMS。一、MQ应用场景及选型1.ActiveMQActiveMQ支持任何消息用例的能力和灵活性,比较适合吞吐量比较小的小公司,或者MQ入门学习的首选。2、KafkaKafka的主要特点是基于Pull方式处理消息消费,追求高吞吐量。其初衷是用于日志的采集和传输,适用于产生大量数据的互联网服务的数据采集业务。推荐大公司选择,大数据分析必备。如果有日志收集功能,kafka绝对是首选。3、RocketMQ为金融互联网领域而生。对于可靠性要求高的场景,尤其是电商中的扣单、业务调峰,当大量交易涌入时,后端可能无法及时处理。RocketMQ在稳定性方面可能更值得信赖。这些业务场景已经在阿里双11测试过多次,如果你的业务有以上并发场景,建议选择RocketMQ。4、RabbitMQ结合了erlang语言本身的并发优势。性能不错,时效微秒级,社区活跃度比较高,管理界面使用起来很方便。如果你的数据量不是那么大,中小企业的优先选择功能是比较完善的。兔子MQ。