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

105 阅读4分钟

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

一、本堂课重点内容:

课程主要分为四个部分
第一部分介绍了Flink的相关背景概念和发展历程
第二部分介绍了Flink的整体架构
第三部分介绍了FLink的架构优化
第四部分结合案例讲述了工业场景中Flink的使用

二、知识点介绍:

  • 主流流式计算引擎对比

image.png

  • Flink的架构分层

image.png

  • Flink核心组件
    JobManager:负责整个任务的协调工作,包括:调度 task、触发协调 Task 做 Checkpoint、协调容错恢复等,核心有下面三个组件:
    Dispatcher: 接收作业,拉起 JobManager 来执行作业,并在 JobMaster 挂掉之后恢复作业;
    JobMaster: 管理一个 job 的整个生命周期,会向 ResourceManager 申请 slot,并将 task 调度到对应 TM 上;
    ResourceManager:负责 slot 资源的管理和调度,Task manager 拉起之后会向 RM 注册;

    TaskManager:负责执行一个 DataFlow Graph 的各个 task 以及 data streams 的 buffer 和数据交换。

  • Flink 如何做到流批一体

    批式计算是流式计算的特例,Everything is Streams,有界数据集(批式数据)也是一种数据流、一种特殊的数据流;

    站在 Flink 的角度,Everything is Streams,无边界数据集是一种数据流,一个无边界的数据流可以按时间切段成一个个有边界的数据集,所以有界数据集(批式数据)也是一种数据流。因此,不管是有边界的数据集(批式数据)还是无边界数据集,Flink 都可以天然地支持,这是 Flink 支持流批一体的基础。并且 Flink 在流批一体上,从上面的 API 到底层的处理机制都是统一的,是真正意义上的流批一体。

    Apache Flink 主要从以下几个模块来做流批一体:
    SQL 层;DataStream API 层统一,批和流都可以使用 DataStream API 来开发;
    Scheduler 层架构统一,支持流批场景;
    Failover Recovery 层 架构统一,支持流批场景;
    Shuffle Service 层架构统一,流批场景选择不同的 Shuffle Service;

  • 流式处理,批式处理,OLAP
    批式计算是流式计算的特例,Everything is Streams,有界数据集(批式数据)也是一种数据流、一种特殊的数据流;
    OLAP 计算是一种特殊的批式计算,它对并发和实时性要求更高,其他情况与普通批式作业没有特别大区别。

  • Flink 在 OLAP 架构上的设想

image.png

三、课后拓展:

  • Flink的四个概念

    Checkpoint、State、Time、Window。

    Checkpoint机制,是Flink最重要的一个特性。Flink基于Chandy-Lamport算法实现了一个分布式的一致性的快照,从而提供了一致性的语义。Spark最近在实现Continue streaming,Continue streaming的目的是为了降低它处理的延时,其也需要提供这种一致性的语义。

    提供了一致性的语义之后,Flink为了让用户在编程时能够更轻松、更容易地去管理状态,还提供了一套非常简单明了的State API,包括里面的有ValueState、ListState、MapState,添加了BroadcastState,使用State API能够自动享受到这种一致性的语义。

    除此之外,Flink还实现了Watermark的机制,能够支持基于事件的时间的处理,或者说基于系统时间的处理,能够容忍数据的延时、容忍数据的迟到、容忍乱序的数据

    另外流计算中一般在对流数据进行操作之前都会先进行开窗,即基于一个什么样的窗口上做这个计算。Flink提供了开箱即用的各种窗口,比如滑动窗口、滚动窗口、会话窗口以及非常灵活的自定义的窗口。

  • Google Dataflow/Bean 的编程模型

    Dataflow 模型的核心点在于:
    对于无序的流式数据提供基于 event-time 的顺序处理、基于数据本身的特征进行窗口聚合处理的能力,以及平衡正确性、延迟、成本之间的相互关系。

    • What results are being computed. => Transformation
    • Where in event time they are been computed. => Window
    • When in processing time they are materialized. => Watermark and Trigger
    • How earlier results relate to later refinements. => Discarding, Accumulating, Accumulating & Retracting.

四、引用参考:

  • 现代流式计算的基石:Google DataFlow

zhuanlan.zhihu.com/p/54739130

  • 一文读懂Apache Flink技术

juejin.cn/post/684490…