如何阅读源码
-
自顶向下
-
这个以我们所看的项目的层次结构为主线。通过IDE将所有层级收缩,然后依次展开,先是module列表,通过这一层,我们可以看到flink项目中大致包含的主要模块。 了解后, 根据官网架构图去了解每个模块作用, 以及每个模块在架构图中的层次。了解清楚后开始下展, 展开src下的java/scala层级,这时又是一个最顶层的package列表, 它展示了这个模块下主要component(组件)的列表,这时要知道这些组件的作用以及如何进行协作的(根据官网的资料进行阅读), 当了解了每个component后找到这个module的入口方法, 然后从入口类进入, 利用下面的抓大放小思想去看多个component方法调用的编排流程图。当然不一定所有的component调用都体现在入口类中,对于这些类我们可以应用第三个技巧。
-
-
抓大放小
-
任何时候当你还没有足够了解一个东西的时候,不要纠结于实现的细节。不要一下子去看检查点里或者StreamTask里的方法中的实现细节。从某个入口类进去,一般它都是很多类方法调用的编排,这个时候先把编排看懂,千万不要看到一个调用,就跟进去看它的细节。先把整个编排的流程图刻在脑子里再说。
-
-
善用工具
-
IDEA
-
展示一个package下所有类的UML类继承关系图。这非常便于我们去了解哪些内部component的整体结构。当然在了解的时候,我们还是要遵循第二个技巧,抓大放小,先从接口看起。
-
另一个功能是,查看一个方法的调用关系,在菜单“Navigate” -> “Call Hierarchy”(选中一个方法)。可以查Caller或Callee,这两种链条,这非常有益于我们梳理调用链的关系。
-
-
-
交流思考