InfoQ▲如何正确高效地阅读源代码?

这几年 , 大数据技术发展迅猛 , 其中Kakfa凭借高可靠、高吞吐、高可用、可伸缩几大特性 , 成为数据管道技术的首选 。
越来越多人开始使用Kafka , 对学习源码的需求也愈发强烈 , 原因主要有以下几个方面:
了解Kafka底层原理 , 从而搞懂Kafka高性能的实现机制;
快速分析定位线上问题 , 有针对性地制定调优方案 , 提升编码功力;
Kafka的很多优秀设计理念和特性 , 在官方文档中并未得到充分阐述;
很多互联网公司在招聘资深技术岗时 , 都要求“至少读过一种开源框架的源码”;
加入Kafka开源社区 , 成为一名代码贡献者——一旦你的代码被社区采纳 , 全世界Kafka使用者都会用你写的代码 。
但我发现 , 大部分人在阅读源码时 , 还是会遇到很多问题 , 比如:源码这么多 , 不知道该重点掌握哪些内容;读源码时缺乏科学的方法 , 无数次从入门到放弃;知识不够体系化 , 遇到底层原理等常见面试题 , 很难有良好表现等等 。
其实 , 阅读源码并不难 , 重点是掌握科学的方法——用最高效的方式 , 读最核心的源码 。
所以 , 我和极客时间合作 , 开设了第二个专栏《Kafka核心源码解读》 , 带你深入理解Kafka的底层原理 , 掌握源码的高效阅读法 , 快速定位线上问题并制定调优方案 。 同时 , 通过25个典型案例+面试题讲解 , 为你分享实用的避坑指南 , 积累常见问题的解决方案 , 彻底拿下Kafka核心源码 。
扫码免费试读
结算时 , 输入优惠口令「gogokafka」
到手仅¥58 , 立省¥41
仅限「前100人」有效
我是谁?
我是胡夕 , 极客时间《Kafka核心技术与实战》专栏作者 , 友信金服商业智能部总监 , ApacheKafkaContributor , 目前在社区贡献排行榜上位列21 。
曾主导过多个十亿级/天的消息引擎业务系统的设计与搭建 , 致力于线上环境定位和诊断调优 , 为多家大型公司提供过企业级Kafka培训 。
如何高效阅读源码?
通常来说 , 阅读大型项目源码的方法有2种:
自上而下(Top-Down):从最顶层或外层的代码步步深入 。 通俗点说 , 就是从main函数开始 , 逐渐向下深入 , 直到最底层的代码 。 其好处在于 , 你可以遍历完整的顶层功能路径 , 进而了解各个功能的整体流程 。
自下而上(Bottom-Up):与自上而下相反 , 先搞懂每个组件的代码和实现机制 , 然后不断向上延展 , 并最终将其组装起来 。 这种方法 , 有助于你掌握底层的基础组件代码 。
以上两种方法各有千秋 , 但在学习Kafka源码的过程中 , 我发现将两者相结合可以实现1+1>2的效果 。 那么 , 具体该怎么做呢?
首先 , 确认最小单位的组件——主要看Kafka源码中的包结构(packagestructure) , 比如controller、log、server等 , 这些基本上是按照组件划分的 , 其优先级顺序是“log-->network-->controller-->server-->coordinator-->……” , 因为后面的组件 , 会频繁调用前面的组件 。
在你了解单个组件的源码结构后 , 就可以切换成自上而下的方式 , 从一个大的功能点入手 , 逐步深入到各个底层组件的源码 。 得益于前面的积累 , 你会对下沉过程中碰到的各层基础代码非常熟悉 , 这会给你很大的成就感 。
关于如何选择大的功能点 , 可以从Kafka的命令行工具开始这种串联学习 , 搞明白每一步是如何实现的 , 在向下钻取的过程中不断复习单个组件的原理 , 并将其结合在一起 。
比起单纯使用自上而下或自下而上的方式 , 这套混合方法兼具了二者的优点 。 随着一遍遍地重复这个过程 , 你会熟知各个组件间的交互逻辑 , 成为一个源码高手 。
怎样找到最核心的源码?
知道了阅读源码的高效方法后 , 就可以开始学习了 。 在深入细节之前 , 我为你总结了一张Kafka源码全景图 , 带你梳理学习的重点 , 找到最核心的源码 。


推荐阅读