文章目录

  • Rocketmq整体架构
    • namesrv
    • broker
    • producer & consumer
  • 通信方式


Rocketmq整体架构

RocketMQ-初体验RocketMQ(01)_RocketMQ初体验中 对 RocketMQ 架构图做了一个大体的介绍

接下来,我们再细说一下RocketMQ的架构

如上图

整体由4部分组成

  • namesrv
  • broker
  • producer
  • consumer

namesrv

当broker服务启动后,会向namesrv注册信息,比如broker中的 主题、消费偏移量、队列、ip、端口等,由broker的心跳发送到namesrv。

broker cluster中的每一个节点都会注册到namesrv上。

比如 你有4个broker节点,2个namesrv,那么注册如下

这种情况的话,即使一个namesrv节点挂了,剩下的一个namesrv节点仍然包含所有的broker信息。

需要注意的是: namesrv是无状态的, namesrv之间不会相互通信,跟zk是不一样的。一个namesrv挂了,不会影响另外一个namesrv,这俩namesrv是没有关联的。


broker

来南下每个broker的组成吧

每一个broker节点 ,储存消息,都会对应一个commitlog , commitlog 负责存储真实的消息的内容。

broker中的每个topic , 如果不设置的话, 默认创建4个队列, 队列编号 0 , 1 ,2 , 3. 每个队列都会对应一个持久化文件 。

当producer向broker中的topic发送消息的时候, 如果发现队列没有创建持久化文件,会自动创建。 然后该队列的持久化信息都会存放在该持久化文件中。

每个broker下面会创建一个consumerOffset.json文件. 这个json文件用来记录当前你消费节点已经消费的数据位置,即消费的偏移量。这个也是需要持久化的。 这个偏移量的来源 是 consumer 来上报的。(如下图)

consumer从broker中拉取消息后,要进行消费,消费了多多少消息,要把消费这些对应的这些偏移量上报到broker上去。 主要是为了什么呢? ---->最大可能的避免消息重复的推送。


producer & consumer

Q: producer & consumer 到底选择跟哪个broker去连接,去消费哪个broker中的消息?

A: producer & consumer也是无状态的,每一个producer之间 ,每一个consumer之间都不会通信, 每个producer和consumer内部都有自己的一套负载均衡的算法 ,默认的选择策略: 已发送的消息数量对queuecount取mod .

消费者的两种消费模式主要有两种: 推跟拉

  • 拉取式消费(Pull Consumer):Consumer消费的一种类型,应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消费过程。

  • 推动式消费(Push Consumer):Consumer消费的一种类型,该模式下Broker收到数据后会主动推送给消费端,该消费模式一般实时性较高。

pull的方式,由客户端来主动获取,通过定时任务或者需要的时候从broker端获取,这种方式用的比较少。 如果消息量比较少, 堆积也不会太多,对安全性要求不高的应用,可以考虑。

与此对应的另外一种push方式:

push的方式,在RocketMQ中其实也是基于pull模式的一个深度封装,consumer对broker进行一个长轮询,一直监听broker中的数据,就好像是broker主动推送给consumer似的。


通信方式

producer/consumer broker namesrv 通信方式

producer/consumer 给 broker发送消息/消费消息,或者从 namesrv拉取消息 , 通信是基于netty的方式,优先选用epoll方式,如果操作系统不支持epoll的话,会选择NIO。


