rocketmq原理解析

author author     2023-03-14     706

关键词:

参考技术A

RocketMQ原理解析

说明:

NameServer是没有状态的,即NameServer中的Broker和topic等状态信息(通过其他角色上报获取)都是保存在内存中的,不会持久化存储(可通过配置实现),集群可以横向扩展。主要功能如下:
a.接收Broker(master和slave)启动时的注册路由信息;
b.为producer和consumer提供路由服务,即通过topic名字获取所有broker的路由信息;
c.接收broker发送的心跳信息,如果心跳的时间戳过期NameServer关闭与broker的连接。

Broker向NameServer注册topic配置信息,配置信息格式如下:

Broker的消息存储
Rocketmq的消息的存储是由consumeQueue和 commitLog 配合完成的,commitLog保存消息的物理数据,consumeQueue是消息的逻辑队列,类似于索引,存储的是指向物理存储的地址。在一个Broker上,只有一个commitLog,所有consumeQueue共享同一个commitLog。

假如topic的名字是Topic-Lance,配置的读写队列有queue-1和queue-2,那么Topic-Lance和queue-1组成一个consumeQueue,Topic-Lance和queue-2组成另一个consumeQueue。

假如broker-A(包含queue-0,queue-1,queue-2), broker-B(包含queue-0,queue-1)两台broker机器都配置了Topic-Lance,那么broker启动的时候,注册到NameServer的Topic-Lance的路由有broker-A-queue-0,broker-A-queue-1,broker-A-queue-2,broker-B-queue-0,broker-B-queue-1共5个consumeQueue。

为了提高读写性能,commitLog采取顺序写,随机读(通过pagecache机制批量从磁盘读取到内存,加速后续的读取速度),consumeQueue大部分读入内存(如果consumeQueue因为重启等因素丢失,可以通过commitLog重建)

a.Producer发送消息时(必须制定topic),首先从本地的Producer集合中获取topic->broker的路由信息,如果没有,则从nameserver中获取topic->broker路由,并缓存到本地集合;
b.定时从nameServer获取最新的topic路由信息;
c.Producer定时将Producer的group信息发送到对应的broker上;
d.Producer发送消息到Master的broker上,通过Broker的主从复制copy到slave的broker上。

发送实现轮询方式:

a.向NameServer注册Consumer;
b.定时从NameServer获取topic路由信息;
c.定时清理下线的broker;
d.向所有broker发送心跳;
e.动态调整消费线程池;
f.负责负载均衡服务RebalanceService。

RocketMQ是基于pull模式拉取消息,consumer做负载均衡并通过长轮询向broker拉消息,长轮询拉取消息后回调MessageListener接口实现完成消费。

关于RocketMQ长轮询可参考: https://www.jianshu.com/p/48dbc9eee890

RocketMQ默认保存3天,commit log刷盘间隔,默认1秒

......

默认情况下是失败3次重试,可通过retryTimesWhenSendFailed定义重试次数;

1.Exception的情况,一般重复16次 10s、30s、1mins、2mins、3mins等,可以通过设置transactionCheckMax设置;
2.超时情况(Consumer端没有返回CONSUME_SUCCESS,也没有返回RECONSUME_LATER),MQ会无限制的发送给Consumer端,默认超时时间时15分钟。

rocketmq原理及解析

一.什么是消息队列RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里参考Kafka特点研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、... 查看详情

rocketmq原理解析-nameserver

Namesrv名称服务,是没有状态可集群横向扩展。1.每个broker启动的时候会向namesrv注册2.Producer发送消息的时候根据topic获取路由到broker的信息3.Consumer根据topic到namesrv获取topic的路由到broker的信息一:Namesrv功能:    接... 查看详情

rocketmq原理及解析

1如何保证消息的可靠性传输生产者丢失数据:生产者设置同步提交消息,并且手动提交,将消息同步刷盘到从节点后在返回成功;broker:主从复制,同步刷盘;消费端:消费重试,只有返回consu... 查看详情

rocketmq原理解析

参考技术ARocketMQ原理解析说明:NameServer是没有状态的,即NameServer中的Broker和topic等状态信息(通过其他角色上报获取)都是保存在内存中的,不会持久化存储(可通过配置实现),集群可以横向扩展。主要功能如下:a.接收Broker... 查看详情

阿里资深架构推荐:rocketmq实战与原理解析。

...的日志传输领域到后来阿里集团全维度在线业务的支撑,RocketMQ被广泛用于交易、数据同步、缓存同步、IM通讯、流计算、IoT等场景。在双11全球狂欢节中,RocketMQ以万亿级的消息总量支撑了全集团3000多个应用,为复杂的业务场景... 查看详情

