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

小结

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

相关推荐
189228048611 分钟前
NY379固态MT29F32T08GSLBHL8-36QA:B
大数据·服务器·人工智能·科技·缓存
jkyy201430 分钟前
顺应IoT与健康产业融合趋势,补齐中小企业健康数字化短板
大数据·人工智能·信息可视化·健康医疗
云栖梦泽在35 分钟前
AI安全实战:AI模型投毒攻击的检测与修复实战
大数据·人工智能·安全
随身数智备忘录1 小时前
安全生产法详解:安全生产法如何规范企业安全管理行为?
大数据·人工智能
狒狒热知识1 小时前
软文营销媒体发稿效果倍增逻辑内容渠道平台三维协同运营解析
大数据
程序猿追1 小时前
行业新趋势:Agent 重构,企业大屏从静态展示走向智能交互
大数据·人工智能·microsoft
维双云1 小时前
搭建美妆小程序,纯展示产品类型的,怎样做更适合中小商家?
大数据
团象科技1 小时前
流量洪峰与合规约束叠加时 奥创容量保障的落地边界观察
大数据·人工智能
系统集成架构师1 小时前
企业微信客户群定时群发方案
大数据
跨境卫士-小汪1 小时前
美国直邮税负常态化后跨境卖家如何重设免邮门槛
大数据·人工智能·产品运营·跨境电商·跨境