简介
RokcetMQ使用java语言开发,由阿里巴巴研发,目前作为Apache的开源项目,经历过阿里双十一的流量冲击,是一款高性能分布式中间件。
主流mq简单对比
特性 | ActiveMQ | Kafka | RocketMQ | RabbitMq |
---|---|---|---|---|
客户端支持 | Java,.NET,C ++等 | Java,Scala等 | Java,C ++,Go | 语言无关 |
协议规范 | 推送模型,支持OpenWire,STOMP,AMQP,MQTT,JMS | 拉模型,支持TCP | 拉模型,支持TCP,JMS,OpenMessaging | 推拉模式,AMQP |
顺序消息 | 独占消费者或独占队列可以确保顺序 | 确保分区内消息的顺序 | 确保消息的严格排序,并能够优雅地向外扩展 | 独占消费者或独占队列可以确保顺序 |
消息调度 | 支持 | 不支持 | 支持 | 支持 |
批量消息 | 不支持 | 支持异步生产者 | 支持同步避免消息丢失 | 不支持 |
消息广播 | 支持 | 不支持 | 支持 | 支持 |
消息过滤 | 支持 | 支持,您可以使用Kafka流来过滤消息 | 支持基于SQL92的属性过滤器表达式 | 不支持 |
消息重试 | 不支持 | 不支持 | 支持 | 支持 |
消息持久化 | 使用JDBC和高性能日志(如levelDB、kahaDB)支持非常快的持久性 | 高性能文件存储 | 高性能和低延迟的文件存储 | 内存和文件存储 |
消息追溯 | 支持 | 支持的时间戳和偏移量两种表示 | 支持偏移量表示 | 未知 |
消息优先级 | 支持 | 不支持 | 不支持 | 支持 |
高可用及故障转移 | 支持,取决于存储,如果使用kahadb,它需要一个ZooKeeper服务器 | 支持,需要ZooKeeper服务器 | 支持主从模型,不需要其他工具包 | 支持主从模型 |
消息追踪 | 不支持 | 支持 | 支持 | 支持 |
配置难度 | 默认配置是低级的,用户需要优化配置参数 | Kafka使用键-值对格式进行配置。这些值可以通过文件或编程方式提供。 | 开箱即用,用户只需要注意几个配置 | 配置文件、环境变量、运行时参数 |
管理及可视化界面 | 支持 | 支持,使用终端命令公开核心指标 | 支持,富web和终端命令,以公开核心指标 | 支持使用终端命令和丰富的后台可视化界面 |
基本概念
针对上面的对比图,我们下面了解一些基础概念。
PUSH(推模式):由消息中间件主动地将消息推送给消费者。
优点:数据变更,客户端立马能感知到。
缺点:会造成消息堆积甚至缓冲区溢出。
PULL(拉模式):由消费者主动向消息中间件拉取消息。
优点:由客户端发起请求,故不存在推模式中数据积压的问题。
缺点:会增加消息的延迟,即消息到达消费者的时间有点长。
JMS(Java Message Service):JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。
https://baike.baidu.com/item/JMS/2836691?fr=aladdin
AMQP(Advanced Message Queuing Protocol):一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。
https://baike.baidu.com/item/AMQP
OpenMessaging:云原生,与供应商无关的开放式规范,用于分布式消息传递。(RocketMQ)
http://openmessaging.cloud/
SQL92:是数据库的一个ANSI/ISO标准。它定义了一种语言(SQL)以及数据库的行为(事务、隔离级别等)。
https://baike.baidu.com/item/SQL92/6333507?fr=aladdin
网友评论