我是靠谱客的博主 安静火龙果,最近开发中收集的这篇文章主要介绍消息队列—主要消息中间件优势对比,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

各种消息中间件对比
 KafkaRabbitMQRocketMQ

资料文档

有kafka作者自己写的书,网上资料也有一些

有一些不错的书,网上资料多

没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简洁,但是对技术细节没有过多的描述

开发语言ScalaErlangjava
支持的协议自己的一套,基于TCPAMQP自己定义的一套
消息存储

内存、磁盘、数据库。支持大量堆积。

内存、磁盘。支持少量堆积。磁盘。支持大量堆积。
消息事务支持支持支持
负载均衡支持对负载均衡的支持不好。支持
集群方式天然的‘Leader-Slave’无状态集群,每台服务器既是Master也是Slave支持简单集群,'复制'模式,对高级集群模式支持不好。常用 多对'Master-Slave' 模式,开源版本需手动切换Slave变成Master
管理界面   
可用性   
消息重复   

吞吐量TPS

按批次发送消息和消费消息比较大 

订阅形式和消息分发

基于topic以及按照topic进行正则匹配的发布订阅模式供了4种:direct, topic ,Headers和fanout。基于topic/messageTag以及按照消息类型、属性进行正则匹配的发布订阅模式。

顺序消息

支持不支持支持
消息确认支持支持支持

消息回溯

   
消息重试   
并发度

一个线程一个消费者,kafka限制消费者的个数要小于等于分区数,如果要提高并行度,可以在消费者中再开启多线程,或者增加consumer实例数量。

极高

1.本身是用Erlang语言写的,并发性能高。

2.可在消费者中开启多线程,最常用的做法是一个channel对应一个消费者,每一个线程把持一个channel,多个线程复用connection的tcp连接,减少性能开销。

3.当rabbitmq队列拥有多个消费者的时候,队列收到的消息将以轮询的分发方式发送给消费者。每条消息只会发送给订阅列表里的一个消费者,不会重复。这种方式非常适合扩展,而且是专门为并发程序设计的。

4.如果某些消费者的任务比较繁重,那么可以设置basicQos限制信道上消费者能保持的最大未确认消息的数量,在达到上限时,rabbitmq不再向这个消费者发送任何消息。

1、rocketmq限制消费者的个数少于等于队列数,但是可以在消费者中再开启多线程,这一点和kafka是一致的,提高并行度的方法相同。

修改消费并行度方法

a) 同一个 ConsumerGroup 下,通过增加 Consumer 实例数量来提高并行度,超过订阅队列数的 Consumer实例无效。

b) 提高单个 Consumer 的消费并行线程,通过修改参数consumeThreadMin、consumeThreadMax

2、同一个网络连接connection,客户端多个线程可以同时发送请求,连接会被复用,减少性能开销。

参考文章:[消息中间件]几种常用的消息中间件对比

最后

以上就是安静火龙果为你收集整理的消息队列—主要消息中间件优势对比的全部内容,希望文章能够帮你解决消息队列—主要消息中间件优势对比所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部