00:02
好,下面我们来看消息堆积与消息延迟啊,这个内容还是比较多的啊。首先我们看一下概念啊,什么是消息堆积,什么是消费延迟。那消息处理流程里边啊,如果consumer。它的消费速度跟不上我们生产者的发送速度。就是就是就是。呃,这个这个MQ里边未处理的消息会越来越多,也就是说这里面实际上是什么就进的多。出的少。对吧,那你你消费速度生产速度高。是吧,就是。呃,进的多。出的。出的少是吧。那么这部分消息就被称为呃,堆积消息,就在MQ里边没有处理的这个消息啊,就称为这个。
01:04
堆积消息。称为堆积消息啊。那么消息出现堆积。进而会造成消息延迟,就是你你这边堆积了,我就处理不了,就没处理它呀,所以就就会自然就会造成这个这个。呃,对,他处理的这个延迟是吧,这叫消费延迟。那么以下场景啊,需要重点关注我们的消费这个消息堆积和消费延迟问题。那哪哪哪两个啊,我们看哪两个场景,第一个就是我们的业务系统。上下游能力不匹配。啊,业务系统的上下游能力不匹配,造成这个这个持续的。这个堆积啊哈,而且还无法自行修复。
02:00
第二个业务系统对消息的。消费失性要求比较高。啊,即使是短暂的堆积,造成了消息延迟,消费延迟啊,造成了消费延迟。消费延迟也无法接受。所以这两种情况,他实际上第二种情况仍然属于什么,仍然属于这个上下游能力不匹配。啊,其实这两个可以合一块,只不过这个是什么实性要求要高一些。嗯,那么我们现在啊,就要对这个问题进行一个非常深入的分析。那么它产生。这种消息堆积,其实我们不用管消息延迟。你只要解决了消息堆积问题,那么这个消费延迟问题就解决了。所以我们现在关注点就在这个。这个这个消息的堆积上。那么,相易堆积产生的原因是什么呢?
03:03
大家看啊这个,呃,官方给我们提供了一个图啊,这是我们的MQ。然后呢,这是我们的啊,注意啊,这是consumer啊。这是什么?常轮巡批量拉局,注意啊,这这是效率比较高的一种。我们前面讲过铺。Push。哎,人家这个,因为这个代码是我们自己写的是吧?啊,人家用的什么啊long。长轮巡,长轮巡啊,本质上是一个瀑模型,所以你看consumer使用什么长轮巡铺模瀑瀑瀑模式,所以呃,我们有时候看一些其他资料,你会看到叫什么叫长轮循不模型。啊,长巡布模型和我们说的长轮循模型啊,是一个意思。那么这个里边啊。就是他是消费者。这边是MQ。它里边出现消息堆积。
04:00
可能会是哪儿的问题呢?刚才说了上海能力特,就说消费能力差,我们现在要深入的分析消费能力差,那到底是哪差?所以他说了,采用这种采用这种长轮询批量拉取方式,本身这已经是属于效率比较高的一种方式了,那在这个里边。我们说详细来分的话,它又有两个阶段,一个是我们的拉取。消息阶段,一个是消息的消费阶段。那我们来看拉取消息阶段啊,消息拉取。这样好一些是吧。消息拉取阶段是吧,那么卡通过长轮巡铺模式批量拉取的方式。从服务端获取消息。将垃圾到的消息缓存到本地缓存队列啊,我拉过来给它放到本地缓存对吧。对,拉是。
05:02
这个消费啊,在内网环境下会有很高的增量,就是你。这种拉取啊,它这个催吐量是很高的。啊,这个很高,是多高呢?是吧?啊,我们一会儿说说啊,呃,有很高的存储量,所以这一阶段一般不会成为消息堆积的瓶颈。刚才说了很高是多高?咱们比如说啊这个单线程。咱们以单线程单分区为例,就我这里边啊有一个分区啊,我这拉取的啊是。这个一个线程在做拉取单线程单分区。而且我拉取的这个机器啊,就我这个这个这个这个机器啊,Consumer这个机器它是属于什么低规格的机器,但是你注意啊,低规格的机器它也是个服务器啊。这是个服务器啊,对吧。那么他能够达到多少?能够达到几万的TPS。
06:02
那如果你这是什么,是多分区,当然你要多分区,那他这能达到多少几十万的GPS。所以这样啊,一般不会造成这个什么消息堆积。简单写一下啊。呃,就是一个啊。单线程。呃,单分区就是单Q单分区。在这。第一。低规格啊,但你要高规格。No。一规格server不要serve。就是我们,当然我们实际上说的是。好,下面。嗯,主机。当然这个低规格,呃,什么是低规格?什么是柜子?嗯,比如说我我刚才说了,毕竟是夫妻啊,我我是这个。
07:03
四核的啊,然后。八斤。啊,四核8G的。那那这就已经是低规格的了啊,低规格那么。嗯。呃,七可。达到这个。几万的。PS。所以你想如果呃如果呃是多个分区,要多分区。这个。多分区、多线程。是多个分区。我。现场。则可比。这个这个加上个形容词。轻松。达到。十分。所以他这啊,一般不会形成这种交易堆积,当然说这个TPS啊,呃,给大家简单的说一这个TPSTPS是什么东西啊。
08:09
NTPS。所以这这个意思上来说吧,这不是transaction啊,Per second是吧,就是每秒处理的这个事务数是吧,这事什么是事务。这失误就是啊,我们一个客户端,你像他吧,我客户端啊,我提交一个呃拉取请求,然后我就然后获取到这个拉取,呃,你你那个那个那个那个消息。从这开始计时,到这儿计时结束。整个这个过程就是一个TPS,当然这个过程那个时间我们知道也叫RT是吧,啊响应时间。那我们的TPS是什么?TPS就是你的疫苗里边。它包含多少RT,那就是它的TPS对吧。
09:00
所以它可以高达多少,高达几万几十万的GPS,就是一个请求一个响应啊,一个请求一个响应。能高达几十万的TPS,所以这里边啊,一般不会形成我们的消息堆积。那那那就剩下第二个啊,消息消费。就是在这在这啊这消息消费,你看这是提交。这个消费线程,我把这个消息啊提交给消费线程,这是我们的消费线程123是吧。卡将本地缓存的消息提交到消费线程中。使用业务消费逻辑对消息进行处理,处理完毕后获取到一个结果,那么这是一个真正的消息消费的过程。是吧,啊,我拿过来,然后处理,处理完了以后有一个结果。那么这就是一个处理过程。此时的消费能力。完全依赖于什么?注意这两点很重要,完全依赖于消息的。
10:05
消费耗时和消费。翠华。注意消费耗时。指的什么?消费并发度。又指的什么?他的消费能力啊,完全取决于消费耗,也就是我这一个。处理这一个消息,我用多长时间?这消费耗时,并发度呢?我有多少个这个消费线程。是吧?呃,由于如果由于啊,呃,业务处理逻辑复杂等等原因啊,导致处理单条消息的耗时比较长。则整体的消费吞吐量肯定不会高。此时就会导致consumer本地缓存。
11:02
啊,缓存队列达到了上限,就是他这满了,它满了就怎么样停止从服务端。从我们MQ就拉取消息。这停止拉血了。所以这就会被急。明白吧,也就是说。我们通过刚才这两个阶段的分析啊,其实我们可以得出一个结论。得出一个结论来写一下吧,啊,得出一个。什么结论?是这个不是不对。得出一个结论,什么呢?就是我们这样说的啊。不是说这个消息堆积吗。消息堆积。呃的主要。啊。平静。在于什么?客户端的。消费能力。而客户端的消费能力。
12:02
又由谁决定?就我们consumer,它的消费能力由谁决定?由由这个校外耗时和校外变化度。而消费能力。呃,理由。他。和他。决定。对不对,有他很大决定啊,所以。我们就要要解决消费这个这个堆积消息堆积问题,我们就要关注这两点。消费耗时和消费变化度不出了,当然这两个需要注意啊。那这两个,那那那我就直接夸夸,我给他指面扩展。是吧,呃,我给他增加这个现车数量,把现车数量调大。行不行,你注意啊,这两个是是实际上是有优先级的啊。呃,注意这个消费耗时的。
13:03
优先级。呃,要高于。呃,这个这个消费并发。就是你什么意思呢,就是你得先把这个。消费耗时,给他降下来。把消费耗时给他先降下来,然后你再说扩展的问题。就是你在保证了啊在。呃,在。保证了消费。呃,耗时的合理性。前提下。呃,再考虑这个。消费。并发。啊,这是我们最终得出的这个结论,所以大家看我们下边再分析你看。我们要分析什么,详细的来,再来分析消费耗时。
14:02
再来消费消费的,呃,再来分析这个消费的变滑度。是吧,我们一点一点往下来来来深入的分析啊。
我来说两句