这是我参与「第四届青训营 」笔记创作活动的第2天
一、本堂课重点内容:
课程主要分为四个部分
第一部分介绍了Flink的相关背景概念和发展历程
第二部分介绍了Flink的整体架构
第三部分介绍了FLink的架构优化
第四部分结合案例讲述了工业场景中Flink的使用
二、知识点介绍:
- 主流流式计算引擎对比
- Flink的架构分层
-
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 架构上的设想
三、课后拓展:
-
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
- 一文读懂Apache Flink技术