当前位置: 首页>后端>正文

RocketMQ工作原理——消息的消费

消费者从Broker获取消息的方式有两种:pull拉取方式和push推动方式。消费者组对于消息消费的模式又分为两种:集群消费Clustering和广播消费Broadcasting。

推拉消费模式

拉取式消费

Consumer主动从Broker中拉取消息,主动权由Consumer控制。一旦获取了批量消息,就会启动消费过程。不过,该方式的实时性较弱,即Broker中有了新的消息时消费者并不能及时发现并消费

由于拉去时间间隔是由用户指定的,所以在设置该间隔时需要注意平稳:间隔太短,空请求比例会增加;间隔太长,消息的实时性太差

推送式消费

该模式下Broker收到数据后会主动推送给Consumer。该消费模式一般实时性较高。

该消费类型是典型的发布订阅模式,即Consumer向其关联的Queue注册了监听器,一旦发现有新的消息到来就会触发回调执行,回调方法是Consumer去Queue中拉取数据。而这些都是基于Consumer与Broker间的长连接。

对比

  • pull:需要应用去实现对关联Queue的遍历,实时性差;但便于应用控制消息的拉取
  • push:封装了对关联Queue的遍历,实时性强,但会占用较多的系统资源

消费模式

广播模式

RocketMQ工作原理——消息的消费,第1张

广播消费模式下,相同Consumer Group的每个Consumer实例都接收同一个Topic的全量消息。即每条消息都会被发送到Consumer Group中的每个Consumer

集群消费

RocketMQ工作原理——消息的消费,第2张

集群消费模式下,相同Consumer Group的每个Consumer实例平均分摊同一个Topic的消息。即每条消息只会被发送到Consumer Group中的某个Consumer

消息进度保存

  • 广播模式:消费进度保存在Consumer端。因为广播模式下Consumer Group中每个Consumer都会消费所有消息,但他们的消费进度时不同的。所有Consumer各自保存各自的消费进度。
  • 集群模式:消费进度保存在Broker中。Consumer Group中的所有Consumer共同消费同一个Topic中的消息,同一条消息只会被消费一次。消费进度会参与到消费的负载均衡中,故消费进度是需要共享的。下图是Broker中存放的各个Topic的各个Queue的消费进度
RocketMQ工作原理——消息的消费,第3张

https://www.xamrdz.com/backend/3ay1922894.html

相关文章: