目录
1.TaskManager是什么?有什么作用?
2.TM对外提供的服务有什么?
3.TM的启动和停止流程是怎样的?
4.TM是如何管理slot资源的?
本文章以问题出发,希望能先对这些问题有些思考,在遇到不懂的之后再阅读完本文章能有所收获
1.TaskManager是什么?有什么作用?
(1)TaskManager是什么?
TaskManager是flink的worker节点,它负责具体任务的运行
(2)有什么作用?
①管理本地slot资源,并向JobManager提供本地资源相关信息
②运行task,实时监控task态并上报JobManager
2.TM对外提供的服务有什么?
(1)对外暴露的主要接口
主要功能:
①slot资源管理
requestSlot():RM向TM请求申请slot资源
freeSlot():RM向TM请求释放slot资源
②task运行、监控
submitTask():提交任务,启动用户的任务代码
cancelTask():取消任务
requestStackTraceSample():请求task在执行过程的一个stack trace抽样,用于backpress
updatePartitions():更新这个task对应的parition信息
releaseParition():释放这个job的所有中间结果
③checkpoint处理
triggerCheckpoint():Checkpoint Coordinator通知触发checkpoint(一阶段)
confirmCheckpoint():Checkpoint Coordinator通知task这个task的checkpoint完成了(二阶段)
④其他(建立连接)
heartbeatFromJobManager():处理JM的心跳请求
heartbeatFromResourceManager():处理RM的心跳请求
disconnectJobMnager()
disconnectResourceManager()
canBeReleased()
(2)相关组件
TaskSlotTable:管理taskslot的容器
3.TM的启动和停止流程是怎样的?
(1)启动(此处以yarn的TM启动为例)
①TaskManager的启动
... (ResourceManager申请到container后开始启动container)
NMClientAsync#startContainerAsync
(一系列远程调用,最终由NodeManager去启动容器)
->YarnTaskExecutorRunner#start
-->TaskExecutor#start
(rpc服务启动等一系列操作)
--->TaskExecutor#onStart
---->TaskExecutor#startTaskExecutorServices
----->ZookeeperLeaderRetrievalService#start *** 启动ha服务
----->TaskSlotTableImpl#start *** 启动taskslot的管理容器
----->JobLeaderService#start *** 启动jobLeader联系器,能时刻和JobManager的leader保持联系
②Task的启动
...(JobManager申请到资源后开始部署)
RpcTaskManagerGateway#submitTask
->TaskExecutor#submitTask *** 校验jobmaster、taskslot、JobID等一系列东西, 恢复checkpoint等东西
-->Task#startTaskThread
--->Task#run *** 在新线程中启动该任务
---->Task#doRun
----->AbstartInvokable#invoke *** 运行用户的任务代码
(2)停止
4.TM是如何管理资源的?
(1)TaskSlotTable?
通过TaskSlotTable实现对资源的管理
(2)资源的申请和释放流程?
①申请资源流程
TaskExecutor#requestSlot
->TaskSlotTable#allocateSlot
-->TaskSlot#allocate
②释放资源流程
TaskExecutor#freeSlot
->
(3)原理?