RocketMq源码分析(一)--基本知识

25 篇文章 1 订阅
9 篇文章 0 订阅

一、技术架构

技术架构

  RocketMq技术架构上主要分为4个部分:NameServer,Producer,Consumer,BrokerServer

  • NameServer:Topic路由注册中心。主要包括两个功能:1)broker管理,支持broker动态注册与发现,心跳检测broker存活情况。2)路由信息管理,保存broker、队列信息
  • Producer:消息发布角色
  • Consumer:消息消费角色
  • Broker:消息存储、投递和查询

二、消息存储结构

在这里插入图片描述

1、Topic、Tag

  Topic、Tag、Queue是Broker中重要的概念,在Broker消息过滤、查询中起到重要的作用。

  • Topic:消息主题,表示一类消息的集合,是RocketMQ进行消息订阅的基本单位;每条消息只能属于一个主题
  • Tag:标签,作为同一主题消息的二级分类,能够有效地保持代码的清晰度和连贯性,方便消费者实现同一主题的不同消费逻辑

2、消息存储文件构成

  消息存储主要由CommitLog、ConsumeQueue、IndexFile三个部分文件构成

  • CommitLog:存放消息元数据的文件,存储Producer端写入的消息主体内容。单个文件大小默认为1G,文件名长度固定为20位(由左边补齐的0 + 消息起始偏移量组成)。消息顺序写入文件
  • ConsumeQueue:消息消费队列,文件夹路径方式为:topic/queue/file,具体存储路径为:$HOME/store/consumequeue/{topic}/{queueId}/{fileName}。consumequeue文件采取定长设计,每一个条目共20个字节(8字节commitlog offset+4字节消息长度+8字节tag hashcode),单个文件由30W个条目组成。consumequeue可以看成topic的分片,consumer能够根据consumequeue查找未消费消息
  • IndexFile:消息索引文件,文件名以创建时的时间戳命名,具体存储位置:$HOME/store/index/{fileName},单个IndexFile文件大小约400M,可以存储2000W个索引。IndexFile提供了通过key或时间区间查询消息方法。

3、消息保存方式

  (1) 同步刷盘:消息真正持久化至磁盘后,broker才会给producer返回ACK响应
  (2)异步刷盘:利用PageCache,只要消息写入PageCache即可返回ACK,然后使用后台异步线程进行刷盘

三、通信机制

  RocketMQ的NameServer、Broker、Producer、Consumer4个角色之间通信如下:

  • 1)Broker启动后需要向NameServer注册自己的信息,然后每隔30s向NameServer上报Topic信息
  • 2)Producer发送消息时,会从本地缓存中选取Topic路由信息。如果没有Topic信息则从NameServer重新拉取Topic路由信息更新到本地,同时Producer默认每隔30s向NameServer拉取一次路由信息
  • 3)Producer根据选取的Topic路由选择一个MessageQueue进行发送消息;Broker接收消息并保存
  • 4)Consumer 选取路由方式与Producer相同,并且每隔30s向NameServer拉取一次路由信息更新到本地。在选取完Topic路由并完成客户端负载均衡后,选择Topic路由中的一个或多个MessageQueue拉取消息进行消费
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值