RocketMQ个人笔记 持续更新中12.12

官方文档:https://github.com/apache/rocketmq/tree/master/docs/cn

一. MQ(Message Queue)核心功能

1. MQ介绍

1.1). 为什么要用MQ

消息队列是一种“先进先出”的数据结构

image-20201212091330521

1.1.1 应用解耦

系统的耦合性越高,容错性就越低。以电商应用为例,用户创建订单后,如果耦合调用库存系统,物理系统,支付系统,任何一个子系统故障或者因为升级等原因不可用,都会造成下单操作异常,影响用户体验。

image-20201212091712631

使用消息队列解耦合,系统的耦合性就会提高了。比如物流系统发生故障,需要几分钟才能来修复,在这段时间内,物流系统要处理的数据被缓存到消息队列中,用户的下单操作正常完成。当物流系统回复后,补充处理存在消息队列中的订单消息即可,终端系统感知不到物流系统发生过几分钟故障。

image-20201212091802737

1.1.2 流量削峰

image-20201212091948522

应用系统如果遇到系统请求流量的瞬间猛增,有可能将系统压垮。有了消息队列可以将大量请求缓存起来,分散到很长一段时间处理,这样可以大大提高系统的稳定性和用户体验。

image-20201212092313916

一般情况,为了保证系统的稳定性,如果系统负载超过阈值,就会阻止用户请求,这会影响用户体验,而如果使用消息队列将请求缓存起来,等待系统处理完毕后通知用户下单完毕,区样思不能下单体验要好。
处于经济考量目的:
业务系统正常时段的QPS如果是1000,流量最高峰是10000,为了应对流量高峰配置高性能的服务器显然不划算,这时可以使用消息队列对峰值流量削峰.

1.1.3 数据分发

image-20201212092801326

通过消息队列可以让数据在多个系统更加之间进行流通。数据的产生方不需要关心谁来使用数据,只需要将数据发送到消息队列,数据使用方直接在消息队列中直接获取数据即可

image-20201212093005979

1.2). MQ的优点的缺点

优点:解耦,削峰,数据分发

缺点:

  1. 系统可用性降低

    ​ 引入外部依赖越多,系统稳定性越差。一旦MQ宕机,就会对业务造成影响。

    ​ 如何保证MQ的高可用?

  2. 系统复杂度提高

    MQ的加入大大增加了系统的复杂度,以前系统间是同步的远程调用,现在是通过MQ进行异步调用。如何保证消息没有被重复消费?怎么处理消息丢失情况?那么保证消息传递的顺序性?

  3. 一致性问题

    A系统处理完业务,通过MQ给B、C、D三个系统发消息数据,如果B系统、C系统处理成功,D系统处理失败。如何保证消息数据处理的一致性?

1.3). 各MQ产品比较

常见的MQ包括Kafka,ActiveMQ,RabbitMQ,RocketMQ

特性 ActiveMQ RabbitMQ RocketMQ Kafka
开发语言 java erlang java scala
单机吞吐量 万级 万级 10万级 10万级
时效性 ms us ms ms以内
可用性 高(主从架构) 高(主从架构) 非常高(分布式架构) 非常高(分布式架构)
功能特性 成熟的产品,在很多公司得到应用;有较多的文档,各种协议支持较好 基于erlang开发,所以并发能力很强,性能极其好,延时很低;管理界面较为丰富 MQ功能比较完备,扩展性佳 只支持主要的MQ功能,像一些消息查询,消息回溯等功能没有提供,毕竟是为大数据准备的,在大数据领域应用极其广泛。

2. RocketMQ环境搭建

1). 环境准备

2). 安装RocketMQ

3). 启动RocketMQ

4). 测试RocketMQ

5). 关闭RocketMQ

3. RocketMQ高可用集群搭建

1). 集群各角色介绍

2). 集群搭建方式

3). 双主双从集群搭建

4). 集群监控平台

4. 各种消息放松样例

1). 同步消息

2). 异步消息

3). 单向消息

4). 顺序消息

5). 批量消息

6). 过滤消息

7). 事务消息

二. 项目实战

三. 高级功能和源码分析

posted @ 2020-12-12 10:17  void-white  阅读(85)  评论(0)    收藏  举报