RocketMQ概述

RocketMQ概述

一、什么是消息队列?

消息队列(Message Queue),从广义上讲是一种消息队列服务中间件,提供一套完整的信息生产、传递、消费的软件系统。从字面意思看,由2部分组成,我们先讲Queue,再讲Message。

队列(Queue):是一种先进先出(First in First Out)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头,如下:

 

消息(Message):就是上面a1,a2,a3……an 的消息块。

把数据放到消息队列叫做生产者
从消息队列里边取数据叫做消费者

二、消息队列到底解决了什么问题?

  • 程序解耦

传统模式:每次有新系统接入,都需要调整代码。

消息队列模式:将消息写入消息队列服务,需要消息的系统自己从消息队列中订阅,从而系统A不需要做任何修改。

  • 异步处理

传统模式:一些非必要的业务逻辑以同步的方式运行,太耗费时间。

消息队列模式: 将消息写入消息队列,异步方式运行。

  • 削峰填谷

传统模式模式:并发量大的时候,所有的请求直接怼到数据库,造成数据库连接异常。

消息队列模式:系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。

  • 数据的最终一致性(非事务消息,跨行转账)

三、常见消息队列

时下流行的消息队列组件
消息队列名字 Apache ActiveMQ Apache Kafka Apache RocketMQ Apache Pulsar
 产生时间 2007 2012 2017   2018
 贡献公司 Apache  LinkedIn  Kafka,ActiveMQ  RocketMQ,Kafka
 特性

(1) 支持协议众多:AMQP,STOMP,MQTT,JMS

(2) 消息是持久化的JDBC

(1) 超高写入速率

(2) end-to-end 耗时毫秒级

(1) 万亿级消息支持

(2) 万级Topic数量支持

(3) end-to-end 耗时毫秒级

(1) 存储计算分离

(2) 支持SQL数据查询 

 管理后台 自带 独立部署  独立部署  无
 多语言客户端  支持   支持

Java

C++

Python

Go

C#

Java

C++

Python

Go

 数据流支持 不支持   支持  支持  支持
 消息丢失  理论上不会丢失  理论上不会丢失  理论上不会丢失  理论上不会丢失
 文档完备性  好  极好  极好  社区不断完善中
 商业公司实践  国内部分企业  LinkedIn  阿里巴巴  雅虎、腾讯、智联招聘
容错 无重试机制 无重试机制 支持重试,死信消息 支持重试,死信消息
顺序消息 支持 支持 支持 支持
定时消息 不支持 不支持 支持 支持
事务消息 不支持 支持 支持 支持
消息轨迹 不支持 不支持 支持 自己实现简单
消息查询 数据库中查询 不支持 支持 支持SQL
重放消息 不清楚 暂停重放 实时重放 支持
宕机 自动切换 自动选主 手动重启 自动切换
 
原文地址:https://www.cnblogs.com/zuoyang/p/14384124.html