RocketMQ-初体验RocketMQ(05)_RocketMQ架构解读相关推荐

  1. rocketmq 初体验(二)AsyncProducer No name server address, please set it.

    AsyncProducer No name server address, please set it. 报错log No name server address, please set it. 原因 ...

  2. RocketMQ-初体验RocketMQ(01)_RocketMQ初体验

    文章目录 RocketMQ的由来 RocketMQ 版本 RocketMQ 基本概念 消息模型 消息生产者(producer) 消息消费者(Consumer) 主题(Topic) 代理服务器(Brok ...

  3. RocketMQ-初体验RocketMQ(03)_RocketMQ多机集群部署

    文章目录 环境准备 参考配置 集群搭建 130主机 broker 配置文件 启动namesrv 启动broker Master 和 broker Slave 131主机 broker 配置文件 启动n ...

  4. RocketMQ-初体验RocketMQ(06)-使用API操作RocketMQ ,理解RocketMQ的存储结构

    文章目录 RocketMQ集群基本信息 目标 知识预习 发送方式 发送结果 环境搭建 使用Java API操作RocketMQ-Simple Message Step1. pom.xml增加依赖和bu ...

  5. ros 消息队列与缓冲区_Spring Boot消息队列系统:RocketMQ初入门

    前言 来啦老铁! 笔者学习Spring Boot有一段时间了,截至目前已实践.总结了26篇Spring Boot系列学习文章,感兴趣的同学可以关注专题一起学习吧! Spring Boot全家桶 在上一 ...

  6. rocketmq 顺序消费_必须先理解的RocketMQ入门手册,才能再次深入解读

    推荐阅读一下下 2020年后想跳槽?MQ.ZK.Nginx.Kafk等分布式技术你都掌握了? 阿里架构师推荐学习的<RabbitMQ实战指南>,渣渣的你都看过吗? RocketMQ入门手册 ...

  7. RocketMQ-初体验RocketMQ(11)-过滤消息_自定义Java类筛选消息

    文章目录 概述 集群信息 项目结构 生产者 自定义类 消费者 测试结果 概述 RocketMQ-初体验RocketMQ(10)-过滤消息_SQL92表达式筛选消息 通过SQL92的方式,消费者可以过滤 ...

  8. rocketmq 订阅组_必须先理解的RocketMQ入门手册,才能再次深入解读

    推荐阅读一下下 2020年后想跳槽?MQ.ZK.Nginx.Kafk等分布式技术你都掌握了? 阿里架构师推荐学习的<RabbitMQ实战指南>,渣渣的你都看过吗? RocketMQ入门手册 ...

  9. rocketmq 如何保证高可用_RocketMq容灾、高可用方案

    一.实现分布式集群多副本的三种方式 1.1 M/S模式 即Master/Slaver模式.该模式在过去使用的最多,RocketMq之前也是使用这样的主从模式来实现的.主从模式分为同步模式和异步模式,区 ...

最新文章

  1. GitHub for Windows使用教程(一)安装配置
  2. Codeforces Round #722 (Div. 2)
  3. MongoDB 4.6.1 c++ driver 编译
  4. mysql查询操作的5种子句
  5. Element-UI-简单介绍---Element-UI工作笔记001
  6. apache kafka系列之server.properties配置文件参数说明
  7. ASP.NET中的回调技术(CallBack)
  8. android java_Android开发和JAVA开发有什么区别?
  9. 泰勒·斯威夫特(Taylor Swift)最好听歌曲专辑,喜欢的可以下载保存
  10. 小草客户端android2.2.4 g,小草客户端android2.2.5-小草app安卓版客户端android2.2.5预约 v2.2.5-优盘手机站...
  11. VS2015如何添加头文件
  12. 怎么理解函数式编程?
  13. 用创新思考模式制作人工智能机器人模型
  14. 搜狗微信爬虫获取文章信息
  15. 第5组UI 让你的界面酷炫到底-ViewAniMator之ViewSwitcher、ImageSwitcher(图像切换器)、TextSwitcher(文本切换器)、ViewFlipper
  16. VsCode使用Git连接Gitee和GitHub
  17. Reading Ingestion —— Bigtable: A Distributed Storage System for Structured Data
  18. 浅谈FTP(文件传输协议)
  19. 上海汉得校园招聘面试经历
  20. Windows下U盘安装Ubuntu双系统

热门文章

  1. kotlin内联函数let、with、run、apply、also
  2. C++ >>和<<读写文本文件
  3. tf.reverse_sequence
  4. list排序_「肘后备急码」- C#对象List排序
  5. tableau实战系列(七)-服务器日志清理和级别设置
  6. Python推荐博客、网站学习
  7. python实现三叉树_使用python代码实现三叉搜索树高效率”自动输入提示”功能
  8. Python入门100题 | 第011题
  9. Excel宏的易错点
  10. 图解一维卷积层(PyTorch)