如何正确高效地阅读源代码?丨极客时间

2020 年 4 月 14 日 InfoQ

这几年,大数据技术发展迅猛,其中 Kafka 凭借高可靠、高吞吐、高可用、可伸缩几大特性,成为数据管道技术的首选。

越来越多人开始使用 Kafka,对学习源码的需求也愈发强烈,原因主要有以下几个方面:

  1. 了解 Kafka 底层原理,从而搞懂 Kafka 高性能的实现机制;

  2. 快速分析定位线上问题,有针对性地制定调优方案,提升编码功力;

  3. Kafka 的很多优秀设计理念和特性,在官方文档中并未得到充分阐述;

  4. 很多互联网公司在招聘资深技术岗时,都要求“至少读过一种开源框架的源码”;

  5. 加入 Kafka 开源社区,成为一名代码贡献者——一旦你的代码被社区采纳,全世界 Kafka 使用者都会用你写的代码。

但我发现,大部分人在阅读源码时,还是会遇到很多问题,比如:源码这么多,不知道该重点掌握哪些内容;读源码时缺乏科学的方法,无数次从入门到放弃;知识不够体系化,遇到底层原理等常见面试题,很难有良好表现等等。

其实,阅读源码并不难,重点是掌握科学的方法——用最高效的方式,读最核心的源码。

所以,我和极客时间合作,开设了第二个专栏《Kafka 核心源码解读》,带你深入理解 Kafka 的底层原理,掌握源码的高效阅读法,快速定位线上问题并制定调优方案。同时,通过 25 个典型案例 + 面试题讲解,为你分享实用的避坑指南,积累常见问题的解决方案,彻底拿下 Kafka 核心源码。

👆扫码免费试读

结算时,输入优惠口令「gogokafka」

到手仅 ¥58,立省 ¥41

仅限「前 100 人」有效

我是谁?

我是胡夕,极客时间《Kafka 核心技术与实战》专栏作者,友信金服商业智能部总监,Apache Kafka Contributor,目前在社区贡献排行榜上位列 21。

曾主导过多个十亿级 / 天的消息引擎业务系统的设计与搭建,致力于线上环境定位和诊断调优,为多家大型公司提供过企业级 Kafka 培训。

如何高效阅读源码?

通常来说,阅读大型项目源码的方法有 2 种:

  • 自上而下(Top-Down)从最顶层或外层的代码步步深入。通俗点说,就是从 main 函数开始,逐渐向下深入,直到最底层的代码。其好处在于,你可以遍历完整的顶层功能路径,进而了解各个功能的整体流程。

  • 自下而上(Bottom-Up):与自上而下相反,先搞懂每个组件的代码和实现机制,然后不断向上延展,并最终将其组装起来。这种方法,有助于你掌握底层的基础组件代码。

以上两种方法各有千秋,但在学习 Kafka 源码的过程中,我发现将两者相结合可以实现 1+1>2 的效果。那么,具体该怎么做呢?

首先,确认最小单位的组件——主要看 Kafka 源码中的包结构(package structure),比如 controller、log、server 等,这些基本上是按照组件划分的,其优先级顺序是“log-->network-->controller-->server-->coordinator-->……”,因为后面的组件,会频繁调用前面的组件。

在你了解单个组件的源码结构后,就可以切换成自上而下的方式,从一个大的功能点入手,逐步深入到各个底层组件的源码。得益于前面的积累,你会对下沉过程中碰到的各层基础代码非常熟悉,这会给你很大的成就感。

关于如何选择大的功能点,可以从 Kafka 的命令行工具开始这种串联学习,搞明白每一步是如何实现的,在向下钻取的过程中不断复习单个组件的原理,并将其结合在一起。

比起单纯使用自上而下或自下而上的方式,这套混合方法兼具了二者的优点。随着一遍遍地重复这个过程,你会熟知各个组件间的交互逻辑,成为一个源码高手。

怎样找到最核心的源码?

知道了阅读源码的高效方法后,就可以开始学习了。在深入细节之前,我为你总结了一张  Kafka 源码全景图,带你梳理学习的重点,找到最核心的源码。

从功能上讲,Kafka 源码分为四大模块。

  • 服务器端源码:实现 Kafka 架构和各类优秀特性的基础。

  • Java 客户端源码:定义了与 Broker 端的交互机制,及通用 Broker 端组件支撑代码。

  • Connect 源码:用于实现 Kafka 与外部系统的高性能数据传输。

  • Streams 源码:用于实现实时流处理功能。

你会发现,服务器端源码是理解 Kafka 底层架构,特别是系统运行原理的基础,其他三个模块源码非常依赖于它。因此,要解读 Kafka 源码,就要先拿下服务器端代码。

我是如何讲解 Kafka 源码的?

