消息队列/消息中间件(Message Queue):
在消息的传输过程中保存消息的容器(本质是暂存数据的容器)。
主要用途:
- 解耦
A系统发送数据到BCD三个系统,如果通过接口调用发送,那么他们之间的耦合度非常高,A会变得非常难以维护,如果BCD中的某个故障,A也会受影响。
可以引入MQ进行解耦------>A系统发送数据到MQ,DCD订阅MQ的数据进行处理,当B系统不需要再处理数据的时候只需要取消MQ的订阅即可,当新增的E系统需要处理数据的时候只需要订阅MQ即可,无论哪种方式都不需要再对A系统进行修改,如果BCD中的某个故障,A也不会受影响。
- 异步
解耦前A系统消耗时间是A+B+C+D。
解耦后 A 系统销毁时间是 A + 投放数据到消息队列的时间,BCD 再后台同时执行。 - 削峰
高峰期的大量请求先放入 MQ 暂存,再由 A 系统慢慢读取处理。
常见的消息队列:Kafka、RabbitMQ、RocketMQ
kafka:发布式发布-订阅消息传递系统(消息队列/消息中间件)
特点:
1,高吞吐量,低延时:每秒可以处理几十万条数据,延迟在几毫秒内。
2,可扩展(扩容),支持热扩展。
3,可靠性高,有备份机制保证数据不丢失。
4,高并发,支持数千个客户端同时读写操作。
概念:
broker:kafka集群中的每一个节点。
topic:主题,区分不同来源的数据。
partition:分区,topic中用于存储数据的地方。
offset:偏移量,数据在partition中的索引。
producer:生产者,向MQ中发布数据的程序。
customer:消费者,从MQ中读取数据的程序。
windows 版本的使用:
1, 启动 zookeeper
1,以管理员身份打开命令行窗口
2,切换到 D 盘
3, 进入 kafka 安装目录
4, 启动 zookeeper
bin\windows\zookeeper-server-start.bat config\zookeeper.properties
2,启动 kafka
1,以管理员身份打开命令行窗口
2, 切换到 D 盘
3,进入 kafka 安装目录
4,启动 kafka
bin\windows\kafka-server-start.bat config\server.properties
3, 创建 topic
1,以管理员身份打开命令行窗口
2, 切换到 D 盘
3,进入 kafka 安装目录
4,创建 test topic
bin\windows\kafka-topics.bat --create --bootstrap