Flink
flink 是什么?
Flink
的核心目标: “数据流上的有状态计算”。 Flink
是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算
什么是有状态计算?
把流处理需要的额外数据保存成一个“状态”,然后针对这条数据进行处理,并且更新状态。这就是所谓的“有状态的流处理”
Flink 特点
- 高吞吐和低延迟:每秒处理数百万个事件,毫米级延迟
- 结果的准确性:Flink 使用了事件时间(event-time)和处理时间(processing-time) 语义,对于乱序事件流,事件时间语义能提供一致且准确的结果
- 精确一次:Flink 提供了精确一次(exactly-once)语义,保证每个事件被处理一次且只被处理一次
- 可以连接到最常用的存储系统:Flink 可以连接到最常用的存储系统,例如:Kafka、Hive、JDBC、HDFS、Elasticsearch 等
- 高可用:本身高可用的设置加上与 K8S 的紧密集成
flink 运行时架构
以 Standalone
会话模式为例,注意多个 Job
共用分发器和资源管理器,但每个 Job
都有独立的 JobMaster
JobManager
JobManager
是一个 Flink 集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的 JobManager
所控制执行。
- JobMaster
JobMaster
是 JobManager
中最核心的组件,负责处理单独的作业 Job
- ResourceManager
ResourceManager
资源管理器,主要负责资源的分配和管理,在 Flink 集群中只有一个。所谓资源就是指 TaskManager
的任务槽 (task slots
)。 任务槽是 FLink 集群中的资源调配单元,包含了机器用来执行计算的一组 CPU 和内存资源。每一个任务(Task
)都需要分配到一个 slot
上执行。
- Dispatcher
Dispatcher
分发器,主要负责提供一个 REST 接口,用来提交应用,并且负责为每一个新提交的作业启动一个新的 JobMaster
组件。 Dispatcher
在架构中并不是必须的,在不同的部署模式下可能会被忽略掉。
TaskManager
TaskManagr
是 Flink
中的工作进程,数据流的具体计算就是它来做的。FLink
集群中必须至少有一个 TaskManager
;每个 TaskManager
都包含了一定数量的任务槽。 任务槽是资源调度的最小单位, slot
的数量限制了 TaskManager
能够并行处理的任务数量。