LocalFlinkMiniCluster启动DataStream任务的流程

LocalFlinkMiniCluster 集群的actor 模型


  • 相关的主要类图如下:
image-20190415180352502.png
  • AkkaRpcActor持有一个rpcEndpoint成员,接收到消息后进行基础解析后调用rpcEndpoint的的对应方法来进行处理。

  • 其中RpcGateway及RpcEndPoint的类图


    image-20190415175424225.png
  • 支持的消息类型

    • 其中主要使用RpcInvocation基于反射调用RPCEndpoint的对应函数
    • FencedMessage 将message进行封装成payload,通过fencingToken进行校验,保证请求的合法性


      image-20190415175913490.png

LocalFlinkMiniCluster集群的角色


  • ResouceManager

    • 负责容器的分配
    • 使用FencedAkkaRpcActor实现,其rpcEndpoint为 org.apache.flink.runtime.resourcemanager.ResourceManager
  • JobMaster

    • 负责任务执行计划的调度和执行,

    • 使用FencedAkkaRpcActor实现,其rpcEndpoint为 org.apache.flink.runtime.jobmaster.JobMaster

      • JobMaster持有一个SlotPool的Actor,用来暂存TaskExecutor提供给JobMaster并被接受的slot。JobMaster的Scheduler组件从这个SlotPool中获取资源以调度job的task
  • Dispatcher

    • 主要职责是接收从Client端提交过来的job并生成一个JobMaster去负责这个job在集群资源管理器上执行。

      • 不是所有部署方式都需要用到dispatcher,比如yarn-cluster 的部署方式可能就不需要
    • 使用FencedAkkaRpcActor实现,其rpcEndpoint为 org.apache.flink.runtime.dispatcher.StandaloneDispatcher

  • TaskExecutor

    • TaskExecutor会与ResouceManager和 JobMaster两者进行通信。

      • 会向ResourceManager报告自身的可用资源;并维护本身slot的状态
      • 根据slot的分配结果,接收JobMaster的命令在对应的slot上执行指定的task。
      • TaskExecutor还需要向以上两者定时上报心跳信息。
    • 使用AkkaRpcActor实现,其rpcEndpoint为org.apache.flink.runtime.taskexecutor.TaskExecutor

启动DataStream任务的主体流程


image-20190417172051347.png
image-20190417174333612.png

参考资料


  • https://zhouhai02.com/post/flink-internals/flink1.6-flip6-flink-on-yarn-arch/
  • https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=65147077

你可能感兴趣的:(LocalFlinkMiniCluster启动DataStream任务的流程)