Ø 认识:一个flink程序被映射为一个Stream DataFlow,分别由Stream、Transformation两部分构成。
Ø Stream:实时数据流,Redistribution模式下stream被分为很多Stream分区(StreamPartitions)。
Ø Transformation:transformation operator,operator可以被分为很多suboperator,在TaskManager里TaskSlot中运行,suboperator的个数等于该operator的并行度。
Ø Task chain:对于某些suboperator,两个连续的operator操作,可以在同一个线程中运行,可以提高线程切换、资源等方面的效率。
Ø Time:Event Time(时间产生时间),Ingestion Time(事件进入stream dataflow时间),Processing Time(事件在某个operator被处理的本地时间)。
Ø Window:按时间或者个数分为两种,具体的窗口类型代码中再研究其区别。
2. 组件栈
3. 架构
基本流程:
Client提交flink job请求,该job以JobGraph的形式提交,其实就是一个DAG,是流处理的一个逻辑视图,JobManager收到flink job后,生成ExecutionGraph,依然是一个DAG图,只不过是并行数据流处理的物理视图,该图由Execution Vertexs和intermediate Result [Partitions]组成,注意Execution的概念,是一个Operator的一次Attempt,具体流程如下图所示。
物理调度:
到目前为止,这些DAG图从某种层面上还一直都是逻辑表示, Execution Job Vertex本质上是一个suboperator操作,该实现物理分布在TaskManager机器上的TaskSlot中,TaskSlot是资源占有的一个单位,有点类似于进程,物理上Execution Job Vertex就分布在这些TaskSlot中。
4. 迭代机制
Ø Iterator
个人理解:输入经过step函数产生迭代输出,该输出继续作为step的输入,如此迭代下去,直到迭代完成,产生迭代输出。
Ø Delta Iterator
个人理解:增点迭代有两个流,workSet和Solution Set,WorkSet经过一次step迭代,增量作用到Solution Set,如此这样迭代下去。
疑问点:WorkSet大小和Solution Set是一样的吗,如果不一样怎么作用到Solution Set中,是做截断或者不起操作吗。还是说WorkSet中的每个元素是作用到整个SolutionSet上的,这样对于Solution Set,每个元素的增量其实是一样的,增量迭代应该不是这样理解的吧。
5. 容错机制(checkpoint)
个人理解:每个StreamPartitions里针对每个Snapshot都会填充一个barrier,该barrier携带了snapshot的一些信息,operator收到各种stream,会根据各个stream接收到的barrier补齐一个完整的snapshot,如果所有的sink操作都完成,则通知checkpoint coordinator。
备注:这块目前掌握的资料还是有些少,理解不到位。
6. Backpressure机制(其实是监控每个Suboperator的状态)
参考文档:
https://blog.csdn.net/jdoouddm7i/article/details/62039337
https://blog.csdn.net/yanghua_kobe/article/details/51298871
https://blog.csdn.net/u010022051/article/details/51481189