前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RocketMQ设计架构以及工作流程

RocketMQ设计架构以及工作流程

作者头像
关忆北.
发布2022-05-05 15:08:25
4000
发布2022-05-05 15:08:25
举报
文章被收录于专栏:关忆北.关忆北.

RocketMQ架构图

image-20220313212918945
image-20220313212918945
消息生产者

发送消息方式:

  • 同步发送,消息发送至Broker后,需得到Broker的成功响应后才可进行下一个数据包发送。常用于重要消息业务场景,如通知邮件、营销短信等。
  • 异步发送,消息发送至Broker后,响应以异步方式返回,无需得到成功响应信息即可进行下一个数据包发送,失败后会进行重试发送、持久化信息,常用于对响应时间敏感场景,如批量发货等。
  • 单向发送,仅发送消息,并不关注发送结果的场景,失败后消息丢失。常用于对可靠性要求不高的场景,如日志收集。
image-20220307101310283
image-20220307101310283
消息消费类型
  • 集群消费:消息仅被消费一次,消息重投不保证消费到同一台服务上。
  • 广播消费:每条消息需要被集群下的每个消费者处理。
消息消费方式
  • Pull模式:拉取待消费列表消息
  • Push模式:基于Pull模式封装,线程拉取拉取到消息后,提交到消息消费线程池,再次向服务器尝试拉取消息。
Producer负载均衡

Producer端在发送消息时,会先根据Topic找到指定的TopicPublishInfo,根据TopicPublishInfo使用随机递增取模算法获取一个MessageQueue发送消息。

image-20220315214223582
image-20220315214223582
Consumer负载均衡

RocketMQ官方文档解释: 在RocketMQ中,Consumer端的两种消费模式(Push/Pull)都是基于拉模式来获取消息的,而在Push模式只是对pull模式的一种封装,其本质实现为消息拉取线程在从服务器拉取到一批消息后,然后提交到消息消费线程池后,又“马不停蹄”的继续向服务器再次尝试拉取消息。如果未拉取到消息,则延迟一下又继续拉取。在两种基于拉模式的消费方式(Push/Pull)中,均需要Consumer端知道从Broker端的哪一个消息队列中去获取消息。因此,有必要在Consumer端来做负载均衡,即Broker端中多个MessageQueue分配给同一个ConsumerGroup中的哪些Consumer消费。

RocketMQ消费端负载均衡主要是RebalanceImpl类实现的。

rebalanceByTopic(final String topic, final boolean isOrder)方法的集群模式为例:

image-20220314144710623
image-20220314144710623
image-20220314144731236
image-20220314144731236
image-20220314144743019
image-20220314144743019
image-20220314144822661
image-20220314144822661
  1. 根据topic获取消息消费队列
  2. 所有topic对应的所有消费者Id
  3. 对消费消息排序、对消费者id排序
  4. 获取负载均衡策略,默认平均分配算法,返回分配后的mqSet
  5. 更新消息处理队列
  6. 移除在processQueueTable 并且不存在于mqSet中的消息队列
  7. 把mqSet放入processQueueTable中
  8. 发起Pull请求
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RocketMQ架构图
    • 消息生产者
      • 消息消费类型
        • 消息消费方式
          • Producer负载均衡
            • Consumer负载均衡
            相关产品与服务
            负载均衡
            负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档