RocketMQ系列之初识MQ

前言

消息中间件是目前互联网项目应用特别广泛的一个中间件,主要用于处理异步操作,系统之间的应用解耦,以及并发下的流量削峰等等应用场景,今天开我们就进入消息中间件MQ的讲解,主流的MQ有很多,我们只需要掌握其中一种就可以了,基本都大同小异,OK,正式开始今天的MQ之旅。

 

什么是MQ?

MQ(Message Queue)消息队列,是一种应用程序之间通信的方式,可以理解为一个存放消息的队列,生产者负责生产消息,并将生产的消息存放入队列中,消费者负责从队列中获取对应的消息进行消费,生产者无需关心消息是否被消费,只需要关心是否将消息正确的存入队列即可,同样消费者也无需关心消息从哪生产或者说消息是否生产成功,只需要正确的处理消息即可,以这样一种方式实现了生产者和消费者之间的完全解耦。

RocketMQ系列之初识MQ_第1张图片

 

MQ有什么作用?

异步:可以将某些业务逻辑,进行异步处理,加快用户响应时间

解耦:可以将某些业务逻辑拆分,通过MQ进行多个系统之间业务解耦

RocketMQ系列之初识MQ_第2张图片

流量削峰:在并发情况下,可以将瞬间流量访问写入MQ,然后开启多个消费者处理消息,达到减压削峰的效果

RocketMQ系列之初识MQ_第3张图片

日志处理:日志收集直接写入消息队列,消费者端订阅消费处理日志,生成可视化监控数据

RocketMQ系列之初识MQ_第4张图片

 

主流的MQ有哪些?

主流的MQ有很多,网上的总结对比也有很多在,这里我就你不去一一列举了,下面列几个业界比较火的MQ简单对比下:

特性

ActiveMQ

RabbitMQ

RocketMQ

Kafka

API完备性

多语言支持

支持

支持

JAVA

支持

单机吞吐量

万级

万级

万级

十万级

消息延迟

毫秒

微秒

毫秒

毫秒

可用性

高(主从)

高(主从)

非常高(分布式)

非常高(分布式)

消息丢失

理论上不会

理论上不会

文档完备性

社区活跃度

成熟度

成熟

成熟

比较成熟

成熟

集群

支持

支持

支持

支持

负载均衡

支持

支持

支持

支持

特点

功能齐全、被大量开源项目使用

Erlang语言开发,性能很好

各环节分布式扩展设计,主从HA,支持上万个队列,性能很好

吞吐量很高

评价

优点:成熟的产品,已经在很多公司得到应用,各种协议支持较好,有多种语言成熟的客户端。

缺点:会出一些莫名其妙的问题,会丢消息,笔试和上千队列,目前社区活跃度不高,5.X后维护较少。

优点:由于erlang语言的特性,性能很好,管理界面较为丰富,在互联网公司都有较大规模的应用。

缺点:erlang语言难度大,不支持动态扩展

优点:模型简单,接口易用,阿里内部大规模成功应用。

缺点:产品较新,文档比较缺乏,没有实现JMS接口规范

日志领域应用广泛

 

RocketMQ是什么?

RocketMQ是一款分布式、队列模型的消息中间件,天生自带分布式,负载(这里后面会介绍),生产者Producer和消费者Consumer以及队列都可以分布式,Producer向队列轮流发送消息,队列的集合称为主题Topic,Consumer有2种消费模式:

  • 广播消费:一个Consumer实例消费这个Topic对应的所有队列

  • 集群消费:多个Consumer实例平均消费这个Topic对应的所有队列

工作模式如下图所示:

RocketMQ系列之初识MQ_第5张图片

物理部署结构如下图:

RocketMQ系列之初识MQ_第6张图片

 

RocketMQ的特点?

  • 能够保证严格的消息顺序

  • 提供丰富的消息拉取模式

  • 高效的订阅者水平扩展能力

  • 实时的消息订阅机制

  • 亿级消息堆积能力

  • 较少的依赖

 

RocketMQ的优势?

  • 强调集群无单点,可扩展,任意一点高可用,水平可扩展

  • 海量消息堆积能力,消息堆积后,写入低延迟

  • 支持上万个队列

  • 消息失败重试机制

  • 消息可查询

  • 开源社区活跃

  • 比较成熟稳定,经过阿里多次双十一验证

 

MQ的简单认识就到这,下节开始我们正式讲解如何玩转RocketMQ,欢迎阅读。

 

你可能感兴趣的:(消息队列)