MQ技术选型

本文对比了RabbitMQ、Kafka和RocketMQ三大消息中间件,包括它们的语言实现、开发者、吞吐量、功能、应用场景、持久化、管理界面、事务支持、发送和消费消息方式、特色、集群搭建、权限粒度、读写性能、重试和死信处理、集群特性和消息清理策略。RabbitMQ适合中小规模项目,Kafka适合大数据处理,RocketMQ适合大规模且需要事务和顺序消息的场景。
摘要由CSDN通过智能技术生成

最新个人总结版:
最近笔记都不在博客上,排名下降这么快,是时候发点干货了:

RabbitMQKafkaRocketMQ
语言ErlangScalaJava
开发者SpringApacheAli
单机吞吐量十万十万
功能丰富简单丰富
场景订单支付超时,关闭订单;
Spring Cloud Bus
Apache Druid、Spring Cloud Bus订单支付、取消、秒杀
持久化Erlang自己的数据库文件文件
管理界面官方有官方没有官方有
文档和示例文档丰富文档丰富示例丰富
集群搭建HAProxy或者LVS,加上KeepAlivedZookeeperNameServer
事务发送消息有事务模式、确认模式。XA。消息都发送成功或失败。消息都发送成功,才能被消费者消费。XA。消息都发送成功或失败。消息都发送成功,才能被消费者消费。事务消息
发送消息字节数组、交换机、路由键Key、Value、Topic、Partition、TimeStamp字节数组、Topic
消费方式支持Pull、Push只支持Pull支持Pull、Push
消费消息队列Topic、正则Topic、通配符表达式、多个Tag
特色虚拟主机;交换机:直连交换机、主题交换机、广播交换机,默认交换机,备份交换机,死信交换机、延时交换机Partition事务消息、顺序消息、延时消息、单向消息、写队列、读队列
消费者组(模式:轮询、指定、粘滞)消费者组(模式:集群、广播)、生产者组
TopicTopic交换机Topic里是Partition。Partition里是Segment。一个Segment对应3个文件。Topic可以设置写队列数量、读队列数量。所有Topic对应commitlog。
权限粒度虚拟主机
写得快顺序写、批量写、压缩写Linux group commit
读得快二分法、稀疏索引、顺序读、批量读、send file零拷贝memory map零拷贝
重试重回队列重试Topic
死信死信交换机死信Topic
集群特征集群分镜像队列集群和非镜像队列集群。镜像队列集群的队列同步,队列消息同步。Topic的Partition分主从。分主从。主从连接到同一个NameServer。
集群读写分磁盘节点、内存节点;内存节点读写数据;磁盘节点备份数据。只有Partition Leader能读写。主能读写。可以有一个从支持读。
初始Leader指定磁盘节点、内存节点。Topic第一个Partition的Leader随机,其它Partition的Leader往后推,推到头,再到另一端。保证同一个Broker,同一个Topic里的Partition Leader尽可能少。brokerId配置0是master,1是slave。
选举LeaderZookeeper选出Broker Controller。Broker Controller用Pacific从ISR选出Partition Leader。NameServer用Raft选举Leader。
消息清理策略是删除或者压缩,默认删除。
删除或者压缩针对的都是Segment。
每5分钟扫描过期消息。默认168小时过期,过期就标记为删除,每15秒,检查并删除标记为删除的Segment。
同时,可以设置日志大小上限,超过了,就删除最老的Segment。
压缩:
消息的key、value相同,就只存一份。
默认存放72小时,每天4点删除过期消息。磁盘空间使用超过75%,会删除过期文件;超过85%即使未过期也可能被删除;超过90%,拒绝写入消息。
  • Push模式:很难掌握消息推送的时机和速率,因为consumer的消费速率不同。
  • Pull模式:consumer可以根据自己的状况选择拉取消息的时机和速率,缺点在于如果服务端没有可供消费的消息,将导致consumer不断轮询,浪费资源。

————————————————————————————————————

下面是以前写的,没有上面的全,可以略过。 

消息队列比较-rabbitmq/kafka/rocketmq/ONS - McKay - 博客园

ActiveMQ推出时间更早,功能丰富,但吞吐量不如Kafka、RocketMQ,时效性不如RabbitMQ,可靠性不如RabbitMQ、Kafka和RocketMQ,社区活跃度低,不建议使用。

RabbitMQRocketMQKafka
语言ErlangJavaScala、Java
二次开发
社区活跃度
负责开发的公司Pivotal(负责Spring的公司)阿里Apache
单机吞吐量万级十万级十万级
时效性微秒级毫秒级毫秒级
可用性高(主从架构)很高(分布式架构)很高(分布式架构)
功能丰富度

Kafka是Apache用Scala和Java开发,功能丰富度低,吞吐量高,适合大数据领域的日志采集,实时计算等。

RabbitMQ目前是Spring对应的公司负责,Erlang开发,不适合二次开发,社区活跃度高,时效性高,吞吐量不如RocektMQ和Kafka,适合中小规模的项目。

RocketMQ是阿里参考Kafka用Java开发,加入了适合阿里应用场景的优化,适合二次开发,吞吐量高,适合更大规模项目,但社区活跃度不够高,如果阿里停止维护,需一定技术实力从源码自我维护。

参考:

https://gper.club/articles/7e7e7f7ff3g58gc6

RocketMQ与Kafka对比(18项差异)_xcc的博客-CSDN博客_rocketmq和kafka区别

Kafka、RocketMQ、RabbitMQ的优劣势比较_“假装、她是个有灵魂的程序员” —— Go Big Or Go Home-CSDN博客_rocketmq和rabbitmq的区别

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风铃峰顶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值