【RocketMQ每日一问】RocketMQ5.0POP消费模式如何实现的?

1 什么是 Pop 消费

RocketMQ 5.0 中引入了一种新的消费模式:Pop 消费模式。

我们知道 RocketMQ 原来有两种消费模式:Pull 模式消费和 Push 模式消费,其中 Push 模式指的是 Broker 将消息主动“推送”给消费者,它的背后其实是消费者在不断地 Pull 消息来实现类似于 Broker “推”消息给消费者的效果。

新引入的 Pop 消费模式主要是用于 Push 消费时将拉消息的动作替换成 Pop 。Pop 消费的行为和 Pull 消费很像,区别在于 Pop 消费的重平衡是在 Broker 端做的,而之前的 Pull 和 Push 消费都是由客户端完成重平衡。

2 POP消费流程

  1. 向 Broker 端发送请求,切换消息拉取模式为 Pop 模式
  2. 重平衡服务执行重平衡,此时已经切换为 Pop 模式,所以是向 Broker 端发起请求,请求中带有重平衡策略,Broker 会返回重平衡的结果。
  3. 重平衡完毕之后开始拉取消息,拉取消息服务发送 POP_MESSAGE 请求给 Broker,获取一批消息
  4. 消费这批消息

  1. 对成功消费的消息,发送 ACK 请求给 Broker
  2. 服务端收到 Pop 请求后,会先在 Queue 维度上加锁,保证同一时间只有一个消费者可以拉取该队列的消息。
  3. 随后服务端会在存储中查询一批消息,将这批消息的构建的 CheckPoint 保存在 Broker 中,以便与 ACK 的消息匹配。
  4. CheckPoint会先被保存在内存中,一般来说消息消费很快,所以在内存中就能够与 ACK 消息匹配成功后删除。如果在一段时间(默认 3s)内没有匹配成功,它将会从内存中被删除,转入磁盘等待匹配。
  5. 对于 ACK 消息也一样,它先被放入内存中匹配,如果在内存中找不到对应的 CheckPoint,也会放入磁盘。

CheckPoint 的存在目的是与 ACK 的消息匹配,并将没有匹配的消息重试。

CheckPoint 的 ReviveTime 就是它这批消息需要被尝试重试(唤醒)的时间。

3.POP消费解决什么问题

1.消费端不对等问题,

2.重平衡造成堆积问题

3.消费端数量大于队列数问题

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丸子呢

致力于源码分析,期待您的激励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值