Flink引擎介绍|青训营笔记

125 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第2天

  • Flink概述
    • 背景
      • 大数据
        • 无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合
        • 海量化(Volumes)
        • 多样化(Variety)
        • 快速化(Velocity)
        • 价值化(Value)
      • 业内对大数据的实时性提出了更高的要求
    • Flink优点
      • 状态容错(checkpoint)
      • Exactly-Once精确一次的计算语义
      • Dataflow编程模型
      • 流批一体
  • Flink整体架构
    • 分层架构
      • SDK
        • SQL/Table
        • DataStream
        • Python
      • 执行引擎层(Runtime层)
        • 提供统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化为分布式环境下的TaskTask之间通过Shuffle传输数据
      • 状态存储层
        • 负责存储算子的状态信息
      • 资源调度层
        • 可支持部署在多种环境中
    • 总体架构
      • 包括两个核心组件
        • JobManager
          • 负责整个任务的协调工作,包括:调度task、触发协调taskcheckpoint、协调容错恢复等
          • Dispatcher
            • 接收作业,拉起JobMaster来执行作业,并在JobMaster挂掉之后恢复作业
          • JobMaster
            • 管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TaskManager
          • ResourceManager
            • 负责slot资源的管理和调度,Task Manager拉起后会向ResourceManager注册
        • TaskManager
          • 负责执行一个DataFlow Graph的各个task以及data streamsbuffer和数据交换
    • 作业示例
    • 流批一体
      • Everything is Streams
        • 无边界数据集是一种数据流,一个无边界数据流可以按时间切段成一个个有边界的数据集,所以有界数据集也是一种数据流
      • 从以下几个模块来做流批一体
        • SQL
        • Datastream API层统一,批和流都可以使用Datastream API开发
        • Scheduler层架构统一,支持流批场景
          • 主要负责将作业的DAG转化为在分布式环境中可以执行的Task
          • 调度机制
            • Pipeline的数据交换方式连接的Task构成为一个Pipeline Region
            • 为了兼顾流批进行的抽象
              • ALL_EDGES_BLOCKING
              • ALL_EDGES_PIPELINED
        • Failover Recovery层架构统一,支持流批场景
        • Shuffle Service层架构统一,流批场景选择不同的Shuffle Service
          • Shuffle
            • 在分布式计算中,用来连接上下游数据交互的过程叫做Shuffle
            • 实际上,分布式计算中所有涉及到上下游衔接的过程,都可以理解为Shuffle
          • 实现
            • 基于文件的Pull Based Shuffle
              • 特点是具有较高的容错性,适合较大规模的批处理作业,由于是基于文件的,容错性和稳定性会更好一些,例如SparkMR
            • 基于PipelinePush Based Shuffle
              • 特点是低延迟和高性能,但是因为Shuffle数据没有存储下来,如果是batch任务的话就需要进行重跑恢复,例如FlinkStormPresto
            • Flink为了统一在StreamingBatch模式下的Shuffle架构,实现了一个PluggableShuffle Service框架,抽象出一些公共模块
          • 流和批Shuffle之间的差异
            • Shuffle数据的生命周期
              • 流作业的Shuffle数据与Task是绑定的,而批作业的Shuffle数据与Task是解耦的
            • Shuffle数据存储介质
              • 流作业的生命周期比较短,而流作业为了实时性,Shuffle通常存储在内存中,批作业因为数据量比较大以及容错的需求,一般会存储在磁盘中
            • Shuffle的部署方式
              • 流作业Shuffle服务和计算节点部署在一起,可以减少网络开销,从而减少Latency,而批作业则不同
  • Flink架构优化
    • 流/批/OLAP业务场景
      • OLAP
        • 交互式分析
          • 数据分析BI报表
          • 高查询、延迟在秒级,要求高并发查询
        • 特殊的批式计算
    • OLAP架构现状
      • Client
        • 提交SQL Query
      • Gateway
        • 接收SQL Query,对SQL进行语法解析和查询优化,生成Flink作业执行计划,提交给Session集群
      • Session Cluster
        • 执行作业调度及计算,并返回结果
  • 案例讲解
    • HTAP