Kafka/AutoMQ 源码分析所需理论知识体系
概述
分析 Kafka/AutoMQ 这类分布式系统的源码,需要掌握多个领域的理论知识。本文档系统地梳理了这些知识点,并提供学习资源。
一、并发编程(Concurrency)
1.1 Java 并发基础
核心概念
- 线程安全(Thread Safety)
- 可见性(Visibility)
- 原子性(Atomicity)
- 有序性(Ordering)
Kafka 中的应用
// DelayedOperation.scala
private val completed = new AtomicBoolean(false)
def forceComplete(): Boolean = {
if (completed.compareAndSet(false, true)) {
// CAS 保证原子性,只有一个线程能成功
cancel()
onComplete()
true
} else {
false
}
}涉及的理论:
- Compare-And-Swap (CAS):无锁算法的基础
- Happens-Before 关系:Java 内存模型的核心
- Volatile 语义:保证可见性和防止指令重排
学习资源
书籍:
《Java 并发编程实战》(Java Concurrency in Practice)
- 作者:Brian Goetz
- 必读经典,深入讲解 Java 并发原理
- 重点章节:第 3 章(可见性)、第 15 章(原子变量)、第 16 章(Java 内存模型)
《深入理解 Java 虚拟机》(第 3 版)
- 作者:周志明
- 第 12 章:Java 内存模型与线程
- 第 13 章:线程安全与锁优化
论文:
- "The Java Memory Model" by Jeremy Manson et al. (POPL 2005)
- 链接:https://dl.acm.org/doi/10.1145/1040305.1040336
- Java 内存模型的官方规范论文
在线资源:
- Java Concurrency API 官方文档:https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/package-summary.html
- Doug Lea 的并发编程教程:http://gee.cs.oswego.edu/dl/cpj/
1.2 锁机制(Locking)
核心概念
- 互斥锁(Mutex)
- 读写锁(Read-Write Lock)
- 自旋锁(Spin Lock)
- 锁粗化与锁消除
- 死锁(Deadlock)
Kafka 中的应用
// DelayedOperationPurgatory.scala
private val watchersLock = new ReentrantLock()
// SystemTimer.java
private final ReentrantReadWriteLock readWriteLock;
public void add(TimerTask timerTask) {
readLock.lock(); // 读锁允许并发添加
try {
addTimerTaskEntry(...);
} finally {
readLock.unlock();
}
}
public boolean advanceClock(long timeoutMs) {
writeLock.lock(); // 写锁独占推进时钟
try {
// ...
} finally {
writeLock.unlock();
}
}涉及的理论:
- Lock-Free 数据结构:
ConcurrentLinkedQueue - Lock Striping:分片锁减少竞争(512 个 WatcherList)
- 死锁预防:Kafka 文档中明确的锁使用规范
学习资源
书籍:
- 《The Art of Multiprocessor Programming》(第 2 版)
- 作者:Maurice Herlihy, Nir Shavit
- 第 7 章:Spin Locks and Contention
- 第 9 章:Mutual Exclusion
- 第 18 章:Transactional Memory
论文:
- "Non-blocking Algorithms and Preemption-Safe Locking on Multiprogrammed Shared Memory Multiprocessors"
- 作者:Maged M. Michael, Michael L. Scott
- 链接:https://www.cs.rochester.edu/research/synchronization/pseudocode/ppopp91.html
1.3 无锁编程(Lock-Free Programming)
核心概念
- CAS(Compare-And-Swap)
- ABA 问题
- 内存屏障(Memory Barrier)
- Wait-Free vs Lock-Free vs Obstruction-Free
Kafka 中的应用
// ConcurrentLinkedQueue (Kafka 使用的 JDK 类)
private volatile Node<E> head;
private volatile Node<E> tail;
boolean casHead(Node<E> cmp, Node<E> val) {
return UNSAFE.compareAndSwapObject(this, headOffset, cmp, val);
}Kafka 的 Watchers 类使用 ConcurrentLinkedQueue:
private class Watchers(val key: Any) {
private[this] val operations = new ConcurrentLinkedQueue[T]()
}学习资源
书籍:
- 同上《The Art of Multiprocessor Programming》第 10-11 章
论文:
- "Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms"
- 作者:Maged M. Michael, Michael L. Scott (PODC 1996)
- 链接:https://www.cs.rochester.edu/~scott/papers/1996_PODC_queues.pdf
在线资源:
- Preshing on Programming(并发编程博客): https://preshing.com/20120612/an-introduction-to-lock-free-programming/
二、数据结构与算法
2.1 时间轮(Timing Wheel)
核心概念
- 哈希表的时间复杂度优化
- 层次化设计(Hierarchical Design)
- 时间驱动 vs 事件驱动
Kafka 中的应用
// TimingWheel.java
public class TimingWheel {
private final long tickMs; // 时间刻度
private final int wheelSize; // 轮子大小
private final long interval; // tickMs * wheelSize
private final TimerTaskList[] buckets;
private volatile TimingWheel overflowWheel; // 上层时间轮
}理论优势:
- 插入/删除:O(1)(相比优先队列的 O(log n))
- 适合大量定时任务
- 内存占用固定
学习资源
论文:
"Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility"
- 作者:George Varghese, Tony Lauck (SOSP 1987)
- 链接:https://dl.acm.org/doi/10.1145/41457.37504
- 这是时间轮的开创性论文,必读!
"Hashed and Hierarchical Timing Wheels: Efficient Data Structures for Implementing a Timer Facility"
- 作者:George Varghese, Tony Lauck
- IEEE/ACM Transactions on Networking, 1997
- 完整版论文
博客文章:
- Netty 时间轮源码分析:https://zhuanlan.zhihu.com/p/100082995
- Kafka 时间轮实现详解:https://www.cnblogs.com/luozhiyun/p/12080088.html
代码参考:
- Netty 的 HashedWheelTimer:https://github.com/netty/netty/blob/4.1/common/src/main/java/io/netty/util/HashedWheelTimer.java
2.2 优先队列(Priority Queue)
核心概念
- 堆(Heap)数据结构
- DelayQueue 的实现原理
Kafka 中的应用
// SystemTimer.java
private final DelayQueue<TimerTaskList> delayQueue;
// DelayQueue 内部使用 PriorityQueue
public class DelayQueue<E extends Delayed> {
private final PriorityQueue<E> q = new PriorityQueue<E>();
}学习资源
书籍:
- 《算法》(第 4 版)
- 作者:Robert Sedgewick, Kevin Wayne
- 第 2.4 节:优先队列
在线课程:
- MIT 6.006:Introduction to Algorithms
- 第 4 讲:Heaps and Heap Sort
- 链接:https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-fall-2011/
2.3 跳表(Skip List)
核心概念
虽然 Kafka 主要使用时间轮,但理解跳表有助于对比不同定时器实现。
学习资源
论文:
- "Skip Lists: A Probabilistic Alternative to Balanced Trees"
- 作者:William Pugh (1990)
- 链接:ftp://ftp.cs.umd.edu/pub/skipLists/skiplists.pdf
三、分布式系统(Distributed Systems)
3.1 一致性模型(Consistency Models)
核心概念
- 强一致性(Strong Consistency)
- 最终一致性(Eventual Consistency)
- 因果一致性(Causal Consistency)
- 读己之所写(Read-Your-Writes)
Kafka 中的应用
- ISR(In-Sync Replicas)机制:保证强一致性
- High Watermark (HW):消费者只能读取已复制的数据
- acks 参数:
acks=0:无等待(最弱)acks=1:等待 Leader 写入acks=all:等待所有 ISR 副本(最强)
// DelayedProduce.scala
override def tryComplete(): Boolean = {
produceMetadata.produceStatus.forKeyValue { (topicPartition, status) =>
if (status.acksPending) {
val (hasEnough, error) = partition.checkEnoughReplicasReachOffset(
status.requiredOffset
)
// 检查是否有足够的副本同步到 requiredOffset
}
}
}学习资源
书籍:
《Designing Data-Intensive Applications》(DDIA)
- 作者:Martin Kleppmann
- 第 5 章:Replication
- 第 9 章:Consistency and Consensus
- 强烈推荐,分布式系统入门神书!
《分布式系统原理与范型》(第 3 版)
- 作者:Andrew S. Tanenbaum, Maarten van Steen
- 第 7 章:一致性与复制
论文:
- "Consistency Tradeoffs in Modern Distributed Database System Design"
- 作者:Daniel J. Abadi (IEEE Computer 2012)
- 链接:http://www.cs.umd.edu/~abadi/papers/abadi-pacelc.pdf
在线资源:
- Jepsen 分析系列:https://jepsen.io/analyses
- 对各种分布式系统的一致性进行实战测试
3.2 复制协议(Replication Protocols)
核心概念
- Leader-Follower 复制
- Quorum(法定人数)
- 两阶段提交(2PC)
- 三阶段提交(3PC)
Kafka 中的应用
- ISR 机制:动态的 Quorum
- Unclean Leader Election:可用性 vs 一致性的权衡
// Partition.scala
def checkEnoughReplicasReachOffset(requiredOffset: Long): (Boolean, Errors) = {
leaderLogIfLocal match {
case Some(leaderLog) =>
val curInSyncReplicas = inSyncReplicaIds
if (isTraceEnabled) {
trace(s"$requiredOffset required, $curInSyncReplicas in sync")
}
val minIsr = leaderLog.config.minInSyncReplicas
if (leaderLog.highWatermark >= requiredOffset) {
// HW 已经推进,说明足够副本已同步
(true, Errors.NONE)
} else if (curInSyncReplicas.size < minIsr) {
(false, Errors.NOT_ENOUGH_REPLICAS)
} else {
(false, Errors.NONE)
}
}
}学习资源
论文:
"Chain Replication for Supporting High Throughput and Availability"
- 作者:Renesse and Schneider (OSDI 2004)
- 链接:https://www.cs.cornell.edu/home/rvr/papers/OSDI04.pdf
"Consensus on Transaction Commit"
- 作者:Jim Gray, Leslie Lamport (2006)
- 链接:https://www.microsoft.com/en-us/research/publication/consensus-on-transaction-commit/
Kafka 官方文档:
- Kafka Replication:https://kafka.apache.org/documentation/#replication
- Kafka Design:https://kafka.apache.org/documentation/#design
3.3 共识算法(Consensus Algorithms)
核心概念
- Paxos
- Raft
- ZAB(ZooKeeper Atomic Broadcast)
- KRaft(Kafka Raft)
Kafka 中的应用
- 旧版 Kafka:使用 ZooKeeper(基于 ZAB)管理元数据
- KRaft 模式(2.8+):使用自己的 Raft 实现替代 ZooKeeper
// KafkaRaftClient.scala (KRaft 实现)
class KafkaRaftClient[T](
time: Time,
metrics: KafkaRaftMetrics,
channel: NetworkChannel,
messageQueue: MessageQueue[T],
log: ReplicatedLog,
quorum: QuorumState,
// ...
)学习资源
论文:
"The Part-Time Parliament" (Paxos)
- 作者:Leslie Lamport (1998)
- 链接:https://lamport.azurewebsites.net/pubs/lamport-paxos.pdf
"Paxos Made Simple"
- 作者:Leslie Lamport (2001)
- 链接:https://lamport.azurewebsites.net/pubs/paxos-simple.pdf
- Paxos 的简化版本,更易理解
"In Search of an Understandable Consensus Algorithm (Extended Version)" (Raft)
- 作者:Diego Ongaro, John Ousterhout (2014)
- 链接:https://raft.github.io/raft.pdf
- Raft 的原始论文,以易懂著称
"ZooKeeper: Wait-free coordination for Internet-scale systems" (ZAB)
- 作者:Patrick Hunt et al. (USENIX ATC 2010)
- 链接:https://www.usenix.org/legacy/event/atc10/tech/full_papers/Hunt.pdf
可视化工具:
- Raft 动画演示:https://raft.github.io/
- Paxos 可视化:https://paxos.systems/
视频课程:
- MIT 6.824: Distributed Systems
- 第 6-8 讲:Raft
- 链接:https://pdos.csail.mit.edu/6.824/
3.4 分布式存储(Distributed Storage)
核心概念
- Log-Structured Storage
- LSM Tree(Log-Structured Merge Tree)
- Write-Ahead Log (WAL)
AutoMQ 中的应用
AutoMQ 将 Kafka 的本地存储替换为云原生的 S3 存储:
传统 Kafka:
数据 → Local Disk (Segment Files)
AutoMQ:
数据 → WAL Cache (内存) → S3 (对象存储)
↓
Block Cache (内存)核心组件:
- WAL Cache:写入缓存,提供低延迟写入
- Block Cache:读取缓存,加速热数据访问
- S3 Stream:将 Kafka 的 Log 抽象为 S3 上的流
学习资源
论文:
"The Log-Structured Merge-Tree (LSM-Tree)"
- 作者:Patrick O'Neil et al. (1996)
- 链接:https://www.cs.umb.edu/~poneil/lsmtree.pdf
"The Design and Implementation of a Log-Structured File System"
- 作者:Mendel Rosenblum, John K. Ousterhout (SOSP 1991)
- 链接:https://people.eecs.berkeley.edu/~brewer/cs262/LFS.pdf
书籍:
- 《Database Internals》
- 作者:Alex Petrov
- 第 1 部分:Storage Engines
- 第 7 章:Log-Structured Storage
四、操作系统(Operating Systems)
4.1 I/O 模型
核心概念
- 阻塞 I/O vs 非阻塞 I/O
- 同步 I/O vs 异步 I/O
- I/O 多路复用(select/poll/epoll)
- 零拷贝(Zero-Copy)
Kafka 中的应用
- Java NIO(Non-blocking I/O):网络通信
- sendfile() 系统调用:零拷贝传输
- mmap(内存映射文件):日志索引文件
// Kafka 的 FileRecords 使用零拷贝
public long writeTo(TransferableChannel destChannel, long position, int length) {
return channel.transferTo(position, length, destChannel);
// 底层使用 sendfile() 系统调用,避免数据在内核态和用户态之间拷贝
}学习资源
书籍:
《Unix 网络编程》卷 1:套接字联网 API(第 3 版)
- 作者:W. Richard Stevens
- 第 6 章:I/O 复用
- 第 14 章:高级 I/O 函数
《深入理解计算机系统》(CSAPP)(第 3 版)
- 作者:Randal E. Bryant, David R. O'Hallaron
- 第 10 章:系统级 I/O
论文:
- "The C10K problem"
- 作者:Dan Kegel
- 链接:http://www.kegel.com/c10k.html
- 讨论如何处理 1 万个并发连接
博客:
4.2 线程模型
核心概念
- Reactor 模式
- Proactor 模式
- 线程池设计
Kafka 中的应用
Kafka 的网络层使用 Reactor 模式:
// SocketServer.scala
class SocketServer(...) {
private val acceptors = new mutable.ArrayBuffer[Acceptor]
private val processors = new Array[Processor](numProcessorThreads)
// Acceptor: 接受新连接
// Processor: 处理 I/O 读写(多线程)
// Handler: 业务逻辑处理
}线程模型:
Client → Acceptor Thread → Processor Thread (Selector) → Request Queue
↓
KafkaRequestHandler Thread Pool
↓
Process Request → Response Queue
↓
Processor Thread → Send to Client学习资源
论文:
"Reactor: An Object Behavioral Pattern for Demultiplexing and Dispatching Handles for Synchronous Events"
- 作者:Douglas C. Schmidt (1995)
- 链接:https://www.dre.vanderbilt.edu/~schmidt/PDF/reactor-siemens.pdf
"Proactor - An Object Behavioral Pattern for Demultiplexing and Dispatching Handlers for Asynchronous Events"
- 作者:Irfan Pyarali et al.
- 链接:https://www.dre.vanderbilt.edu/~schmidt/PDF/proactor.pdf
博客:
- Netty 的 Reactor 模式实现:https://netty.io/wiki/reference-counted-objects.html
4.3 虚拟内存与缓存
核心概念
- Page Cache
- 内存映射文件(mmap)
- Direct Memory
- CPU Cache(L1/L2/L3)
Kafka 中的应用
- 依赖操作系统 Page Cache:提高读写性能
- 顺序写:利用磁盘的顺序写性能
- 批处理:减少系统调用和网络往返
学习资源
书籍:
- 同上《深入理解计算机系统》第 9 章:虚拟内存
Kafka 官方文档:
- Kafka Efficiency:https://kafka.apache.org/documentation/#maximizingefficiency
五、网络编程(Network Programming)
5.1 TCP/IP 协议栈
核心概念
- TCP 可靠传输
- 流量控制与拥塞控制
- Nagle 算法
- TCP_NODELAY
Kafka 中的应用
// Kafka 默认禁用 Nagle 算法以降低延迟
socketChannel.socket().setTcpNoDelay(true);学习资源
书籍:
- 同上《Unix 网络编程》卷 1
- 《TCP/IP 详解》卷 1:协议
- 作者:W. Richard Stevens
5.2 序列化与协议设计
核心概念
- 二进制协议 vs 文本协议
- Schema Evolution(模式演进)
- 向前兼容与向后兼容
Kafka 中的应用
- 自定义二进制协议:高效的网络传输
- 协议版本管理:支持多版本客户端
// Kafka 的协议请求头
public class RequestHeader {
private final short apiKey; // API 类型
private final short apiVersion; // API 版本
private final int correlationId; // 请求 ID
private final String clientId; // 客户端 ID
}学习资源
论文:
- "Schema Evolution in Avro, Protocol Buffers and Thrift"
Kafka 官方文档:
- Protocol Guide:https://kafka.apache.org/protocol.html
六、性能优化(Performance Optimization)
6.1 性能分析方法论
核心概念
- USE 方法:Utilization, Saturation, Errors
- RED 方法:Rate, Errors, Duration
- 火焰图(Flame Graph)
学习资源
书籍:
- 《性能之巅:洞悉系统、企业与云计算》(Systems Performance)
- 作者:Brendan Gregg
- 第 2 章:方法论
- 性能分析领域的权威著作
博客:
- Brendan Gregg 的博客:https://www.brendangregg.com/
- USE Method:https://www.brendangregg.com/usemethod.html
6.2 JVM 性能调优
核心概念
- 垃圾回收(GC)
- JIT 编译
- 内存布局
- 对象分配
Kafka 中的应用
- G1 GC:Kafka 推荐的垃圾回收器
- 堆外内存:减少 GC 压力
- 对象池:复用 ByteBuffer
学习资源
书籍:
- 同上《深入理解 Java 虚拟机》第 3 部分:虚拟机执行子系统
在线资源:
- JVM Performance Tuning Guide:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/
6.3 缓存优化
核心概念
- 缓存局部性(Locality)
- False Sharing
- 缓存行填充(Cache Line Padding)
Kafka 中的应用
// 分片锁:避免缓存行竞争
private val watcherLists = Array.fill[WatcherList](512)(new WatcherList)
// 每个分片独立,减少跨 CPU 缓存失效
private def watcherList(key: Any): WatcherList = {
watcherLists(Math.abs(key.hashCode() % watcherLists.length))
}学习资源
博客:
- "False Sharing" by Martin Thompson: https://mechanical-sympathy.blogspot.com/2011/07/false-sharing.html
七、软件工程(Software Engineering)
7.1 设计模式(Design Patterns)
Kafka 中的应用
- Reactor 模式:网络 I/O 处理
- Observer 模式:DelayedOperationPurgatory 的事件监听
- Template Method 模式:DelayedOperation 的抽象类设计
- Strategy 模式:不同的分区分配策略
- Factory 模式:各种 Builder 类
学习资源
书籍:
- 《设计模式:可复用面向对象软件的基础》
- 作者:Gang of Four (GoF)
- 《企业应用架构模式》
- 作者:Martin Fowler
7.2 测试与可靠性
核心概念
- 单元测试 vs 集成测试
- 故障注入(Fault Injection)
- 混沌工程(Chaos Engineering)
Kafka 中的应用
// Kafka 的测试工具
// ZooKeeperTestHarness.scala
// KafkaServerTestHarness.scala
// IntegrationTestHarness.scala学习资源
论文:
- "Simple Testing Can Prevent Most Critical Failures"
- 作者:Ding Yuan et al. (OSDI 2014)
- 链接:https://www.usenix.org/conference/osdi14/technical-sessions/presentation/yuan
工具:
- Jepsen:https://github.com/jepsen-io/jepsen
- Chaos Monkey:https://netflix.github.io/chaosmonkey/
八、云原生与对象存储(Cloud-Native & Object Storage)
8.1 S3 对象存储
核心概念
- 对象存储 vs 块存储 vs 文件系统
- 最终一致性模型
- 分段上传(Multipart Upload)
- 数据持久性(Durability)
AutoMQ 中的应用
// S3Storage.java
public class S3Storage {
// 将 Kafka 的 Segment 存储到 S3
public CompletableFuture<Void> append(long streamId, ByteBuf data) {
// 1. 先写入 WAL Cache
// 2. 异步刷新到 S3
}
}AutoMQ 架构:
计算层(Stateless Brokers)
↓ 读写
存储层(S3 + Cache)
- WAL Cache:写入缓冲
- Block Cache:读取缓存
- S3:持久化存储学习资源
AWS 官方文档:
- S3 User Guide:https://docs.aws.amazon.com/s3/
- S3 Best Practices:https://docs.aws.amazon.com/AmazonS3/latest/userguide/best-practices.html
论文:
- "Amazon S3: A Highly Durable, Scalable, and Secure Cloud Object Storage Service"
- 作者:Amazon Web Services
- 链接:https://aws.amazon.com/s3/features/
博客:
- AutoMQ 技术博客:https://docs.automq.com/
8.2 云原生架构
核心概念
- 存算分离(Disaggregated Architecture)
- 无状态服务(Stateless Services)
- 弹性伸缩(Elastic Scaling)
- 多租户(Multi-tenancy)
学习资源
书籍:
- 《云原生架构模式》
- 作者:Cornelia Davis
论文:
- "Disaggregation and the Cloud: The Case for Data-Intensive Applications"
- 作者:Michael J. Freedman et al.
- 链接:https://www.usenix.org/conference/hotcloud19/presentation/klimovic
九、推荐学习路径
初级(1-3 个月)
并发编程基础
- 《Java 并发编程实战》前 5 章
- 理解 volatile、synchronized、CAS
数据结构与算法
- 《算法》第 4 版:堆、队列、哈希表
Kafka 官方文档
- 阅读 Design 和 Implementation 章节
中级(3-6 个月)
分布式系统基础
- 《Designing Data-Intensive Applications》全书
- MIT 6.824 课程视频
深入并发编程
- 《The Art of Multiprocessor Programming》
- 理解无锁数据结构
时间轮论文
- 阅读 Varghese 的原始论文
- 对比 Kafka/Netty 的实现
高级(6-12 个月)
共识算法
- Raft 论文 + 可视化工具
- Paxos Made Simple
性能优化
- 《Systems Performance》
- JVM 性能调优实战
源码阅读
- Kafka Core 源码
- AutoMQ S3Stream 源码
十、实战建议
1. 边学边做
- 不要只看理论,结合源码阅读
- 自己实现简化版的组件(如简单的 Timing Wheel)
2. 画图理解
- 画出数据流图
- 画出线程模型图
- 画出状态机转换图
3. 写笔记
- 建立个人知识库(如当前的 automq学习笔记 目录)
- 记录关键代码片段和理论对应关系
4. 参与社区
- 阅读 Kafka Improvement Proposals (KIP)
- 参与 GitHub Discussions
- 关注技术博客和会议分享
5. 动手实验
- 搭建本地 Kafka 集群
- 使用 Jepsen 测试一致性
- 使用 JMH 进行性能测试
十一、持续学习资源
技术博客
- Confluent Blog:https://www.confluent.io/blog/
- Martin Kleppmann's Blog:https://martin.kleppmann.com/
- High Scalability:http://highscalability.com/
会议与论文
- USENIX OSDI:操作系统设计与实现
- USENIX ATC:应用技术会议
- ACM SIGMOD/VLDB:数据库会议
- InfoQ:实践案例分享
YouTube 频道
- MIT OpenCourseWare:6.824 分布式系统
- Strange Loop Conference
- QCon Conference
论文集合
- Papers We Love:https://github.com/papers-we-love/papers-we-love
- The Morning Paper(已停更,但历史文章有价值):https://blog.acolyer.org/
总结
理解 Kafka/AutoMQ 源码需要多领域知识的支撑:
必修(优先级最高):
- 并发编程(Java Concurrency in Practice)
- 分布式系统(DDIA)
- 数据结构(时间轮论文)
重要: 4. 操作系统(I/O 模型、Page Cache) 5. 网络编程(TCP/IP、Reactor 模式) 6. 性能优化(Systems Performance)
进阶: 7. 共识算法(Raft/Paxos) 8. 云原生架构 9. 存储引擎(LSM Tree)
建议采用螺旋式学习法:
- 第一遍:快速浏览,建立整体认知
- 第二遍:结合源码,深入理解关键部分
- 第三遍:实践验证,自己动手实现
记住:理论指导实践,实践验证理论。阅读源码时遇到不懂的概念,立即查阅相关理论;学习理论后,回到源码中找对应的实现。这样才能真正融会贯通!
