消息队列原理与实战 | 青训营笔记

108 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

写在开头

本人是一个第一次参加字节青训营的学生,主要是简单记录一下自己学习的过程以及复习(详细的需要自己去看每天对应的课程),每天会发前一天课程的笔记或者是自己的思考

消息队列是什么

消息队列是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。

消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。

  • 解耦(比如去直播间点击商品,搜索行为记录会被消息队列接收存储到sql,如果没有消息队列的话数据库崩了就存储不了信息了)
  • 削峰(根据配置获取定量的请求进行处理)
  • 异步(通过异步处理下单慢的情况,发起订单之后消息队列接受到就返回给用户成功,而不是等到通知商家)
  • 日志处理(Log—消息队列—LogStash—ES—Kibana)

消息队列需要高吞吐,高并发,高可用。

kafka使用场景:

在微服务盛行的当下,MQ被使用的也是越来越多,一般常用来进行 「业务异步解耦」「解耦微服务」「流量削峰填谷」「消息分发」「分布式事务的数据一致性」

搜索,直播,订单,支付,点赞评论收藏,业务日志、用户行为数据、Metrics数据

有啥缺点

1、系统可用性降低

系统可用性在某种程度上降低。在加入MQ之前,你不用考虑消息丢失或者说MQ挂掉等等的情况,但是,引入MQ之后就需要去考虑了

2、系统复杂性提高

加入MQ之后,首先就是要具备有消息队列的相关知识,需要保证消息没有被重复消费、处理消息丢失的情况、保证消息传递的顺序性等等问题!

3、一致性问题

从上面的使用场景来看,消息队列带来的异步确实可以提高系统响应速度。但是,万一消息的真正消费者并没有正确消费消息怎么办?这样就会导致数据不一致的情况了!