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

一、技术架构

RocketMq源码分析(一)--基本知识_第1张图片

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

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

二、消息存储结构

RocketMq源码分析(一)--基本知识_第2张图片

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拉取消息进行消费

你可能感兴趣的:(IT技术分享,Java,rocketMq,rocketmq,java)