RocketMQ

RocketMQ 是一款高性能,高吞吐量,低延迟,高可用,高可靠的分布式消息中间件

RocketMQ架构

RocketMQ角色

  • Producer,消息发送者

  • Consumer,消息接受者

    1. 消费者与 Broker Master ,Slave都建立连接
    2. 与NameServer 建立长连接
  • Broker,暂存和传输消息

    1. Broker对应一台服务器
    2. 指定相同的BrokerName表示集群 BrokerId 0表示master,非0表示slave
    3. 每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有 NameServer。
  • NameServer,管理Broker,无状态

    1. producer 与NameServer 保持长连接,定期从 NameServer获取 Topic路由信息,向Broker master写
    2. Consumer 与NameServer 保持长连接,定期从 NameServer获取 Topic路由信息. Consumer与Broker 保持长连接,从Broker master,slave1消费消息
    3. NameServer不去连接别的机器,不主动推送消息
    4. 单个Broker与所有NameServer 进行定时注册
  • Topic,区分消息的种类

  • Message Queue,Topic的分区,并行发送和接收消息

RocketMQ特性

  1. 订阅与发布,
    1. 消息的订阅是指某个消费者关注了某个topic中,带有某些tag的消息。
  2. 消息顺序
  3. 消息过滤,Broker端根据tag过滤
  4. 消息可靠性
  5. 至少异常,每个消息必须投递一次
  6. 回溯消费,时间维度回退消费进度
  7. 事务消息,应用事务和发送消息定义到全局事务中
  8. 定时消息,
  9. 消费重试
  10. 消息重投,可能会造成消息重复
  11. 流量控制
  12. 死信队列

消费模式

Push和Pull模式本质都是采用消费端主动拉取的方式,即consumer轮询从 broker拉取消息。

  • pull模式
    • Push方式里,consumer把长轮询的动作封装了,并注册MessageListener监听器,取到消息后, 唤醒MessageListener的consumeMessage()来消费
    • 优点实时性高,缺点消费者处理能力有限,造成消息堆积
  • push模式
    • 优点主动权掌握在消费端自己手中,根据自己的处理能力量力而行;缺点就是如何控制Pull的 频率。

安装

mqnamesrv
mqbroker -n localhost:9876

高级特性

提高Consumer的处理能力

  1. 提高消费并行度,增加Consumer实例
  2. 以批量方式进行消费,设置Consumer的 consumeMessageBatchMaxSize这个参数
  3. 检测延时情况,跳过非重要消息

消息存储

顺序写可以达到 600MB/s,RocketMQ采用顺序写入

  • CommitLog:消息主题及元数据的存储主体
  • ConsumeQueue: 逻辑消费队列,提高消息消费的性能。ConsumeQueue 作为消费消息的索引
    • 8个字节的 CommitLog物理偏移量
    • 4字节的消息长度
    • 8字节 tag hashCode
  • IndexFile: 根据key或时间区间查询消息,底层文件系统实现了 HashMap结构

同步复制和异步复制

  • 同步复制
    同步复制方式是等Master和Slave均写 成功后才反馈给客户端写成功状态;在同步复制方式下,如果Master出故障,Slave上有全部的备份数据,容易恢复,但是同步复制会 增大数据写入延迟,降低系统吞吐量。

  • 异步复制
    异步复制方式是只要Master写成功 即可反馈给客户端写成功状态。在异步复制方式下,系统拥有较低的延迟和较高的吞吐量,但是如果Master出了故障,有些数据因 为没有被写 入Slave,有可能会丢失;

消息重试

  • 顺序消息 消费失败,消费队列会每秒重试一次,应用出现消息消费阻塞
  • 无序消息 消费失败,设置 ConsumeConcurrentlyStatus.RECONSUME_LATER 返回状态达到重试效果,只对集群消费生效,广播方式无效。

死信队列

RocketMQ中消息重试超过一定次数后(默认16次)就会被放到死信队列中

  1. 一个死信队列对应一个 Group ID, 而不是对应单个消费者实例。
  2. 一个死信队列包含了对应 Group ID 产生的所有死信消息,不论该消息属于哪个 Topic。

顺序消息

部分有序

  1. 发送要把同一业务ID的消息发送 到同一个Message Queue
  2. 消费过程中,要做到消费者从同一个Message Queue 消费消息。消费端通过使用MessageListenerOrderly

事务消息

2阶段提交

  1. 一阶段事务消息对用户不可见对消息的Topic和Queue等属性进行替换, 同时将原来的Topic和Queue信息存储到Half消息的属性中,
  2. Commit和Rollback操作以及Op消息的引入,Op消息标识 事务消息已经确定的状态(Commit或者Rollback)
  3. Op消息的存储和对应关系,Op消息的内容为对应的Half消息的存储的Offse
  4. Half消息的索引构建,二阶段构建索引时需要读取出Half消息,并将Topic和Queue替换成真正的目标的 Topic和Queue

NameServer作用

  1. NameServer 用来保存活跃的 broker 列表,包括 Master 和 Slave 。
  2. NameServer 用来保存所有 topic 和该 topic 所有队列的列表。
  3. NameServer 用来保存所有 broker 的 Filter 列表。
  4. 命名服务器为客户端,包括生产者,消费者和命令行客户端提供最新的路由信息。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 一、RocketMQ 是什么? 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点; Produc...
    IT巅峰技术阅读 1,596评论 0 1
  • 0、为什么要用RocketMQ? 消息队列是一种“先进先出”的数据结构 应用场景 解耦 削峰填谷 数据分发 其应用...
    zhemehao819阅读 159评论 0 0
  • RocketMQ 前世今生 RocketMQ在阿里内部叫做Metaq(最早名为Metamorphosis,中文意思...
    左师兄zuosx阅读 9,878评论 0 1
  • @[toc] 1. RocketMQ简单介绍 1.1 概念 1.1.1 消息模型(Message Model)  ...
    szhlcy阅读 846评论 0 0
  • 一、 关键特性 1 消息发送和消费 1)消息发送者步骤分析: 创建消息生产者producer,并制定生产者组名 指...
    TiaNa_na阅读 1,911评论 0 2