消息队列必知必会
李玥
京东零售技术架构部资深架构师
已下架
172 人已学习
课程目录
已完结 5 讲
01 | 为什么需要消息队列?
02 | 该如何选择消息队列?
03 | 如何确保消息不会丢失?
04 | 如何处理消费过程中的重复消息?
05 | 消息积压了该如何处理?
消息队列必知必会
登录|注册

05 | 消息积压了该如何处理?

李玥 2020-01-14
你好,我是李玥。这节课我们来聊一聊关于消息积压的问题。
据我了解,在使用消息队列遇到的问题中,消息积压这个问题,应该是最常遇到的问题了,并且,这个问题还不太好解决。
我们都知道,消息积压的直接原因,一定是系统中的某个部分出现了性能问题,来不及处理上游发送的消息,才会导致消息积压。
所以,我们先来分析下,在使用消息队列时,如何来优化代码的性能,避免出现消息积压。然后再来看看,如果你的线上系统出现了消息积压,该如何进行紧急处理,最大程度地避免消息积压对业务的影响。

优化性能来避免消息积压

在使用消息队列的系统中,对于性能的优化,主要体现在生产者和消费者这一收一发两部分的业务逻辑中。对于消息队列本身的性能,你作为使用者,不需要太关注。为什么这么说呢?
主要原因是,对于绝大多数使用消息队列的业务来说,消息队列本身的处理能力要远大于业务系统的处理能力。主流消息队列的单个节点,消息收发的性能可以达到每秒钟处理几万至几十万条消息的水平,还可以通过水平扩展 Broker 的实例数成倍地提升处理能力。
而一般的业务系统需要处理的业务逻辑远比消息队列要复杂,单个节点每秒钟可以处理几百到几千次请求,已经可以算是性能非常好的了。所以,对于消息队列的性能优化,我们更关注的是,在消息的收发两端,我们的业务代码怎么和消息队列配合,达到一个最佳的性能。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言

精选留言(6)

  • 追风的沙滩裤
    先回答老师的问题,消费端批量消费等于一次拉取多条消息,再消费,实际上节省的是拉取次数,理论上讲会提高一些性能,但是单次拉取的业务处理时间会变长,个人感觉提升有限。
    问两个问题
    问题1:如果内存队列不可以,是否可以放入redis这种可持久化的简易队列呢,同样可以实现消费端并行消费,增大消费速度,虽然redis实现的队列也有丢消息的可能性,但是相比于内存队列靠谱很多。

    问题2:我也是JD的,JMQ的并行消费是如何实现的呢,或者说为什么并行消费不默认开启呢。
    2020-01-18
    1
  • Tate
    优化消费端代码,提高速度。横向扩展机器数量
    2020-01-16
    1
  • 毛毛郑
    批量消费适合对消息消费时延要求不高的场景。优点,提高整体处理效率,缺点,性能曲线不平滑单次处理会出现较高时延。
    2020-01-23
  • Ting.
    感谢分享
    2020-01-18
  • CycleGAN
    我觉得,这个消息放到一个内存队列然后并发处理是不是也能先用着,然后如果宕机了,像kafka可以回溯数据
    2020-01-16
    1
  • Jiao.
    感谢分享!
    2020-01-16
收起评论
6
返回
顶部