Flink
的核心计算架构是下图中的 Flink Runtime
执行引擎,它是一个分布式系统,能够接受数据流程序并在一台或多台机器上以容错方式执行。Flink Runtime
执行引擎可以作为 YARN(Yet Another Resource Negotiator)
的应用程序在集群上运行,也可以在 Mesos 集群
上运行,还可以在单机上运行(这对于调试 Flink
应用程序来说非常有用)。
上图为 Flink
技术栈的核心组成部分,值得一提的是,Flink
分别提供了面向流式处理的接口(DataStream API
)和面向批处理的接口(DataSet API
)。因此,Flink
既可以完成流处理,也可以完成批处理。 Flink
支持的拓展库涉及机器学习(FlinkML
)、复杂事件处理(CEP
)、以及图计算(Gelly
),还有分别针对流处
理和批处理的 Table API
。
Flink
提 供 了 用 于 流 处 理 的DataStream API
和用于批处理的 DataSet API
。值得注意的是,尽管 Flink Runtime
执行引擎是基于流处理的,但是 DataSet API
先于 DataStream API
被开发出来,这是因为工业界对无限流处理的需求在 Flink
诞生之初并不大。
DataStream API
可以流畅地分析无限数据流,并且可以用 Java 或者 Scala 来实现。开发人员需要基于一个叫 DataStream
的数据结构来开发,这个数据结构用于表示永不停止的分布式数据流。
Flink
的分布式特点体现在它能够在成百上千台机器上运行,它将大型的计算任务分成许多小的部分,每个机器执行一部分。Flink 能够自动地确保发生机器故障或者其他错误时计算能够持续进行,或者在修复 bug 或进行版本升级后有计划地再执行一次。这种能力使得开发人员不需要担心运行失败。Flink
本质上使用容错性数据流
,这使得开发人员可以分析持续生成且永远不结束的数据(即流处理)。
JobManager 与 TaskManager
Flink
运行时包含了两种类型的处理器:
JobManager 处理器:也称之为 Master
,用于协调分布式执行,它们用来调度 task
,协调检查点,协调失败时恢复等。Flink
运行时至少存在一个 master
处理器,如果配置高可用模式则会存在多个 master
处理器,它们其中有一个是 leader
,而其他的都
是 standby
。
TaskManager 处理器:也称之为 Worker
,用于执行一个 dataflow
的 task(或者特殊的 subtask)、数据缓冲和 data stream
的交换,Flink
运行时至少会存在一个 worker
处理器。
Master
和 Worker
处理器可以直接在物理机上启动,或者通过像 YARN
这样的资源调度框架。Worker
连接到 Master
,告知自身的可用性进而获得任务分配。