学习《消息队列高手课》后总结梳理

学前

在学习之前,实际对消息队列的一个认识总结:

1.消息队列有什么作用?

削峰,异步处理,减轻并发压力,代码解耦等

2.主要的消息队列有哪些?

rabbitmq,kafka 各有什么优劣势,因为实际生产环境用的不多,所以体验也不深刻。

3.消息队列的主要架构?

有生产者,消费者,队列,交换机,代理等

代理broker与交换机exchange的区别主要是

4.生产者如何确保消费者一定能收到消息?

增加确认机制

5.队列,交换机以及消息队列的元数据,是如何存储,保证消息队列重启后不丢失的?

将数据进行持久化

6.队列里面的消息是如何存储的,最大一个队列能存储多少条?

队列里面具体的消息也是支持持久化的,rabbitmq一个队列大概能存储10W条数据

7.消息队列的队列里面的生产者生成数据,消费者消费数据,全部都有日志记录吗?

可以通过配置交换机或者队列的tracing来进行日志记录

8.消息队列的集群有哪几种?

在消息队列的消息很大的时候,才会有集群的需求,而且消息队列的集群,也并不是真正的数据全部同步到每一个节点,保证可用性,而只是消息路由分发来保障性能的提升。

9.消息队列的消息是否可以设置有效期?

给消息队列的消息设置有效期是必要的,否则不能被消费的消息,一直积压,可能造成内存不足。

10.消息队列里面的消息能否设置优先级?

在同一个消息队列中,通过priority可以设置此消息的一个优先级,优先级高的会被放在最前面保证优先被消费。

11.消息队列一般是用什么语音编写的?

C语音,执行快,rabbitmq是使用一个比较小众的erlang语言,rocketmq是使用java开发的,kafka是用java和scala开发的。

12.消息队列为什么会有配置一个所占服务器内存占比多大的时候,自动宕机?

主要是考虑到占比过大,默认0.4会影响到服务器上其他服务,所以先牺牲自己。而且不会去检测什么条件下自己再重启(坑)。

13.当前对消息队列的认识架构图

14.我想从这个课程里面学到什么?

如何排查问题,更底层的逻辑梳理,源码的深刻理解

学后

消息队列生态系统全景图:

学完之后新的理解:

1.应用场景?

主要是分布式应用的多进程之前的通信,用来解决通信问题。分布式系统的最基础的问题就是通信。

2.消息队列的基本概念中:主题topic,订阅subscribe,分区partition?

主题:消息队列中生产者,消费者,队列,交换机都要与一个主题相关联起来,这个作为一个链接,来链接这些主体。

订阅:消息队列的发布/订阅。订阅了才能消费。

分区:消息队列通过分区进行空间的隔离,每个分区之间不会相互影响。是kafka才有的概念,相当于是rocketmq中的队列。

3.关于为什么要使用消息队列?

我上面罗列了几项,主要是说明异步和解耦,实际更重要的也有流量削峰填谷,在物联网应用中应该是有很多场景可以使用,目前我们还没有用到,后续可以加上。

4.消息队列的引入也会带来一定的缺点?

主要是本来是同步处理的,变成异步处理,增加了系统的复杂度,加大了相应时间,消息到底有没有被消费也是需要逻辑来进行控制。

5.常见的消息队列的比较:rabbitmq,rocketmq,kafka?

 6.消息队列中“队列模式”和“发布订阅模式”有什么区别?

“队列模式”:有生产者,消费者,队列;“发布订阅模式”有发布者,订阅者,和主题。生产者对应发布者,消费者对应订阅者,队列就相当于主题,区别就在于,“队列模式”一个消息只能被一个消费者消费,“发布订阅模式”一个消息可以多个订阅了相同主题的订阅者消费。就是消息能被一次消费还是多次消费的问题。可以粗略理解,“队列模式”是“分布订阅模式”的一种。

rabbitmq采用的是“队列模型”,rocketmq和kafka都是采用的“发布订阅模型”

7.消息队列中的事务是指?

主要是指在生产者和消费者之间数据的一致性。rocketmq实现事务,是通过mq server去主动回查生产者,这个是否应该被投递到消费者。最开始是一个半消息推送状态,只有其他处理完了,要提交确认了,才需要mq server 投递到消费者消费。

8.消息队列关于消息的重复性策略是什么样的?

主要有三种:

最多一次 <=1 不会重复,有可能会丢失数据

最少一次 >=1 会重复,但一定有一次

只有一次 =1 不多也不少就一次

实际要保证只有一次,会有复杂的机制。我们一般通过 最少一次+每次消费确保幂等性来实现

9.如果消息队列中一个消息消费时报错了,会阻塞其他队列的消费吗?

理论上,这里会有一个重试机制,如果重试多次,还是消费失败,那这里会有一个“死信队列”,专门存储这种消费失败的消息,以免阻塞其他消息的正常消费。

10.解决消息积压的办法?

【复制粘贴】

a.临时扩容消费端,通过硬件增加消费速度

b.服务降级,关闭一些不重要的服务,在消息生产者端限流

c.通过日志分析造成积压的原因,三阶段,消息发送是否有问题,消息存储是否有问题,消息消费是否有问题。根据定位解决问题

==========================

没有银弹

“好的架构不是设计出来的,而是演进出来的”

“技术不一定能完美解决存在的问题,但确实可以解决我们实际应用问题”

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值