基于对服务器端源码的理解,我按功能将其划分为 7 个模块,每个模块都会展开详细介绍,包括各个组件的源码分析。它们都极具价值,是线上问题的“高发重灾区”,掌握它们将大幅提升你定位问题的速度。

细粒度讲解:流程图 + 代码注释 + 思维导图

我摒弃了贪多求全,将“流程图 + 代码注释”相结合,对重点内容进行细粒度讲解,并结合自己的实战经验,为你划出重点。

这样,在读源码前,你可以先通过流程图,对各个方法的实现逻辑有个大致的了解。同时,我会用详细的注释帮你理解重点内容,并在每讲末尾附思维导图一张,帮你总结回顾,加深印象。

真实案例讲解,累计解决方案

事实上,生产环境中的很多问题,都无法单纯依赖官方文档或搜索引擎来解决,只有读懂源码,掌握了实现原理,才能迅速找到解决方案。

所以,为了确保你能学以致用,我会在专栏里分享了 25+ 真实案例,帮你累计常见问题的解决方案,有一些甚至是不见诸于文档的“武林秘籍”。

传递社区新动向,及重大功能改进

Kafka 源码每天都在不断演进,想要玩转 Kafka,就要知道未来 Kafka 社区的更新计划及重大功能改进。

在专栏中,我会定期为你分享最新的动态资讯,让你真正有参与到社区的感觉。不要小看这种感觉,有时它甚至是支撑你走完源码学习之路的最强动力。

分享优质学习资料 + 经典面试题讲解

除此之外,我还会跟你分享一些延伸内容,比如:成为 Apache Kafka 社区代码贡献者的具体方法、实用的 Kafka 学习资料、经典面试题讲解等等。

现在订阅,有什么福利?

早鸟优惠 + 口令「gogokafka」到手价 ¥58

立省 ¥41 ,仅限 「前 100 人」 有效。

👆扫码免费试读

温馨提示

订阅后通过「极客时间 App」或「极客时间小程序」我的 - 已购,学习已订阅的专栏。

👇点击「阅读原文」

输入优惠口令「gogokafka」,
最低价 ¥58 入手,仅限 前 100 人
登录查看更多
0

相关内容

Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消费。
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
60+阅读 · 2020年6月26日
【干货书】现代数据平台架构,636页pdf
专知会员服务
259+阅读 · 2020年6月15日
《代码整洁之道》:5大基本要点
专知会员服务
50+阅读 · 2020年3月3日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
96+阅读 · 2019年12月4日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
167+阅读 · 2019年10月28日
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
如何快速入门TensorFlow ?丨极客时间
InfoQ
4+阅读 · 2019年1月8日
如何正确使用机器之心,高效学习人工智能
机器之心
4+阅读 · 2018年11月15日
开发、调试计算机视觉代码有哪些技巧?
AI研习社
3+阅读 · 2018年7月9日
Python 如何快速入门?
全球人工智能
6+阅读 · 2018年3月15日
从基础概念到实现,小白如何快速入门PyTorch
机器之心
13+阅读 · 2018年2月26日
学习大纲:两周搭建Demo理解机器学习
人人都是产品经理
5+阅读 · 2017年12月28日
Few-shot Adaptive Faster R-CNN
Arxiv
3+阅读 · 2019年3月22日
Arxiv
3+阅读 · 2018年6月19日
Arxiv
6+阅读 · 2018年4月4日
Arxiv
6+阅读 · 2018年3月28日
Arxiv
7+阅读 · 2018年1月24日
VIP会员
相关VIP内容
【2020新书】使用高级C# 提升你的编程技能,412页pdf
专知会员服务
60+阅读 · 2020年6月26日
【干货书】现代数据平台架构,636页pdf
专知会员服务
259+阅读 · 2020年6月15日
《代码整洁之道》:5大基本要点
专知会员服务
50+阅读 · 2020年3月3日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
96+阅读 · 2019年12月4日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
167+阅读 · 2019年10月28日
相关资讯
你真的会正确地调试 TensorFlow 代码吗?
数据库开发
7+阅读 · 2019年3月18日
如何快速入门TensorFlow ?丨极客时间
InfoQ
4+阅读 · 2019年1月8日
如何正确使用机器之心,高效学习人工智能
机器之心
4+阅读 · 2018年11月15日
开发、调试计算机视觉代码有哪些技巧?
AI研习社
3+阅读 · 2018年7月9日
Python 如何快速入门?
全球人工智能
6+阅读 · 2018年3月15日
从基础概念到实现,小白如何快速入门PyTorch
机器之心
13+阅读 · 2018年2月26日
学习大纲:两周搭建Demo理解机器学习
人人都是产品经理
5+阅读 · 2017年12月28日
相关论文
Top
微信扫码咨询专知VIP会员