一.架构设计

  • 架构设计图
  • 各层及相关术语说明
  • 物理层
  • 解决flink的部署模式的问题
  • 支持多种部署模式:本地,集群,云及k8s
  • 用户可以根据不同的场景选择不同的部署模式
  • 核心层
  • 是flink的核心实现层,负责为上层的接口提供服务
  • Runtime
  • flink的核心计算
  • Optimizer
  • 负责任务的优化
  • Stream Buider
  • 负责对任务进行DAG优化
  • API层
  • 面向用户,负责更好的用户开发体验
  • 提供了流计算和批处理的接口,同时在这个基础上又开发了不同的组件库
  • 基于流处理的CEP(Complex event process,复杂事件处理)
  • Table和SQL
  • 基于批处理的机器学习库flinkML
  • 图处理库Gelly
  • API层包括两部分
  • 流处理应用的DataStream API
  • 批处理应用的DataSet API
  • 统一的API,包括直接操作状态和时间等底层数据

 二.运行模式

  • 各个运行模式的区分点
  • 集群的生命周期
  • 资源的隔离保障
  • 运行模式分类
  • 本地
  • standlone 独立flink集群,也就是集群中仅安装了flink
  • 集群运行
  • 经常是指flink on yarn
  • 三种
  • session
  • pre-job
  • application
  • 本地
  • 一个机器的单进程多线程模拟集群
  • 一般用于测试
  • standlone
  • 完全独立的flink集群,纯flink完成各种工作
  • 集群
  • session
  • 生命周期
  • 集群首先创建了一个回话等待客户端连接,单个任务结束后并不会关闭会话,可以接受多个作业的提交.
  • 一句话 : 保持会话通道,接受多个任务
  • 资源隔离
  • 由于所有作业共享同一个集群,所以如果一个TaskManager失败,它上所有的任务都将失败,一个JobManager失败,它将影响集群中运行的所有作业
  • 一句话 : 管理者宕掉,任务全部GG
  • 总结
  • 速度快,但是有风险
  • 工作模式
  • 附加模式(默认)
  • 特点
  • 客户端与flink作业集群同步
  • 细节
  • 客户端将集群交给yarn,但是客户端保持运行,持续追踪集群状态
  • 但是如果集群发生错误,客户端将显示,如果客户端关闭,对应也会通知集群关闭
  • 一句话:session模式下的flink默认就是这个,客户端与集群一个关,都关
  • 分离模式
  • 特点
  • 客户端与flink集群相互异步,客户端提交完成后就可以退出
  • 细节
  • yarn-session.sh客户端将集群提交给yarn,然后客户端返回
  • 需要再次调用客户端或者yarn来停止集群
  • 一句话:客户端提交了集群后就可以退出
  • 工作流程
  • 多个作业向同一个Session提交,由它统一管理
  • 示意图
  • pre-job
  • 生命周期
  • 集群管理器(yarn)为每个任务创建一个集群,该集群仅用于该作业.
  • 客户端首先向集群管理器请求资源启动JobManager,然后将这个作业提交给Dispactcher.然后作业的资源请求惰性分配TaskManager.一旦作业完成,集群将被拆除
  • 资源隔离
  • JobManager中的错误仅会影响其中的一个作业
  • 总结
  • pre-job模式适合长期运行,具有高稳定性且对启动时长要求不高的大型作业
  • 工作流程
  • 多个不同的作业分别向自己的Session会话上提交作业
  • 流程图
  • application
  • 生命周期
  • main方法在集群上
  • 提交作业的是一个单步骤过程
  • jar包和资源上传hdfs
  • jobManager去拉去对应的jar包和资源,如果存在HA,就选举出一个Active
  • 由jobManager所在机器调用main方法提取JobGraph,作为客户端程序和集群进行交互,直到任务结束
  • 如果main方法中有多个env.execute()/executeAsync()调用,在Application中,这些作业会被视为同一个应用,在同一个集群上执行
  • application的寿命和对于作业的寿命有关
  • 资源隔离
  • 在 Flink Application 集群中,ResourceManager 和 Dispatcher 作用于单个的 Flink 应用程序,相比于 Flink Session 集群,它提供了更好的隔离。
  • 总结
  • 该模式为yarn session和yarn per-job模式的折中选择。
  • 工作流程
  • 将各个环节更进一步进行专用化处理,相当于每个FlinkJob都有一套专用的服务角色进程。
  • 示意图
  • 总结
  • 各个模式应用场景
  • session模式
  • 集群资源充分、频繁任务提交、小作业居多、实时性要求高的场景。
  • per-job模式
  • 作业少、大作业、实时性要求低的场景。
  • application模式
  • 实时性要求不太高、安全性有一定要求均可以使用,普遍适用性最强。
  • 生产环境中
  • 一般建议用per-job或是application模式,提供了更好的资源隔离性和安全性。

三.运行流程

  • 核心角色
  • 一个JobManager
  • 一到多个TaskManager
  • 流程图
  • -
  • 角色剖析
  • JobManager
  • 主要作用就是协调和监控Task,Task的执行顺序,task的任务状态决策等
  • 这个进程由三个不同的组件组成
  • ResourcesManager
  • ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的最小单位。Flink 为不同的环境和资源提供者(例如 YARN、Mesos、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。
  • Dispatcher
  • Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。
  • JobMaster
  • JobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。
  • 始终至少有一个 JobMaster。高可用(HA)设置中可能有多个 JobMaster,其中一个始终是 leader,其他的则是 standby。
  • TaskManager
  • TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。
  • 必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子。
  • Yarn模式提交任务的工作流程
  • flink-application运行模式

 

flink 设置消费者组 flink设计模式_flink