wangzzu / awesome

不积硅步,无以至千里
227 stars 47 forks source link

Flink 源码分析 #28

Closed wangzzu closed 9 months ago

wangzzu commented 5 years ago

近段时间会花时间研究 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 的内容,但是我还是准备自己再开一个系列,出发点有两点:

  1. 自己更好地理解这个系统,别人梳理再好,也不如自己梳理一遍,这个过程肯定会让自己更好地掌握这套系统;
  2. 给其他想学习 Flink 的同学多个参考,不同人写的博客他们的理解是不同的,大家可以多看一些,可以更好、更快地熟悉这个系统。

之前写过 Kafka 源码分析的系列博客,说实话,这个系列写得整体并不是很满意,其他同学看的时候并不是那么容易理解,所以对于 Flink 这个系列文章还是期望能完成得更好一些。对于这个系列的博客,希望做到以下几点:

  1. 文章的质量的把控:逻辑性、叙述得准确性,最好每篇文章能单独成一个模块,既能让初学者可以很清晰看明白这篇文章要讲述的内容,又要有一定的深度(深入分析是必不可少的,不能蜻蜓点水),让进阶者也能有一定的收获;
  2. 单篇文章篇幅不要太长,如果太长,最好拆成多篇文章来讲述;
  3. 图 & 示例 & 思考:尽量多用图来表达,可以举示例的地方举出一些示例,每篇文章最后总结也要多一些思考总结、多想一些为什么(这个是要解决什么问题、你来解决的话你会怎么解决这个问题、Flink 在实现的时候为什么要这么设计、这个代码实现有更好的实现方式或者有没有什么可借鉴的地方); 最后,希望自己能很好地完成这个系列,希望能在 20 年前完成这个系统,到现在也就不到三个月了,加油,挑战一下试试~ -- 2019.10.20 立
zhougit86 commented 5 years ago

@wangzzu 大佬什么时候开始介绍flink,谢谢

wangzzu commented 5 years ago

@zhougit86 快了,最近有点忙,下周开始写 Flink 相关的博客,争取半年内把核心内容介绍完。

zhaochuanyun commented 5 years ago

请教个问题,flink里面的datastream都是按照window的方式进行操作的吗?如果不手动指定datasteam的window操作直接进行其他算子的运算,默认会把datastream转成window再来操作吗?

wangzzu commented 5 years ago

@zhaochuanyun 这个代码实现我还没看,但我理解应该不会这样做,如果不需要 window,DataStream 再转化为 window 去做,性能反而会受影响,这个有点使力太猛了

wangzzu commented 5 years ago

整体还是会是以源码分析的形式来讲述。

这个系列会以最新的 1.9 代码为示例,按照以下模块来介绍:

  1. runtime 相关,会涉及到 graph 转换、调度模块(主要还是分布式实现相关)、state 和 checkpoint 来介绍;
  2. SQL 模块,这块包含的内容也有很多,会单独来介绍。
  3. 算子模块(包含 DataStream/Table API),也会涉及到 operator 相关的内容;

Runtime 模块

  1. Apache Flink 初探,Flink 的 简介、架构、部署和示例,完成时间:2019-11-23;

Graph 转换

  1. StreamGraph 的转换:Flink DataStream API 概述及 StreamGraph 如何转换,完成时间:2019-12-08;
  2. JobGraph 的转换:Flink Streaming 作业如何转化为 JobGraph,完成时间:2019-12-10;
  3. ExecutionGraph 的转换:Flink 如何生成 ExecutionGraph,完成时间:2019-12-19;

调度模块

  1. Flink Master:包含三部分:Resource Manager, Dispatcher and JobManager,主要介绍前两个,Flink Master 详解,完成时间:2019-12-23;
  2. Flink JobManager 详解,完成时间:2019-12-27;
  3. TaskManager 详解第一篇 Flink TaskManager 详解(一),计划时间:2020-01-05 前,完成时间:2020-03-15;
  4. Flink 基于 MailBox 实现的 StreamTask 线程模型,完成时间:2020-03-22;
  5. 调度模型,计划时间:2020-01-05 前;
  6. Flink 中的 AKKA 应用;
  7. Flink 中的 BlobServer;
  8. TaskManager 的内存管理;
  9. JobManager 的 HA 实现;

state & checkpoint

  1. StateBackend 实现;
  2. Checkpoint 流程;

on yarn

  1. Yarn 提交流程详解;

Shuffle 模块

  1. 网络协议栈;
  2. Shuffle 实现;

SQL 模块

算子模块

wangzzu commented 4 years ago

这个 issue 今年最终还是没搞完,抽空得赶紧搞

wangzzu commented 4 years ago

当前网上 Flink 的博客还是比较多的,后续的文章(第九篇开始)尽量会写出自己的特色,按照相应的小模块去总结。

herefree commented 4 years ago

期待大佬更新

wangzzu commented 4 years ago

@herefree 最近工作有所变动,比较忙一些,等过了这段时间争取早点把这个系列更新完

bitxiaoGit commented 3 years ago

等待大佬进行更新

brokenpieces commented 3 years ago

不错呀大佬。

Mrzyxing commented 2 years ago

很好的榜样!
我也开始走读源码啦,如果后续能写完,再补一下我的,大家互相交流下~

wangzzu commented 9 months ago

give up and close