流/批/OLAP 一体的Flink引擎介绍 | 青训营笔记

93 阅读2分钟

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

0.流/批/OLAP

  1. 批式计算:离线计算,非实时,静态数据集,小时、天为计算单位

  2. 流式计算:实时计算,无限流,动态无边界,7*24运行

  3. OLAP:交互式分析,高并发查询

1.Flink概述

1.1Apache Flink 诞生背景

  1. 大数据:无法在一定时间内无法用常规软件工具对其进行获取,存储,管理和处理的集合,4V特点

  2. 发展历史

    • 史前:传统数仓,Oracle

    • Hadoop:分布式,map-reduce,离线计算

    • Spark:批处理,流处理,内存迭代计算,SQL

    • Flink:流计算,实时,流批一体,SQL

  3. 应用场景:监控场景,金融风控,实施推荐

1.2Flink的优势

  1. 流式引擎
    • Exactly-Once:精确一次的计算语义
    • checkpoint:状态容错
    • Dataflow编程模型:window等高阶需求支持良好
    • 流批一体

1.3 Apache Flink 开源生态

  • 支持消息队列,redis,HDFS,HIVE
  • 部署在yarn,K8S
  • SQL,DataStream,pyFlink

2.Flink整体架构

2.1 Flink 分层架构

  • SDK层:SQL/Table,DataStream,python;

  • 执行引擎层(Runtime层):执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化成分布式环境下的Task,Task之间在进行通信

  • 状态存储层:负责存储算子的状态信息

  • 资源调度层:目前Flink可以支持部署在多种环境

2.2 Flink 总体架构

  1. 一个Flink集群,主要包含以下两个核心组件

    1. JobManager(JM):负责整个任务的协调工作

      包括:调度task,触发协调Task做Checkpoint,协调容错恢复等

    2. TaskManager(TM):负责执行一个DataFlow Graph的各个task以及data streams的buffer和 数据交换

  2. JM的职责:

    1. dispatcher:接收作业,拉起JM来执行作业,并在JM挂掉之后恢复作业;
    2. JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应task上
    3. ResourceManager:负责solt资源的管理和调度,TM拉起后会向RM注册

2.3 Flink 如何做的流批一体

  1. 为什么需要流批一体

    根据每天的点赞播放计算收益

    传统处理:一个实时,一个离线

    ​ 缺点:人力成本高,数据冗余,数据口径不一致

  2. 批式计算式流式计算的特例:Everything is stream

  3. 通过模块实现流批一体

    1. SQL层
    2. DataStream API 层统一,批和流都可以使用DataStream API开发
    3. Scheduler 层架构统一,支持流批场景
    4. Failover Recovery 层架构统一,支持流批场景
    5. Shuffle Service层架构统一,流批场景选择不同Shuffle Service
  4. shuffle:在分布式计算中,用来连接上下游数据交互的过程叫做shuffle