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出来的具体类型。

小结

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

相关推荐
森语林溪4 小时前
大数据环境搭建从零开始(十四)CentOS 7 系统更新源更换详解:阿里云镜像源配置完整指南
大数据·linux·运维·阿里云·centos
杂家5 小时前
Zookeeper完全分布式部署(超详细)
大数据·分布式·zookeeper
snakecy5 小时前
树莓派学习资料共享
大数据·开发语言·学习·系统架构
悠闲蜗牛�6 小时前
技术融合新纪元:深度学习、大数据与云原生的跨界实践
大数据·深度学习·云原生
武子康6 小时前
大数据-147 Java 访问 Apache Kudu:从建表到 CRUD(含 KuduSession 刷新模式与多 Master 配置)
大数据·后端·nosql
snakecy7 小时前
信息系统项目管理师--论文case
大数据·学习·职场和发展·区块链
数据库安全8 小时前
世界互联网大会|美创科技无侵入数据安全多智体治理技术首发
大数据·人工智能·科技·数据安全
sniper-拒绝白嫖8 小时前
uniapp ios android 本地离线debug
大数据
森语林溪9 小时前
大数据环境搭建从零开始(十七):JDK 17 安装与配置完整指南
java·大数据·开发语言·centos·vmware·软件需求·虚拟机
超级无敌大好人9 小时前
mapreduce源码解读
大数据·mapreduce