【RocketMQ每日一问】RocketMQ5.0POP消费模式如何实现的?
2024-01-02 23:35:06
1 什么是 Pop 消费
RocketMQ 5.0 中引入了一种新的消费模式:Pop 消费模式。
我们知道 RocketMQ 原来有两种消费模式:Pull 模式消费和 Push 模式消费,其中 Push 模式指的是 Broker 将消息主动“推送”给消费者,它的背后其实是消费者在不断地 Pull 消息来实现类似于 Broker “推”消息给消费者的效果。
新引入的 Pop 消费模式主要是用于 Push 消费时将拉消息的动作替换成 Pop 。Pop 消费的行为和 Pull 消费很像,区别在于 Pop 消费的重平衡是在 Broker 端做的,而之前的 Pull 和 Push 消费都是由客户端完成重平衡。
2 POP消费流程
- 向 Broker 端发送请求,切换消息拉取模式为 Pop 模式
- 重平衡服务执行重平衡,此时已经切换为 Pop 模式,所以是向 Broker 端发起请求,请求中带有重平衡策略,Broker 会返回重平衡的结果。
- 重平衡完毕之后开始拉取消息,拉取消息服务发送?
POP_MESSAGE
?请求给 Broker,获取一批消息 - 消费这批消息
- 对成功消费的消息,发送 ACK 请求给 Broker
- 服务端收到 Pop 请求后,会先在 Queue 维度上加锁,保证同一时间只有一个消费者可以拉取该队列的消息。
- 随后服务端会在存储中查询一批消息,将这批消息的构建的?
CheckPoint
?保存在 Broker 中,以便与 ACK 的消息匹配。 CheckPoint
会先被保存在内存中,一般来说消息消费很快,所以在内存中就能够与 ACK 消息匹配成功后删除。如果在一段时间(默认 3s)内没有匹配成功,它将会从内存中被删除,转入磁盘等待匹配。- 对于 ACK 消息也一样,它先被放入内存中匹配,如果在内存中找不到对应的?
CheckPoint
,也会放入磁盘。
CheckPoint
?的存在目的是与 ACK 的消息匹配,并将没有匹配的消息重试。
CheckPoint
?的?ReviveTime
?就是它这批消息需要被尝试重试(唤醒)的时间。
3.POP消费解决什么问题
1.消费端不对等问题,
2.重平衡造成堆积问题
3.消费端数量大于队列数问题
文章来源:https://blog.csdn.net/jianjun_fei/article/details/135344459
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!