介绍 rocketmq 框架与基本概念

1. 概念

1.1 namesrv(name server)

记录了 broker 集群信息,消息队列的信息以及 key-value 配置,见 RouteInfoManager 和 KVConfigManager。

可以由多个 namesrv 实例组成集群,但相互独立,没有信息交换。

1.2 broker

核心组件,负责存储所有的消息相关信息

  • 支持主从模式
  • 支持 master 写操作,只有当 master 读压力高于某个点(消息堆积),才会将读压力转给 salver
  • 主从切换
    4.5.0 版本之前无法做到主从切换。master 宕机,slaver
    4.5.0 版本开始支持 master 宕机后可以切换到 slaver(4.5.0版本)
  • broker 提供了两种方式刷盘方式
    • 同步刷盘:消息投放到 broker 之后,会在写入文件之后才返回成功
    • 异步刷盘:消息投放 broker 成功后即可返回,同时启动另外的线程来存储消息
  • 当发现broker压力较大时,可独立扩展 broker,只需要将 broker 地址注册到 namesrv 中即可
  • 当其中一台broker机器宕机后,namesrv 不会顷刻间摘除心跳检测(多次无心跳检测才会摘除),而生产者/消费者亦会有轮询的方式,在数次请求无果后,会从可用列表中将该broker剔除掉,并将请求转发到另外的机器上

1.3 producer

生产者的作用就是将消息发送到 MQ,一个生产者发送业务应用系统生成的数据给Broker
RocketMQ提供多范式发送:同步,异步,一站式(OneWay)

1.4 producer group

生产者组,是将同样角色生产者的分组在一起。
同一生产组的不同生产者实例都会被 broker 告知提交或者回滚事务,以避免事务后源生产者崩溃

1.5 consumer

消费消息,从用户应用的角度看,有两种类型的消费者:

  • PullConsumer 要客户主动拉取消息
  • PushConsumer 推送消息(实际上还是用拉取实现)

1.6 Message Model 消息模型

有两种

  • Clustering:同一消费组中只有一个消费者消费消息
  • Broadcasting:消息将发往所有这个 topic 的订阅者,同一消费组中所有消费者都消费消息

1.7 consumer group

消费组,把同样角色的消费者分组到一起,即消费者组

如果消息模型是 Clustering ,那么同一消息,同一个 group 下只有一个 consumer 消费,
如果是 Broadcasting,同一消息,同一个 group 下所有 consumer 消费。

1
2
3
4
例如有一消息 A, 有 4 个 consumer c0~c3, 其中
c0 c1 在 group1,消息模型是 clustering
c2 c3 在 group2,消息模型是 broadcasting
那么消息 A 会由 c0 或 c1 中的一个和c2,c3消费

1.8 message order

当使用DefaultMQPushConsumer时,需要确定消费消息的方式

大专栏  【阅读笔记】rocketmq 概念与架构 (一)>

  • orderly:消费者将锁定每个MessageQueue,以确保每个消息按顺序被使用
  • concurrently:消费者将同时使用这些消息

1.9 cluster

broker 集群,同一组 namesrv 可以注册多组 broker,每组 broker 就是一个 broker cluster。

cluster 通过 broker 的配置文件配置 brokerClusterName 指定

1.10 topic

消息按 Topic 组织,一个 Topic 可以存在于多个 Broker,一个 Topic 有多个 Consume Queue

1.11 consume queue

表示一个逻辑上的消息队列,这个队列一个元素就代表一个消息,一个元素包含了消息在 Commit log中的逻辑位置

1.12 offset

说明一个消息在 consume queue 中的下标,由0开始

2. 部署

部署方式有

  • 单 master 模式
  • 多 master 模式
  • 多 master 多 slave 异步复制模式
  • 多 master 多 slave 同步双写模式

单 master

只有一个 master节点
优点:配置简单,方便部署
缺点:这种方式风险较大,一旦 broker 重启或者宕机时,会导致整个服务不可用,不建议线上环境使用

多 master 模式

一个集群无 slave,全是 master,例如 2 个 master 或者 3 个 master
优点:配置简单,单个 master 宕机或重启维护对应用无影响。在磁盘配置为 RAID10 时,即使机器宕机不可恢复情况下,由与 RAID10 磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高。
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响
备注:当使用多 master 无slave 的集群搭建方式时,master 的 brokerRole 配置必须为 ASYNC_MASTER。如果配置为 SYNC_MASTER,则 producer 发送消息时,返回值的 SendStatus 会一直是 SLAVE_NOT_AVAILABLE

多 master 多 slave模式(异步复制)

