概述
Kafka | RabbitMQ | RocketMQ | |
---|---|---|---|
资料文档 | 中 有kafka作者自己写的书,网上资料也有一些 | 多 有一些不错的书,网上资料多 | 少 没有专门写rocketmq的书,网上的资料良莠不齐,官方文档很简洁,但是对技术细节没有过多的描述 |
开发语言 | Scala | Erlang | java |
支持的协议 | 自己的一套,基于TCP | AMQP | 自己定义的一套 |
消息存储 | 内存、磁盘、数据库。支持大量堆积。 | 内存、磁盘。支持少量堆积。 | 磁盘。支持大量堆积。 |
消息事务 | 支持 | 支持 | 支持 |
负载均衡 | 支持 | 对负载均衡的支持不好。 | 支持 |
集群方式 | 天然的‘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,客户端多个线程可以同时发送请求,连接会被复用,减少性能开销。 |
参考文章:[消息中间件]几种常用的消息中间件对比
最后
以上就是安静火龙果为你收集整理的消息队列—主要消息中间件优势对比的全部内容,希望文章能够帮你解决消息队列—主要消息中间件优势对比所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复