rocketMq-Topic创建过程

简介: Topic可以理解为在rocketMq体系当中作为一个逻辑消息组织形式,一般情况下一类业务消息会申请一个topic来实现业务之间隔离。Topic的存储Topic的实际存储模型说明:    该图分享自: RocketMQ概念模型    Topic是一个逻辑上的概念,实际上在每个broker上以queue的形式保存,也就是说每个topic在broker上会划分成几个逻辑队列,每个逻辑队列保存一部分消息数据,但是保存的消息数据实际上不是真正的消息数据,而是指向commit log的消息索引。

Topic可以理解为在rocketMq体系当中作为一个逻辑消息组织形式,一般情况下一类业务消息会申请一个topic来实现业务之间隔离。


Topic的存储

img_791151ecef2c9696664101df4eb3db08.png
Topic的实际存储模型

说明:

    该图分享自: RocketMQ概念模型

    Topic是一个逻辑上的概念,实际上在每个broker上以queue的形式保存,也就是说每个topic在broker上会划分成几个逻辑队列,每个逻辑队列保存一部分消息数据,但是保存的消息数据实际上不是真正的消息数据,而是指向commit log的消息索引。

    Topic创建的时候可以用集群模式去创建(这样集群里面每个broker的queue的数量相同),也可以用单个broker模式去创建(这样每个broker的queue数量可以不一致)。

    每个broker上的角色是等同的,也就是说每个broker上面的queue保存了该topic下一部分消息,注意是一部分而不是全量消息。


rocketMq的命令行工具

img_f44ec71ef5cf53aa3d231b7283fd58ae.png
rocketMq的CLI

说明:

    在rocketMq编译后的bin目录下有一个mqadmin的工具,该工具作为rocketMq的CLI工具对外提供,使用时候可以通过sh mqadmin -h 或者sh mqadmin command -h查看用法。

    updateTopic和deleteTopic是实际中操作topic的命令。


rocketMq的topic工具

img_ba6d8aff86d658b863ad0357413995c8.png
topic操作的CLI

说明:

    创建topic需要指定的参数,

    -b 指定broker上创建topic

    -c 指定cluster创建topic

    -n 指定namesrv地址,cluster模式下必须从namesrv获取broker地址

    -t topic的名字标志

    -r/w 读写队列的个数,建议相等

    -p queue的读写权限

    -o 待研究不确定是不是保证全局有序消息的配置


topic的创建过程

img_435e3d2c2331568cefcba486c51c4bc8.png
rocketMq创建过程

说明:

    topic的创建过程涉及到3个组件,分别是mqadmin、broker、namesrv。

    整个创建过程是mqadmin->broker->namesrv。

    mqadmin通知broker创建topic和对应的queue信息。

    broker转发通知namesrv保存topic和broker的原信息,同时在本地持久化一份topic配置。

    broker在这个时候不真正创建本地的队列信息


mqadmin操作过程

img_0b1bc68413349fa0baa1b9f434763d51.png
updateTopic的参数

说明:

    参见 UpdateTopicSubCommand类

    注册参数和updateTopic显示帮助是一致的


img_67943931f9d24787312295ec1e33e9a4.png
集群和broker模式下创建topic

说明:

    支持cluster模式下创建topic和支持broker模式下创建topic


img_69d494f4c3d1bad645b6df4a5a41cfd6.png
通知broker创建topic

说明:

    通知broker创建topic。


img_895a493406914692e46937addcc5157e.png
集群模式下获取broker地址

说明:

    集群模式下首先通过namesrv获取所有的broker的master地址,然后通知每个broker去创建topic,每个broker的创建过程跟指定单个broker是一致的。


broker操作过程

img_c8ed5a4defe74c161112847d04672def.png
broker处理topic创建消息入口

说明:

    参见AdminBrokerProcessor类



img_47016fbd34c099ee3b797d10d84573bd.png
broker本地保存topic配置并转发namesrv

说明:

    broker本地通过updateTopicConfig保存topic的配置信息并持久化

    broker通过registerBrokerAll通知namesrv保存topic信息



img_8ffcca2e78bcf11cebc29593648fe4c2.png
broker向namesrv注册topic

说明:

    broker通知namesrv注册该broker下的topic信息,具体的namesrv地址是在registerBrokerAll内部访问namesrv获取的。


namesrv操作过程


img_7157e3c4602e8afee7afc30a31b45adc.png
namesrv处理topic创建消息

说明:

    参见DefaultRequestProcessor类


img_6743c78f502f82194f18ac025b3e6915.png
namesrv解析topic信息

说明:

    参见DefaultRequestProcessor类


img_ade42722ea17d4846a526fc4c575032d.png
namesrv保存注册topic信息

说明:

    参见RouteInfoManager类

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
4月前
|
消息中间件 算法 Kafka
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
127 0
|
7月前
|
消息中间件 存储 缓存
聊聊 Kafka:Kafka 消息重复的场景以及最佳实践
聊聊 Kafka:Kafka 消息重复的场景以及最佳实践
176 0
|
9月前
|
消息中间件 RocketMQ
RocketMQ极简入门-RocketMQ消息批量发送
批量发送消息能显著提高传递小消息的性能。限制是这些批量消息应该有相同的topic,而且不能是延时消息。此外,这一批消息的总大小不应超过4MB,如果超过可以有2种处理方案: 1.将消息进行切割成多个小于4M的内容进行发送 2.修改4M的限制改成更大 可以设置Producer的maxMessageSize属性 修改配置文件中的maxMessageSize属性
324 0
|
9月前
|
消息中间件 RocketMQ
六.RocketMQ极简入门-RocketMQ消息批量发送
RocketMQ极简入门-RocketMQ消息批量发送
|
存储 消息中间件 数据安全/隐私保护
RocketMq Topic创建和删除
RocketMq Topic创建和删除
4392 0
|
存储 消息中间件 RocketMQ
RocketMQ学习Broker流程、生产者和存储流程联系
放入消息之后,进行操作体现在asyncSendMessage中。将消息以异步方式存储到存储器中,处理器可以处理下一个请求,而不是在结果完成后等待结果,以异步方式通知客户端。此时可以看到asyncPutMessage的操作中会进入到CommitLog中,此时进行提交日志操作,此时会执行写入到ByteBuffer中,然后刷盘到硬盘中。同时执行统计操作,进行HA同步。
119 0
RocketMQ学习Broker流程、生产者和存储流程联系
|
消息中间件 负载均衡 Kafka
Kafka 生产者案例 | 学习笔记
快速学习 Kafka 生产者案例
104 0
Kafka 生产者案例  |  学习笔记
|
消息中间件 存储 缓存
Kafka消费者JoinGroupRequest流程解析
当我们启动消费者客户端的时候, 会向协调器 coordinator 发起一个 JoinGroup的请求,表示要加入消费组中。 这个发起请求的地方在 AbstractCoordinator#sendJoinGroupRequest
Kafka消费者JoinGroupRequest流程解析
|
消息中间件 负载均衡 Java
RocketMq-消费方式
RocketMq-消费方式
RocketMq-消费方式
|
消息中间件 JSON Java
【Kafka】(十六)Kafka 生产者(producer)生产 topic 数据常见 API
【Kafka】(十六)Kafka 生产者(producer)生产 topic 数据常见 API
294 0