
Flink 1.12.2 源码
文章平均质量分 91
张伯毅
某厂技术,Apache DolphinScheduler Committer.
专注于调度&实时&大数据体系~
展开
-
Flink 1.12.2 源码浅析 : 网络参数大全
Flink1.12.2 网络通讯的配置参数&默认值 都是在NettyShuffleEnvironmentOptions类里面.内容如下(忽略已过期的参数.) :Network General Options名称描述默认值taskmanager.data.porttaskmanager通讯端口0taskmanager.data.bind-port任务管理器为进行数据交换而侦听的本地网络端口。与taskmanager.data.port 互斥taskm原创 2021-05-26 19:55:55 · 659 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : Task数据输入
在 Task 中,InputGate 是对输入的封装,InputGate 是和 JobGraph 中 JobEdge 一一对应的。也就是说,InputGate 实际上对应的是该 Task 依赖的上游算子(包含多个并行子任务),每个 InputGate 消费了一个或多个 ResultPartition。InputGate 由 InputChannel 构成,InputChannel 和 ExecutionGraph 中的 ExecutionEdge 一一对应;也就是说, InputChannel 和 Re原创 2021-05-24 00:34:54 · 1044 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 :Task数据输出
.一 .前言二 .几个基本概念2.1. IntermediateDataset2.2. IntermediateResult 和 IntermediateResultpartition2.3. ResultPartition 和 ResultSubpartition2.4. InputGate 和 InputChannel三 .相关Class梳理3.1. ResultPartitionWriter3.2. ResultPartition3.2.1. 属性相关3.2.2. 构造方法3.2.3. 方法相关3.3原创 2021-05-20 00:03:57 · 1200 阅读 · 1 评论 -
Flink 1.12.2 源码浅析 : 内存管理相关
.一 .前言二 .代码2.1. 属性2.2. 构造方法2.3. 方法三. 实现类一 .前言flink 从一开始就选择了使用自主的内存管理,原因如下:Java对象存储密度低。Java的对象在内存中存储包含3个主要部分:对象头,实例数据,拆分填充部分。例如,一个只包含boolean属性的对象占16byte:对象头占8byte,boolean属性占1字节,为了对齐达到8的倍数额外占7字节。而实际上只需要一个bit(1/8字节)就够了。Full GC会极大地影响性能。尤其是为了处理大量数据而开了很大原创 2021-05-11 22:55:49 · 720 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : StreamTask 浅析
.一 .前言二 .AbstractInvokable2.1. 属性&初始化2.2. Environment2.3. 方法清单三 .StreamTask3.1. 属性3.2. invoke一 .前言在Task类的doRun方法中, 首先会构建一个运行环境变量RuntimeEnvironment . 然后会调用loadAndInstantiateInvokable方法来加载&实例化task的可执行代码 .可以看一下loadAndInstantiateInvokable 方法会根据传入的类原创 2021-05-07 22:53:31 · 875 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : Task 浅析
.一 .前言二 .代码浅析2.1. 属性2.2. 构造方法2.3. xxx2.4. xxx2.5. xxx2.6. xxx一 .前言Task 表示TaskManager上并行 subtask 的一次执行。Task封装了一个Flink operator(也可能是一个用户function )并运行它,提供使用输入数据、生成结果(中间结果分区)和与JobManager通信所需的所有服务。Flink操作符(实现为{@link AbstractInvokable}的子类)只有数据读取器、编写器和某些事件回调原创 2021-05-05 23:05:55 · 772 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : TaskExecutor
.一 .前言二 .TaskExecutorGateway2.1. 类图2.2. 接口清单三 .代码浅析3.1. 属性3.1.1. 服务相关3.1.2. TaskManager相关服务3.1.3. 任务slot分配表3.1.4. resource manager 相关3.1.5. 其他3.2. 核心方法3.2.1. requestSlot3.2.2. freeSlot3.2.3. submitTask3.2.4. updatePartitions3.2.5. triggerCheckpoint3.2.6.原创 2021-05-04 13:39:31 · 1271 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : TaskSlotTable
.一 .前言二 .TaskSlotTable 接口三 .TaskSlotTableImpl3.1. 属性相关3.1.1. slot 相关3.1.2. 其他属性3.1.3. 构造方法3.2. 方法相关3.2.1. start3.2.2. closeAsync3.2.3. createSlotReport3.2.4. allocateSlot3.2.5. freeSlot -> freeSlotInternal3.2.6. 任务相关(add/remove/getTask)3.2.7. 获取信息相关3.2.原创 2021-05-04 10:34:55 · 960 阅读 · 1 评论 -
Flink 1.12.2 源码浅析 : TaskSlot
.一 .前言二 . 属性三. 方法3.1. 任务相关3.1.1. 获取标识3.1.2. 添加任务3.1.3. 获取任务3.1.4. 移除任务3.1.5. 清理所有task3.2. 状态相关3.3. get/set相关一 .前言属于同一slot的多个{@link TaskSlotPayload tasks}的容器。TaskSlot 可以处于以下状态之一:1. 空闲[Free]-slot为空,未分配给作业2. 释放中[Releasing]-slot变空后即将释放。3. 已分配[Allocated]-原创 2021-04-29 22:15:53 · 601 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 :SlotManager
.一 .前言二 .SlotManager2.1. 介绍2.2. 接口清单三 .SlotManagerImpl3.1. 属性清单3.2. 构造方法3.3. 方法详单3.3.1. start3.3.2. suspend3.3.3. int getNumberRegisteredSlots()3.3.4. int getNumberRegisteredSlotsOf(InstanceID instanceId)3.3.5. int getNumberFreeSlots()3.3.6. int getNumberF原创 2021-04-28 22:05:54 · 988 阅读 · 2 评论 -
Flink 1.12.2 源码浅析 : SlotPool
.一 .前言二 .SlotPool2.1. 介绍2.2. 生命周期相关接口2.3. resource manager 连接相关2.4. Slot操作相关三 .SlotPoolImpl 实现类3.1. 前言3.2. 属性3.3. 生命周期相关接口3.3.1. start3.3.2. suspend3.3.3. close3.4. resource manager 连接相关3.4.1. connectToResourceManager3.4.2. disconnectResourceManager3.4.3原创 2021-04-28 21:21:22 · 1061 阅读 · 2 评论 -
Flink 1.12.2 源码浅析 : Task的调度
.一 .前言二 .程序分析2.1. 代码入口2.2. xxx2.3. xxx2.4. xxx2.5. xxx2.6. xxx三 .xxxxxx3.1. xxx3.2. xxx3.3. xxx3.4. xxx3.5. xxx3.6. xxx四 .xxxxxx4.1. xxx4.2. xxx4.3. xxx4.4. xxx4.5. xxx4.6. xxx五 .xxxxxx六 .xxxxxx七 .xxxxxx一 .前言在生成ExecutionGraph之后, Flink就可以根据ExecutionGraph生原创 2021-04-27 00:16:51 · 1094 阅读 · 4 评论 -
Flink 1.12.2 源码浅析 : ExecutionGraph
.一 .前言二 .数据结构2.1. ExecutionJobVertex2.1.1. AccessExecutionJobVertex2.1.2. Archiveable2.1.3. ArchivedExecutionJobVertex2.1.4. ExecutionVertex2.1.5. IntermediateResult2.1.6. ExecutionVertex2.1.7. ExecutionEdge2.1.8. ExecutionJobVertex2.2. ExecutionJobVertex#原创 2021-04-25 20:30:57 · 796 阅读 · 0 评论 -
Flink 使用IntelliJ IDEA 进行远程调试代码
.一 .前言二 .服务器端配置.2.1. 设置启动远程debug端口2.2. 具体操作三 .Idea配置3.1. 配置远程连接3.3. 启动调试一 .前言Flink on Yarn 不好调试, 所以需要用到远程调试.注意 : 开启远程调试的代码,必须与本地idea的代码必须保持一致.二 .服务器端配置.2.1. 设置启动远程debug端口修改 服务器上的配置文件 ${FLINK_HOME}/flink-config.yaml 增加 环境变量即可.参考的设置组件环境变量设置原创 2021-04-06 22:29:52 · 2297 阅读 · 3 评论 -
Flink 1.12.2 源码浅析 : JobGraph
.一 .前言二 .数据结构2.1. JobVertex2.2. JobEdge2.3. 数据实例三 .代码浅析3.1. 入口3.2. StreamingJobGraphGenerator 属性3.3. StreamingJobGraphGenerator#createJobGraph3.3. StreamingJobGraphGenerator#setChaining一 .前言StreamGraph 转变成 JobGraph 也是在 Client 完成,主要作了四件事:⚫ StreamNode 转成原创 2021-04-19 21:38:14 · 842 阅读 · 0 评论 -
Flink 1.12.2 源码分析 : 官方 Flink Plan Visualizer 使用.
一. 前言官方提供了获取执行计划的WEB页面. 入口 : https://flink.apache.org/visualizer/二. 使用2.1. 获取执行计划json字符串.获取执行计划的json字符串很简单. 就是在代码里面加一个输出就行了.System.out.println(env.getExecutionPlan());在这里插入图片描述获取的json字符串如下 :{ "nodes" : [ { "id" : 1, "type" : "Source:原创 2021-04-17 23:23:07 · 987 阅读 · 1 评论 -
Flink 1.12.2 源码分析 : StreamGraph生成
.一 .前言二 .代码2.1. 入口位置2.2. xxx2.3. xxx2.4. xxx2.5. xxx2.6. xxx三 .xxxxxx3.1. xxx3.2. xxx3.3. xxx3.4. xxx3.5. xxx3.6. xxx四 .xxxxxx4.1. xxx4.2. xxx4.3. xxx4.4. xxx4.5. xxx4.6. xxx五 .xxxxxx六 .xxxxxx七 .xxxxxx一 .前言StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示原创 2021-04-17 22:53:40 · 922 阅读 · 2 评论 -
Flink 1.12.2 源码浅析 : 目录汇总 [持续更新中....]
Flink 1.12.2 源码浅析 : 环境准备Flink 1.12.2 源码浅析 : 本地DEBUG环境准备Flink 1.12.2 源码浅析 : 相关启动脚本Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [三]Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [四]Flink 1.原创 2021-04-16 01:26:54 · 1845 阅读 · 1 评论 -
Flink 1.12.2 源码浅析 : DataStream
.一 .前言二 .xxxxxx2.1. xxx2.2. xxx2.3. xxx2.4. xxx2.5. xxx2.6. xxx三 .xxxxxx3.1. xxx3.2. xxx3.3. xxx3.4. xxx3.5. xxx3.6. xxx四 .xxxxxx4.1. xxx4.2. xxx4.3. xxx4.4. xxx4.5. xxx4.6. xxx五 .xxxxxx六 .xxxxxx七 .xxxxxx一 .前言Flink 的 Java 和 Scala DataStream API 可以将任何可序列化原创 2021-04-15 21:38:04 · 796 阅读 · 1 评论 -
Flink 1.12.2 源码浅析 : AbstractUdfStreamOperator
.一 .前言二 .xxxxxx2.1. xxx2.2. xxx2.3. xxx2.4. xxx2.5. xxx2.6. xxx三 .xxxxxx3.1. xxx3.2. xxx3.3. xxx3.4. xxx3.5. xxx3.6. xxx四 .xxxxxx4.1. xxx4.2. xxx4.3. xxx4.4. xxx4.5. xxx4.6. xxx五 .xxxxxx六 .xxxxxx七 .xxxxxx一 .前言二 .xxxxxx2.1. xxx2.2. xxx2.3. xxx2.4. xxx原创 2021-04-15 20:20:23 · 707 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : Transformation 浅析
.一 .前言二 .代码相关2.1. 属性2.2. 构造方法2.3. 资源相关2.4. 获取属性相关(需要子类实现)三 .实现类3.1. PhysicalTransformation3.2. UnionTransformation3.3. PartitionTransformation3.3.1. 属性3.3.2. 构造方法3.3.3. 获取属性相关3.3.4. ShuffleMode3.3.5. StreamPartitioner3.3.5.1. IOReadableWritable 定义的方法清单 :3原创 2021-04-14 21:58:20 · 1210 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : AbstractRichFunction
.一 .前言二 .代码相关2.1. RichFunction2.1.1 void open(Configuration parameters) throws Exception;2.1.2 void close() throws Exception;2.1.3 RuntimeContext getRuntimeContext();2.1.4 IterationRuntimeContext getIterationRuntimeContext();2.1.5 void setRuntimeContext(Ru原创 2021-04-13 23:00:34 · 1607 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : DataSource如何获取数据并返回DataStream
.一 .前言二 .代码分析2.1. 入口2.2. SocketTextStreamFunction2.2.1. SourceFunction接口2.2.2. SourceContext2.2.3. 属性2.2.4. 构造方法2.2.5. run(SourceContext ctx)2.2.6. cancle ()2.2.7. 官方提供的SourceFunction示例2.3. addSource三 .StreamSource四 .DataStreamSource五 .ParallelSourceFuncti原创 2021-04-13 21:57:21 · 1226 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : StreamExecutionEnvironment
.一 .前言二 .静态属性相关2.1. 属性定义2.2. 属性值三 .构造方法相关3.1. 构造方法3.2. 配置相关四 .初始化4.1. initializeContextEnvironment4.2. getExecutionEnvironment五 .Source相关方法5.1. addSource相关方法5.2. Source相关的数据方法六 . execute 相关七 . StreamGraph相关八 . addOperator九 .getExecutionEnvironment 相关十 .其他原创 2021-04-12 22:55:02 · 2682 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : SocketWindowWordCount 代码简析
.一 .前言二 .代码解析2.1. StreamExecutionEnvironment.getExecutionEnvironment2.2. source加载数据2.3. Source数据实现2.3.1. SourceFunction 接口.2.3.2. SocketTextStreamFunction 实现2.3.3. addSource 实现2.4. flatMap 函数2.5. keyBy 函数2.6. window 函数2.7. reduce 函数2.8. windowCounts.print(原创 2021-04-10 00:00:13 · 772 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : Graph 概念梳理
.一 .前言二 .名词解释2.1. StreamGraph2.2. JobGraph2.3. ExecutionGraph:2.4. 物理执行图二 .Flink 四层转化流程2.1. Program 到 StreamGraph 的转化2.2. StreamGraph 到 JobGraph 的转化2.3. JobGraph 到 ExexcutionGraph 以及物理执行计划一 .前言Flink 中的执行图可以分成四层: StreamGraph -> JobGraph -> Executio原创 2021-04-08 23:18:58 · 933 阅读 · 1 评论 -
Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [四]
.一 .前言二 .代码分析2.1. 执行入口2.2. TaskManagerRunner#runTaskManagerProcessSecurely2.3. TaskManagerRunner#runTaskManager2.4. 启动 TaskManagerRunner2.5. 向ResourceManager注册&启动2.6. RetryingRegistration#startRegistration();2.7. 注册成功 TaskExecutor#onRegistrationSuccess原创 2021-03-24 20:47:36 · 1646 阅读 · 2 评论 -
Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [三]
.一 .前言二 .代码分析2.1. YarnJobClusterEntrypoint#main2.2. ClusterEntrypoint#runCluster2.3. DefaultDispatcherResourceManagerComponentFactory#create三 . Dispatcher 相关3.1. 构建3.2. 启动四 .JobManager 相关4.1. 启动4.2. 执行五 .ResourceManager 相关5.1. 构建5.2. 启动一 .前言继续上两节 :Fli原创 2021-03-24 19:33:05 · 1018 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [二]
.一 .前言二 .启动解析2.1. StreamExecutionEnvironment#execute2.2. xxx2.3. xxx2.4. xxx2.5. xxx2.6. xxx三 .xxxxxx3.1. xxx3.2. xxx3.3. xxx3.4. xxx3.5. xxx3.6. xxx四 .xxxxxx4.1. xxx4.2. xxx4.3. xxx4.4. xxx4.5. xxx4.6. xxx五 .xxxxxx六 .xxxxxx七 .xxxxxx五 .YarnJobClusterEntryP原创 2021-03-17 21:54:37 · 2126 阅读 · 4 评论 -
Flink 1.12.2 源码浅析 : yarn-per-job模式解析 [一]
.一 .前言二 .启动程序入口2.1. 启动数据服务端2.2. 提交Flink 任务.三 .flink命令入口3.1. 提交命令3.2. DEBUG环境准备3.3. 构建测试入口类: CliFrontendTest四 . CliFrontend4.1. CliFrontend#main4.2. CliFrontend#parseAndRun(args)4.3. CliFrontend#run4.4. CliFrontend#executeProgram4.5. ClientUtils#executeProg原创 2021-03-12 23:31:40 · 2331 阅读 · 3 评论 -
Flink 1.12.2 源码浅析 : 相关启动脚本
.一 .前言二 .start-cluster.sh2.1. 加载全局配置函数config.sh2.2. 启动 jobManger2.3. 启动TaskManager实例2.4. 完整代码三 .jobmanager.sh四 .taskmanager.sh五 .flink-daemon.sh5.1.JobManager启动指令5.2.TaskManger启动指令一 .前言主要看一下Flink常用的几个脚本调用.服务入口类备注taskexecutororg.apache.flink原创 2021-03-11 22:06:54 · 5059 阅读 · 5 评论 -
Flink 1.12.2 源码浅析 : 本地DEBUG环境准备
.一 .前言二 .环境准备2.1. Hdfs & Yarn 环境.2.2. Flink2.2.1. 文件下载2.3. 安装2.4. 配置环境变量2.5. 验证一 .前言准备开始看Flink的源码,为了方便,所以要准备一套可以DEBUG的环境.环境清单 :组件版本备注JDK1.8SCALA2.11.x…HDFS3.2.1…YARN3.2.1…Flink1.12.2…………………二 .环境准备2.1.原创 2021-03-11 22:06:28 · 1468 阅读 · 0 评论 -
Flink 1.12.2 源码浅析 : 环境准备
.一 .前言二 .安装文件准备三 .编译一 .前言 本文为准备Flink 1.12.2源码阅读环境准备. 二 .安装文件准备环境信息如下:名称版本MAC操作系统11.0.1JDK1.8.0_271Mavne3.6.3Flink1.12.2下载flink代码.从官方的github下载指定的代码目前最新的版本为1.12.2版本. (因为官方1.10版本之后有了很大的变动, 建议看1.11版本之后的代码)我看代码的时候,习惯写备注,为了原创 2021-03-10 12:18:20 · 1362 阅读 · 0 评论