每个 master 配置一个 slave,有多对 master-slave。采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为 master 宕机后,消费者仍然可以从 slave 消费,此过程对应用透明。不需要人工干预。性能同多 master 模式几乎一样。
缺点:Master 宕机,磁盘损坏情况,会丢失少量消息。

多 master 多 slave模式(同步双写)

每个 master 配置一个 slave,有多对 master-slave。采用同步双写方式,主备都写成功,向应用返回成功。
优点:数据与服务都无单点, master 宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,大约低 10%左右,发送单个消息的 RT 会略高。

4.5.0 之前主宕机后,备机不能自动切换为主机,4.5.0 开始支持自动切换功能

异步复制和同步双写的区别是,同步双写在写入消息后,会等待 slave 写完成才返回到应用。

【阅读笔记】rocketmq 概念与架构 (一)的更多相关文章

  1. 云时代架构阅读笔记六——Java内存模型详解(二)

    承接上文:云时代架构阅读笔记五——Java内存模型详解(一) 原子性.可见性.有序性 Java内存模型围绕着并发过程中如何处理原子性.可见性和有序性这三个特征来建立的,来逐个看一下: 1.原子性(At ...

  2. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  3. 《大象Think in UML》阅读笔记(三)

    Think in UML 阅读笔记(三) 把从现实世界中记录下来的原始需求信息,再换成一种可以知道开发的表达方式.UML通过被称为之概念化的过程来建立适合计算机理解和实现的模型,这个模型被称为分析模型 ...

  4. Angular快速学习笔记(2) -- 架构

    0. angular 与angular js angular 1.0 google改名为Angular js 新版本的,2.0以上的,继续叫angular,但是除了名字还叫angular,已经是一个全 ...

  5. 《Java多线程编程实战指南(核心篇)》阅读笔记

    <Java多线程编程实战指南(核心篇)>阅读笔记 */--> <Java多线程编程实战指南(核心篇)>阅读笔记 Table of Contents 1. 线程概念 1.1 ...

  6. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  7. Mongodb Manual阅读笔记:CH6 聚合

    6 聚合 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  8. Mongodb Manual阅读笔记:CH4 管理

    4 管理 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  9. QCon 2015 阅读笔记 - 其他精选主题

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 QCon 2015 阅读笔记 - 其他精选主题 以前分享过两个主题:移动开发 ...

随机推荐

  1. leetcode 690.员工的重要性

    题目: 给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id. 比如,员工1是员工2的领导,员工2是员工3的领导.他们相应的重要度为15, 10, 5.那么员工1的数据结 ...

  2. Python笔记_第四篇_高阶编程_高阶函数_1.map和reduce

    1. map()函数: 原型:map(fn,lsd) 参数1是函数 参数2是序列 功能:将传入的函数一次作用在序列中的每一个元素.并把结果作为一个新的Iterator返回.其实map函数就是一个for ...

  3. 《Docekr入门学习篇》——Docker简介

    Docker简介 什么是docker Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2. ...

  4. 翻译——2_Linear Regression and Support Vector Regression

    续上篇 1_Project Overview, Data Wrangling and Exploratory Analysis 使用不同的机器学习方法进行预测 线性回归 在这本笔记本中,将训练一个线性 ...

  5. leetcode中二分查找的具体应用

    给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置. 你的算法时间复杂度必须是 O(log n) 级别. 如果数组中不存在目标值,返回 [ ...

  6. 寒假day06

    今天完善了毕设的数据抽取功能,新增了几点: 1.已经抽取过的表由系统给出相应提示 2.生成数据抽取记录并展示 3.界面优化

  7. ZJNU 1422 - 碰撞的小球

    完全弹性碰撞可以视作互相穿过 所以直接考虑只有单个小球的时候,从板子上滑下所需要的时间即可 最后以30000为界分开流读入与缓冲区优化的io方法 //Case4用缓冲区io优化会WA??? /* Wr ...

  8. [Scoi2016]背单词(trie+贪心)

    题意:重新解释一下题意吧(题意晦涩难懂) 给定n个单词,你可以按照顺序学习,当学习这一单词时,这个单词是第x个要学习的单词,需要的代价分三类: 1.若存在其他单词是其后缀没被学习,则代价为n2 2.若 ...

  9. 使用meshgrid生成热图和单位向量场

    需求: 生成 中heatmap unit vector field 目前的数据: 图像的shape, 关键点的x,y , heatmap的半径R 思路: 如果使用for循环来判断距离,会很慢,如果预先 ...

  10. 配置完aop不能返回json

    遇到一个bug,配置了记录controller层的aop,后来发现是因为我aop是写在controller层(在springmvc的容器中)而开启aop配置却写在spring中,所以不起作用,需要在s ...