Flink 源码分析
近段时间会花时间研究 Flink 源码实现相关的内容,这个 issue 会记录相关的总结文章(2019.3.19立,计划半年左右把 core、runtime、table&sql 部分的内容梳理完,这个系列的文章大概会叫做【Flink 原理与实现分析】)。
最近半年工作比较忙,这个系列一直没有开始,上周 Flink 1.9 正式发布了,后面会以 Flink 1.9 的代码为例,整理一下 Flink 相关的内容,计划元旦前把几个核心的模块整理完。--- 2019.8.25 立
以 Apache Flink 1.9 的代码为例,来系统全面地分析一些 Flink 的实现,虽然 Google 上已经可以搜到很多 Flink 的内容,但是我还是准备自己再开一个系列,出发点有两点:
- 自己更好地理解这个系统,别人梳理再好,也不如自己梳理一遍,这个过程肯定会让自己更好地掌握这套系统;
- 给其他想学习 Flink 的同学多个参考,不同人写的博客他们的理解是不同的,大家可以多看一些,可以更好、更快地熟悉这个系统。
之前写过 Kafka 源码分析的系列博客,说实话,这个系列写得整体并不是很满意,其他同学看的时候并不是那么容易理解,所以对于 Flink 这个系列文章还是期望能完成得更好一些。对于这个系列的博客,希望做到以下几点:
- 文章的质量的把控:逻辑性、叙述得准确性,最好每篇文章能单独成一个模块,既能让初学者可以很清晰看明白这篇文章要讲述的内容,又要有一定的深度(深入分析是必不可少的,不能蜻蜓点水),让进阶者也能有一定的收获;
- 单篇文章篇幅不要太长,如果太长,最好拆成多篇文章来讲述;
- 图 & 示例 & 思考:尽量多用图来表达,可以举示例的地方举出一些示例,每篇文章最后总结也要多一些思考总结、多想一些为什么(这个是要解决什么问题、你来解决的话你会怎么解决这个问题、Flink 在实现的时候为什么要这么设计、这个代码实现有更好的实现方式或者有没有什么可借鉴的地方); 最后,希望自己能很好地完成这个系列,希望能在 20 年前完成这个系统,到现在也就不到三个月了,加油,挑战一下试试~ -- 2019.10.20 立
@wangzzu 大佬什么时候开始介绍flink,谢谢
@zhougit86 快了,最近有点忙,下周开始写 Flink 相关的博客,争取半年内把核心内容介绍完。
请教个问题,flink里面的datastream都是按照window的方式进行操作的吗?如果不手动指定datasteam的window操作直接进行其他算子的运算,默认会把datastream转成window再来操作吗?
@zhaochuanyun 这个代码实现我还没看,但我理解应该不会这样做,如果不需要 window,DataStream 再转化为 window 去做,性能反而会受影响,这个有点使力太猛了
整体还是会是以源码分析的形式来讲述。
这个系列会以最新的 1.9 代码为示例,按照以下模块来介绍:
- runtime 相关,会涉及到 graph 转换、调度模块(主要还是分布式实现相关)、state 和 checkpoint 来介绍;
- SQL 模块,这块包含的内容也有很多,会单独来介绍。
- 算子模块(包含 DataStream/Table API),也会涉及到 operator 相关的内容;
Runtime 模块
- Apache Flink 初探,Flink 的 简介、架构、部署和示例,完成时间:2019-11-23;
Graph 转换
- StreamGraph 的转换:Flink DataStream API 概述及 StreamGraph 如何转换,完成时间:2019-12-08;
- JobGraph 的转换:Flink Streaming 作业如何转化为 JobGraph,完成时间:2019-12-10;
- ExecutionGraph 的转换:Flink 如何生成 ExecutionGraph,完成时间:2019-12-19;
调度模块
- Flink Master:包含三部分:Resource Manager, Dispatcher and JobManager,主要介绍前两个,Flink Master 详解,完成时间:2019-12-23;
- Flink JobManager 详解,完成时间:2019-12-27;
- TaskManager 详解第一篇 Flink TaskManager 详解(一),计划时间:2020-01-05 前,完成时间:2020-03-15;
- Flink 基于 MailBox 实现的 StreamTask 线程模型,完成时间:2020-03-22;
- 调度模型,计划时间:2020-01-05 前;
- Flink 中的 AKKA 应用;
- Flink 中的 BlobServer;
- TaskManager 的内存管理;
- JobManager 的 HA 实现;
state & checkpoint
- StateBackend 实现;
- Checkpoint 流程;
on yarn
- Yarn 提交流程详解;
Shuffle 模块
- 网络协议栈;
- Shuffle 实现;
SQL 模块
算子模块
这个 issue 今年最终还是没搞完,抽空得赶紧搞
当前网上 Flink 的博客还是比较多的,后续的文章(第九篇开始)尽量会写出自己的特色,按照相应的小模块去总结。
期待大佬更新
@herefree 最近工作有所变动,比较忙一些,等过了这段时间争取早点把这个系列更新完
等待大佬进行更新
不错呀大佬。
很好的榜样!
我也开始走读源码啦,如果后续能写完,再补一下我的,大家互相交流下~
give up and close