这是我参与「第五届青训营 」伴学笔记创作活动的第 8天
本节课程主要介绍了消息队列的发展及其原理,并列举了其中的一些常用的消息队列进行比较说明。比如Kafka、BMQ、RocketMQ等。对于我的水平来说,理清相关概念,达到相关认识就是我的进步。
基本概念
-
消息队列是什么?
根据个人理解,消息队列(Message Queue),是应用程序和应用程序之间的通信方法。一些应用当生产者,发送消息到MQ,一些应用当消费者,从MQ中读取消费消息。 -
消息队列有什么作用?
异步、解耦、削锋、日志处理
所谓异步,就是某些操作不需要等待结果才继续往下执行,这就是异步处理。例如,用户注册之后,需要发送发送注册邮件通知。使用MQ,只需要在处理完用户信息之后,给MQ发送个消息即可,邮件服务监听MQ的任务消息,根据消息进行发送即可。主线程处理完用户消息不需要等待邮件发送完毕,就可以继续字形其他业务操作。
所谓解耦, 就是把用户注册和邮件发送两个功能分开了,实现代码上不干涉。
所谓削锋, 一般在秒杀、搞活动中使用。对于一时间内大量的请求,系统课能处理不过来导致崩溃,使用MQ,可以把所有要处理的消息放入消息队列,然后按照系统的能力,分批获取消息执行,避免了同一时间过量请求。 -
接下来介绍了主要的三种消息队列Kafka、BMQ、RocketMQ
-
Kafka和RocketMQ各有什么优势?适用于什么场景?
Kafka的最大优势就在于它的高吞吐量、并且性能很高,支持集群部署,但是Kafka有可能会造成数据丢失,因为收到消息不直接写入物理磁盘,并且功能单一,仅支持支持收发消息。一般应用场景为处理用户的行为日志的采集的传输
RocketMQ是阿里巴巴开源的消息中间件,吞吐量很高,性能高,支持集群,有各种高级功能,比如延迟消息,消息回溯等,目前基本没有什么缺点。应用场景为金融互联网领域,比如天猫双十一等。
课后思考
- 消息队列的应用场景有哪些?
需要异步、解耦、削锋、日志处理的场景 ,比如天猫双十一活动。 - Kafka的哪些Feature让其可以支撑大吞吐写入的场景?
消息优先写入磁盘缓冲区、消费者采用Pull方式获取消息、kafka是分布式的等 - Kafka Consumer Rebalance的流程简述?
在成功rebalance之后,组内所有consumer都需要定期向coordinator发送Heartbeat请求,而每个consumer也是根据Heartbeat请求的响应中是否包含REBALANCE_IN_PROGRESS来判断当前group是否开启了新一轮rebalance
后面的思考题待补充。
个人总结
这节课认识了许多消息队列相关的概念、作用,了解了Kafka、BMQ、RocketMQ三种消息队列的优劣与应用场景,对于具体实践的话,我们到实战项目中再试试吧!