这是我参与「第五届青训营 」笔记创作活动的第10天。
引言
今天的课程中老师以一些实际案例的问题(当系统面临庞大的请求量),从而引出消息队列,讲述了什么是消息队列,消息队列能够对系统起到什么作用——解耦,削峰,异步,日志处理。今天的课程主要是讲目前市面上流行的3个消息队列——Kafka、BMQ和RocketMQ。
一、本堂课重点内容
本堂课的知识点
- 消息队列的前世今生
- 消息队列-Kafka
- 消息队列-BMQ
- 消息队列-RocketMQ
二、详细知识点介绍
什么是消息队列
消息队列(MQ-Message Queue),指消息传输过程中保存消息的容器,从数据结构中的逻辑结构上看是一个队列,MQ是一个存储消息的中间件,消息的发送者被称为生产者,消息的接收者被称为消费者
消息队列的发展历程
- 1985年,TIB诞生(服务员于金融机构和新闻机构)
- 1993年,IBM的 MQ/WebSphere
- 1997年,微软发布MSMQ
- 2001年,Sun公司发布JMS,本质上是一套Java API
- 2004年,消息队列规范发布(AMQP),同年RabbitMQ面市
- 2010年,Linked开源Kafka
- 2011年,阿里研发的RocketMQ
- 2012年,Yahoo的Pulsar
Kafka
使用场景
搜索服务、直播服务、订单服务、支付服务
Kafka是一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台,它同时也是一款开源的基于发布订阅模式的消息引擎系统
Kafka 的特性(设计原则)
高吞吐、低延迟:kakfa 最大的特点就是收发消息非常快,kafka 每秒可以处理几十万条消息,它的最低延迟只有几毫秒。高伸缩性:每个主题(topic) 包含多个分区(partition),主题中的分区可以分布在不同的主机(broker)中。持久性、可靠性:Kafka 能够允许数据的持久化存储,消息被持久化到磁盘,并支持数据备份防止数据丢失,Kafka 底层的数据存储是基于 Zookeeper 存储的,Zookeeper 我们知道它的数据能够持久存储。容错性:允许集群中的节点失败,某个节点宕机,Kafka 集群能够正常工作高并发:支持数千个客户端同时读写
使用Kafka:创建集群-新增Topic-编写生产者(消息发送者)逻辑-编写消费者(消息接收者)逻辑
BMQ
兼容Kafka协议,存算分离,云原生消息队列
BMP进行重启,替换、扩容和缩容都是秒级
RocketMQ
使用场景
具有低延迟的特点,主要用于电商业务线,秒杀系统,商品的订单,库存和物流等业务场景下
RocketMQ是由阿里捐赠给Apache的一款低延迟、高并发、高可用、高可靠的分布式消息中间件
三、实践练习例子
- 当系统具有庞大的请求量时
如订单请求,可将请求先放置消息队列中,然后系统每次从消息队列中取出10个请求进行处理
- 当一个请求需要多个操作同时异步执行时且耗时较长
如下单请求,需要增加订单,减少库存,通知商家等操作,为了提高用户的满意度(缩短响应时间),这时可以把消息存至消息队列中,一旦保存成功,就提示用户下单成功,但实际上系统还在对此进行相应操作。
-
系统运行时需要存储日志
写日志,其实也相当于一个请求,也可以放置消息队列中
-
后期补充相应代码实例
四、课后个人总结
今天这堂课程学习了消息队列方面的知识,从三个角度理解了为什么需要消息队列:解耦、削峰和异步。学习到了目前流行的三个消息队列,后期需要针对不同的业务场景,去选择使用合适的消息队列,通过实际项目对消息队列的使用来加深自己的理解。
五、引用参考
[1] 青训营课程资料 【后端专场 学习资料五】第五届字节跳动青训营 - 掘金 (juejin.cn)