Flink引擎介绍 | 青训营笔记

241 阅读5分钟

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

Flink引擎介绍

1. 什么是大数据

大数据:是指无法在一定时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。其具有四个典型特征:

  • Value(价值化)
  • Volumes(海量化)
  • Velocity(快速化)
  • Variety(多样化)

2. 大数据计算架构的发展历史

  • Hadoop
    • 分布式
    • Map-Reduce
    • 离线计算
  • Spark
    • 批处理
    • 流处理
    • SQL高阶API
  • Flink
    • 流计算
    • 实时、更快
    • 流批一体
    • Streaming/Batch SQL

3. 流计算

流计算:实时获取来自不同不同数据源的海量数据,经过实时分析处理,获得有价值的信息。

image.png

3.1 流式计算的特点

  • 实时计算、快速、低延迟
  • 无限流、动态、无边界
  • 7*24H持续运行
  • 流批一体

4. 为什么Apache Flink会脱颖而出

Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams.Flink has been designed to run in all common cluster environments,perform computations at in-memory speed and at any scale.---来自Apache 官方介绍

4.1 flink的四个特征

image.png

  • Exactly-once
    • 精确的一次计算语义
  • 状态容错
    • Checkpoint
  • Dataflow编程模型
    • Window等高阶需求支持友好
  • 流批一体

4.2 流式计算引擎发展历史

  • Storm:History of Apache Storm and lessons learned - thoughts from the red planet

    • Storm API 的 low-level 以及开发效率低下;
    • 一致性问题:Storm 更多考虑到实时流计算的处理时延而非数据的一致性保证;
  • Spark Streaming:An Architecture for Fast and General Data Processing on Large Clusters

    • Spark Streaming 相比于 Storm 的低阶 API 以及无法正确性语义保证,Spark 是流处理的分水岭:第一个广泛使用的大规模流处理引擎,既提供较为高阶的 API 抽象,同时提供流式处理正确性保证。
  • Flink:从产品技术来看,Flink 作为一个最新的实时计算引擎,具备如下流计算技术特征:

    • 完全一次保证:故障后应正确恢复有状态运算符中的状态;
    • 低延迟:越低越好。许多应用程序需要亚秒级延迟;
    • 高吞吐量:随着数据速率的增长,通过管道推送大量数据至关重要;
    • 强大的计算模型:框架应该提供一种编程模型,该模型不限制用户并允许各种各样的应用程序在没有故障的情况下,容错机制的开销很低;
    • 流量控制:来自慢速算子的反压应该由系统和数据源自然吸收,以避免因消费者缓慢而导致崩溃或降低性能;
    • 乱序数据的支持:支持由于其他原因导致的数据乱序达到、延迟到达后,计算出正确的结果;
    • 完备的流式语义:支持窗口等现代流式处理语义抽象;
    • Google Dataflow Model 的开源引擎实现。
  • 主要的流式计算引擎能力对比

image.png

4.3 Flink的优点

支持批处理和流处理。

优雅流畅的支持java和scala。

高吞吐量和低延迟。

支持事件处理和无序处理通过SataStream API,基于DataFlow数据流模型。

在不同的时间语义(事件时间,摄取时间、处理时间)下支持灵活的窗口(时间,滑动、 翻滚,会话,自定义触发器)。

仅处理一次的容错担保,通过event time & watermarker。

自动背压机制,下游对上游的反压。

图处理(批) 机器学习(批) 复杂事件处理(流)。

在dataSet(批处理)API中内置支持迭代程序(BSP)。

高效的自定义内存管理,和健壮的切换能力在in-memory和out-of-core中。

兼容hadoop的mapreduce和storm。

集成YARN,HDFS,Hbase 和其它hadoop生态系统的组件,丰富的connector。

4.4 Flink的开源生态

Apache Flink 在开源生态上的能力比较强大,可以支持:

  1. 流批一体:支持流式计算和批式计算;
  1. OLAP:Flink 可以支持 OLAP 这种短查询场景;
  1. Flink ML:pyFlink、ALink、AIFlow 等生态支持 Flink 在 ML 场景的应用;
  1. Gelly:图计算;
  1. Stateful Function:支持有状态的 FAAS 场景;
  1. ...

5. Flink整体架构

5.1 Flink分层架构

image.png

  • SDK层:Flink的SDK目前主要有三类,SQL/Table、DataStream、Python;
  • 执行引擎层(Runtime层):执行引擎层提供了统一的DAG,用来描述数据处理的Pipeline,不管是流还是批,都会转化为DAG图,调度层再把DAG转化为分布式环境下的Task,Task之间通过Shuffle传输数据;
  • 状态存储层:负责存储算子的状态信息;
  • 资源调度层:目前Flink可以支持部署在多种环境。

5.2 Flink整体架构

image.png 图片来源:(Flink Architecture | Apache Flink) 一个Flink集群,主要包含以下两个核心组件:

  1. JobManager(JM):负责整个任务的协调工作,包括:调度task、触发协调Task做Checkpoint、协调容错恢复等;
  2. TaskManager(TM):负责执行一个DataFlow Graph的各个task以及data streams的buffer和数据交换。

5.2.1 JobManager的职责

image.png

  • Dispatcher:接受作业,拉起JobManager来执行作业,并在JobManager挂掉之后恢复作业;
  • JobMaster:管理一个job的整个生命周期,会向ResourceManager申请slot,并将task调度到对应TM上;
  • ResourceManager:负责slot资源的管理和调度,Task manager拉起之后会向RM注册。