博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Broker模块划分
阅读量:7213 次
发布时间:2019-06-29

本文共 1162 字,大约阅读时间需要 3 分钟。

上图是之前讨论确定的系统架构(后续内容会按照这个架构来叙述),几点基础:

  1. Broker采用主从结构

  2. Broker负责持久化元数据并汇报到NameServer

  3. Client从NameServer获取元数据,然后从Broker读取消息

Broker的模块划分

1 网络模块

Broker需要和NameServer及Client通信,包括Broker之间也需要通信(主从结构),所以Broker会有一个模块(Net&PacketHandler)用于所有网络包的处理。

 

2 元数据相关

我们会将NameServer尽量做的简单,所以NameServer不会持久化任何数据。最终NameServer是无状态的,所有数据来源于Broker上报,所以元数据会持久化在Broker上。除了持久化Topic、Group这样的元数据,Broker还需要保存消费进度。

另外,为了保证分区内数据的顺序性,需要确保一个分区在一个时刻只会有一个线程来消费,所以Broker端需要提供接口对分区执行加锁操作。我们采用租约的方式来实现:Client需要对获取到分区的租约才能对分区进行消费。所以Broker会包含一个租约模块(Leaser)。

所以Broker元数据模块会包含以下几块:

  • TopicManager

  • GroupManager

  • CursorManager

  • Leaser

4 消息写入模块

消息从Client发送到Broker,Broker接收到消息后会增强消息属性,比如给消息添加索引位置、存储位置、存储时间等属性,然后进行持久化。所以Broker端会有一个模块处理写入请求(Writer)。

 

5 消息读取模块

Broker需要将持久化的消息读取出来返回给客户端,且持久化WAL是多个Topic共享的,所以需要一个独立的读取模块(Reader)的从WAL的不同位置读取数据拼装成最终的结果返回给客户端。

 

6 存储模块

最终所有消息是要落盘的,所以Broker肯定包含了一个存储模块。存储模块使用WAL的方式实现,分为两块:存储队列和索引队列,消息会被写入到存储队列,然后构建索引,这块内容会在之后的Broker实现部分详细介绍。

(存储模块应该是整个消息中间件中最复杂的模块,本篇没有展现介绍,会在介绍系统具体实现时详细的描述整个存储层的实现)

 

除了以上这些模块外,Broker采用主从架构,必然会有负责主从复制的模块,还包括元数据的备份策略(元数据也是需要有多个备份的)。除此之外可能还有监控统计模块,用于监测系统状态,但这不在我们讨论的范围。

 

总结以上内容,Broker的模块大致如下:

本文转自 sshpp 51CTO博客,原文链接:http://blog.51cto.com/12902932/1949350,如需转载请自行联系原作者
你可能感兴趣的文章
如何写出优质干净的代码,这6个技巧你不能错过!
查看>>
某口腔app发现了不友善词汇(f*ckMobile)
查看>>
SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的
查看>>
JavaScript的数据类型有哪些?
查看>>
如何只在IE上加载CSS样式表
查看>>
个人博客三|首页后台开发
查看>>
调用链系列四:调用链上下文传递
查看>>
在Windows下,用Hexo搭建博客
查看>>
刷前端面经笔记(十一)
查看>>
【跃迁之路】【724天】程序员高效学习方法论探索系列(实验阶段481-2019.2.14)...
查看>>
Kaggle冠军经验分享丨如何用15个月冲到排行榜的首位
查看>>
Stream流与Lambda表达式(一) 杂谈
查看>>
独家揭秘!阿里大规模数据中心的性能分析
查看>>
Valid
查看>>
大数据驱动的运营创新和探索
查看>>
你属于程序员中的哪种人?
查看>>
基于Mixin Network的PHP比特币开发教程 之一:创建机器人
查看>>
时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析
查看>>
sorl实现商品快速搜索
查看>>
Webpack4 学习笔记 - 01:webpack的安装和简单配置
查看>>