rocketmq事务机制的底层实现原理解析

...候,为什么消费者就消费不到呢;其本质的一个原因就是RocketMQ一旦发现你发送的是一条half消息,它不会把这个half消息的offset写入OrderPaySuccessTopic中的ConsumeQueue里去,它会把这条half消息写入到自己内部的一个“RMQ_SYS_TRANS_HALF_TOPI... 查看详情

解析rocketmq业务消息-“顺序消息”(代码片段)

引言ApacheRocketMQ诞生至今,历经十余年大规模业务稳定性打磨,服务了阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案,RocketMQ从创建之初就一直专注于业务集成领域的异步通信能... 查看详情

rocketmq事务消息原理及使用方法解析(代码片段)

...#x1f34a;Java学习:Java从入门到精通总结🍊深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想🍊绝对不一样的职场干货:大厂最佳实践经验指南📆最近更新:2023年3月24日🍊个人简介:通信工程... 查看详情

rocketmq原理学习--索引

 1、RocketMQ原理学习--RocketMQ源码运行 2、RocketMQ原理学习--RocketMQ整体架构窥探 3、RocketMQ原理学习--消息类型 4、RocketMQ原理学习--NameServer 5、RocketMQ原理学习---生产者普通消息发送 6、RocketMQ原理学习---生产者... 查看详情

28rocketmq:事务消息机制的底层实现原理

1.half消息在commit前对消费者不可见的原因回顾:当订单系统去发送一个half消息给MQ的时候。对于这个half消息,红包系统在这时是看不到它的,也无法去消费这条消息并进行处理。ConsumeQueue的可见原理场景解析:当... 查看详情

《rocketmq技术原理:rocketmq架构设计与实现原理》第二版书籍勘误

尊敬的各位读者朋友们,谢谢大家对《RocketMQ技术内幕:RocketMQ架构设计与实现原理》第二版本的支持与厚爱,如果发现书中有什么错误的内容,烦请大家在该文章追加您的评论,我会及时与广大读者朋友们进... 查看详情

《rocketmq技术原理:rocketmq架构设计与实现原理》第二版书籍勘误

尊敬的各位读者朋友们,谢谢大家对《RocketMQ技术内幕:RocketMQ架构设计与实现原理》第二版本的支持与厚爱,如果发现书中有什么错误的内容,烦请大家在该文章追加您的评论,我会及时与广大读者朋友们进... 查看详情

精华推荐|深入浅出rocketmq原理及实战「底层原理挖掘系列」透彻剖析贯穿rocketmq的存储系统的实现原理和持久化机制

RocketMQ的发展历史RocketMQ是一个统一消息引擎、轻量级数据处理平台。RocketMQ是一款阿里巴巴开源的消息中间件。2016年11月28日,阿里巴巴向广西党性培训Apache软件基金会捐赠RocketMQ,成为Apache孵化项目。2017年9月25日,Apache宣布Rock... 查看详情

精华推荐|深入浅出rocketmq原理及实战「底层原理挖掘系列」透彻剖析贯穿rocketmq的存储系统的实现原理和持久化机制

RocketMQ的发展历史RocketMQ是一个统一消息引擎、轻量级数据处理平台。RocketMQ是一款阿里巴巴开源的消息中间件。2016年11月28日,阿里巴巴向广西党性培训Apache软件基金会捐赠RocketMQ,成为Apache孵化项目。2017年9月25日,A... 查看详情

rocketmq源码解析-namesrv与broker

参考技术Arocketmq是阿里巴巴开源的mq,目前在github拥有13+k的star。rocketmq是众多mq实现中,较少使用java实现的,因此对于java技术栈的人来说,拿rocketmq的源码作为切入点,理解mq的实现原理是非常合适的。本文会从四大部分(namesrv... 查看详情

rocketmq消费者监听模型解析——图解源码级解析

查看详情

rocketmq架构原理及名词概念

这节主要讲述RocketMQ的整体架构,和常用术语解释。当我们接触一个新东西的时候,一定要知道他的原理,只有知道原理之后,才会产生问题。只有带着问题去读源码才会事半功倍。首先盗用官方的一张图片:(官方地址:http://... 查看详情

精华推荐|深入浅出rocketmq原理及实战「性能原理挖掘系列」透彻剖析贯穿rocketmq的系统服务底层原理以及高性能存储设计挖掘深入

...本身的设计越复杂,采用文件系统作为消息存储的方式。RocketMQ存储机制消息中间件的存储一般都是利用磁盘,一般是使用机械硬盘,但机械硬盘的速度比访问内存慢了n个数量级,一款优秀的消息中间件必然会将硬件资源压榨到... 查看详情