我是少侠露飞。学习塑造人生,技术改变世界。
引言
从本篇开始,少侠将会和大家一起进入消息队列(MQ)的学习。学习MQ之前,首先必须要掌握它的应用场景(不能为了用而用),然后继续深入关键特性。
1 MQ的应用场景
1.1 MQ应用场景:解耦
- 语言间解耦
- 应用间解耦
屏蔽实现细节
异步通信,做到上下游各自扩展
以投递通知的方式,上游不关注下游,不必同时在线 - 地域之间解耦:数据复制、传递
1.2 MQ应用场景:广播
- RPC:发送次数由消费者决定
- MQ:生产者只发送一次
1.3 MQ应用场景:流量削峰
Produce rate > Consume rate
- MQ可能出现短暂积压
- 实际场景:商品秒杀,热点评论,外卖订单,批量导入
2 MQ的基本特性
2.1 消息的完整性
2.1.1 不丢失数据
要保证MQ不丢失数据,一般从两个方面考虑:
- 数据可靠
通过副本replica保证,如上图所示,每条消息保存了三份,生产者投递到leader里,然后每个leader有两个follower,这些follower从leader中拉取最新的消息数据(这个过程类似与MySQL主从模式下slave通过binlog日志从master同步数据)。数据有三份,并且保存在不同的服务器上,这样的话即使宕机了一台,也不会出现数据的丢失,从而保证了数据的可靠性。 - 投递可靠
数据到服务器上保存是可靠的,那还有可能发送的时候失败了啊,这怎么保证呢?别怕,正经的MQ都有投递的ACK机制。简单来说,就是Producer投递完消息到leader之后,会根据返回值判断是否成功投递,如果出现失败的话就会重新投递。这样从Producer端保证了投递的可靠性。
2.1.2 消费一次
记录消费的位置
至少消费一次(at least once)
- 正常情况只消费一次
业务幂等
2.1.3 顺序消费
全局有序
- 绝对的全局序:单生产线程+单队列+单消费线程
局部有序
- hash一类消息至一个分区下
大致有序
- 时间窗口期之间是有序
2.2 MQ支撑的业务场景
可靠VS性能
- 高吞吐&低可靠
- 高可靠&低吞
容量:集群,可横向扩展
特性:延迟消息、事务消息、回溯、死信
2.3 容灾
- 节点容灾:某个数据分片不可用
- 集群容灾:某个节点不可用
- 机房容灾:某个机房不可用
- 地域容灾:某地域的机房均不可用
小结
消息队列的基本认识到这里就结束了,大家看其实也没太难,重点注意MQ的应用场景可能会在面试中被考察。从下节开始,我们就正式进入Kafka的相关学习。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/13477.html