AutoMQ代码里的那些设计

本文在绿泡泡"狗哥琐话"首发于2025.9.25 <-关注不走丢。

大家好这里是狗哥。之前AutoMQ的代码讲解还算受欢迎啊,今天来加个餐,讲讲AutoMQ代码里的那些设计(选择代码分支1.5)。

里氏替换原则

那读过Kafka源码的同学知道啊,KafkaApis是Kafka Broker handle请求的入口。所有request都能在这里找到对应的handler。

而AutoMQ的目的,是在兼容KafkaAPI的基础上,把存储放到S3上这种对象存储上。这块代码它是怎么设计的呢?

它直接做了一个继承------ElasticKafkaApis。它基于KafkaAPI扩展一些自己的API路由

这样设计可以在上层代码以极小的代价来做替换。这就是一种里氏替换原则的体现。

Wrapper

然后我们再来介绍一个设计啊。在此之前,我们要知道一些基础知识:Kafka的底层存储其实是日志,然后把日志组织起来的是一个个LogSgement。

那每个Log Segement对象会在磁盘上创建一组文件,包括消息日志文件(.log)、位移索引文件(.index)、时间戳索引文件(.timeindex)以及已中止(Aborted)事务的索引文件(.txnindex)。

这个类在Kafka里的时候,主要做了日志和索引管理、消息追加与读取、日志滚动判断、恢复还有截断清理。然后AutoMQ还自己添加了一些方法

分别是异步读取、batches:返回当前日志段中的所有记录批次(RecordBatch)的可迭代对象、records:返回当前日志段中所有记录(Record)的可迭代对象。

那基于这个类呢,AutoMQ设计了一个类叫做ElasticLogSegment,就是继承于LogSegment

用于 AutoMQ 项目中替代 Kafka 原生的日志段管理机制。它是将日志段数据存储到对象存储的入口。那这很明显是个Wrapper模式的实现。

那机智的同学就会问了,为什么要在LogSegement添加一些方法呢?主要是AutoMQ在使用到相关类时,会用LogSegement的类型去做声明

ElasticLogSegment是new出来的具体类型。

小结

那今天的内容就到这里了啊。这个内容是来自于我星球里的,我的星球针对各种开源软件做了源码剖析,而且永久更新。那文字稿老规矩看简介。最后关注不走丢,我们下期见。

相关推荐
数字新视界1 分钟前
信创机房动环监控的核心功能与智能运维管理实践
大数据·物联网·信息可视化·信息与通信·一体化机柜
renhongxia110 分钟前
RAG检索增强生成:打通大模型与外部知识的通道
大数据·人工智能·算法
QYR-分析19 分钟前
2.80 亿增至 4.12 亿美元,CAGR5.6%:肌电诱发电位仪稳健扩容,神经电生理检测设备加速走向便携与数字化
大数据·网络·人工智能
宇哥(mf️取5r)19 分钟前
环评验收屡次卡壳,模块化危废间该如何匹配新标准?
大数据·人工智能·制造
人工智能培训2 小时前
边缘AI与大模型轻量化:让智能跑进每一个终端
大数据·人工智能·算法·重构·生活
产业家2 小时前
当数据走向理解,如何重构一个企业级 AI 数据平台?
大数据·人工智能
Hotchip_MEMS2 小时前
从触发吸气道智能感知:MEMS硅麦埋下雾化器智能化伏笔
大数据·人工智能·笔记·电脑·制造
北京君诺正信知识产权2 小时前
商标变更、转让、续展怎么办理?官方规则整理好了
大数据
字节跳动数据平台2 小时前
水印字幕无痕擦除!电商、短剧素材处理告别“贴膏药”
大数据
清华kenny2 小时前
中医生活化智能终端对比:晓得养在合肥周边的服务优势
大数据·人工智能·安徽晓得养