Flink底层核心

1. 核心组件

JobManager

JobManager 是 Flink 集群的控制中心,负责调度、管理和协调整个作业的执行。它的主要职责包括:

  • 作业提交:接收用户提交的作业,生成执行计划。
  • 任务调度:将作业划分为子任务,并分配到不同的 TaskManager 执行。
  • 资源管理:与集群管理系统(如 YARN、Kubernetes)交互,申请或释放计算资源。
  • 故障恢复:通过 checkpoint 和恢复机制处理任务失败,确保任务能够从上一次的状态恢复。
  • 监控与管理:管理集群中任务的执行状态,收集并展示指标。
TaskManager

TaskManager 是 Flink 集群中的工作节点,负责实际执行任务。每个 TaskManager 会执行多个任务槽(Task Slot),其具体职责包括:

  • 任务执行:TaskManager 负责接收和执行由 JobManager 分配的任务。
  • 资源隔离:每个 Task Slot 是 Flink 用于隔离任务资源的基本单元,Task Slot 可以防止任务之间的资源竞争,提供 CPU 和内存的隔离。
  • 状态管理:TaskManager 负责管理任务的状态和中间结果,将状态存储在内存或外部存储系统中。
  • 数据传输:TaskManager 之间进行网络通信,传输流数据。

2. DataStream API 和 DataSet API

  • DataStream API :Flink 提供了一个流式数据处理的编程接口,用于处理无限的数据流(无界流)。它的核心概念包括:
    • Transformation:Flink 提供了丰富的数据转换操作(如 map、filter、reduce、window 等),这些操作可以直接应用于流数据。
    • Window:Flink 支持对流数据进行窗口操作,将数据按时间、数量、会话等进行分割并聚合。
    • Time Semantics:Flink 支持多种时间语义,包括处理时间(Processing Time)和事件时间(Event Time)。
  • DataSet API:用于批处理数据集,操作方式类似于批处理框架如 Hadoop。适用于有限的数据集。

3. 执行引擎

Flink 的执行引擎将用户编写的代码转换为底层的并行计算任务并运行,这个过程分为多个步骤:

StreamGraph 和 JobGraph
  • StreamGraph:这是用户定义的作业的初步表示,用户的 DataStream 程序会被翻译成一个有向无环图 (DAG),其中节点表示操作符,边表示数据流动。
  • JobGraph:StreamGraph 会进一步被优化为 JobGraph。JobGraph 是物理执行的高层次逻辑表示,反映了任务之间的依赖关系。
TaskGraph
  • TaskGraph 是 Flink 作业的物理执行图。JobGraph 被细化为 TaskGraph,它包含具体的物理执行任务,并包含每个任务的并行度信息。
  • Execution Graph:当 Flink 开始执行时,TaskGraph 会被转换成 Execution Graph,反映了任务如何在集群上并行执行。
Task Slot
  • 每个 TaskManager 包含多个 Task Slot。每个 Task Slot 负责执行一个或多个并行任务,并且能够隔离不同任务的资源使用。通过这种方式,Flink 可以在单个节点上运行多个任务而不互相干扰。

4. 状态管理

Flink 处理的数据流可能会依赖于中间状态(例如计算窗口聚合、join 或带状态的函数),这时状态管理显得尤为重要。

Operator State 和 Keyed State
  • Operator State:每个操作符(Operator)可以维护自己的状态。Operator State 在整个流作业中共享,不区分具体的数据键。
  • Keyed State:Keyed State 是基于键的状态,每个键(key)都有其自己的状态。Keyed State 常用于基于 key 的分布式状态处理。
State Backend

Flink 提供了多种方式来存储作业的状态:

  • MemoryStateBackend:状态存储在内存中,适合小状态的应用。
  • FsStateBackend:将状态存储在文件系统中,通常用于批处理作业。
  • RocksDBStateBackend:将状态存储在外部持久化存储(如 RocksDB 中),适合状态较大的应用场景。
Checkpointing 和 Savepoints
  • Checkpointing:Flink 支持周期性 checkpoint,它可以捕获整个作业的状态,用于恢复任务失败。checkpoint 是增量式的,系统只保存状态的变化部分。
  • Savepoint:Savepoint 是手动触发的状态保存点,常用于作业的维护和升级。Savepoint 通常用于持久化状态并在以后恢复。

5. 事件时间与窗口

事件时间

事件时间是 Flink 支持的时间语义,它根据事件发生的时间戳来处理数据。这与其他流处理框架通常使用的处理时间(即系统接收到数据的时间)不同。

  • Watermark:在乱序数据的处理过程中,Flink 使用 Watermark 来标记系统已经看到的最晚事件时间。Watermark 可以帮助 Flink 决定何时可以关闭窗口并输出结果。
窗口操作

Flink 提供了灵活的窗口操作,允许将数据流分成多个窗口:

  • Time Window:按时间段划分数据流。
  • Count Window:按数据数量划分窗口。
  • Session Window:基于用户活动的间隔自动生成窗口。
  • Global Window:包含整个数据流,不会根据时间或数量进行划分。

6. 容错性

Checkpoint

Flink 的 checkpoint 机制用于在作业执行期间周期性地保存作业状态。一旦任务失败,系统可以从最近的 checkpoint 重新启动任务,确保数据的完整性。

  • 增量检查点:Flink 支持增量式 checkpoint,仅存储自上次 checkpoint 以来的变化部分,节省存储和计算资源。
Exactly Once 语义

Flink 提供了严格的"精确一次"处理语义,确保在发生故障时,数据不会被重复处理或丢失。Flink 使用的 checkpoint 和两阶段提交协议(Two-Phase Commit Protocol)来实现精确一次的消息传递。

7. 资源管理

Flink 可以与各种资源管理系统集成,动态管理和调度计算资源:

  • YARN:与 Hadoop YARN 集成,动态分配集群资源。
  • Kubernetes:Flink 可以在 Kubernetes 集群中运行,通过容器化环境进行自动扩展。
  • Standalone 模式:在独立服务器上运行,资源管理由用户手动配置。

Flink 统一了流处理和批处理的执行模型。Flink 将批处理视为有界的流处理,而流处理则是无界的数据处理。通过这种统一模型,Flink 能够有效地处理不同类型的数据任务。这一特性使得 Flink 能够在一个引擎中高效地处理实时数据流和批处理作业,同时确保任务的语义一致性。

每个部分相互协作,保证了 Flink 作为一个分布式计算平台,能够高效地处理海量数据,并提供高可用性和容错性。

相关推荐
大模型实战1 小时前
RAPIDS AI 加速制造业预测性维护效率
大数据·人工智能
Data 3172 小时前
经典sql题(七)查找直播间最大在线人数
大数据·数据库·数据仓库·sql
树莓集团3 小时前
从AI到大数据,数字技术服务平台全栈赋能企业升级
大数据·人工智能·科技·物联网·媒体
shuxianshrng4 小时前
鹰眼降尘模型
大数据·服务器·人工智能·经验分享·机器人
金智维科技官方4 小时前
如何选择适合企业的高效财税自动化软件
大数据·人工智能·自动化
飞瓜智投6 小时前
付费流量如何有效撬动自然流?
大数据·新媒体运营·直播电商
Parallel23336 小时前
Doris相关记录
大数据
Data 3176 小时前
经典sql题(二)求连续登录最多天数用户
大数据·数据库·数据仓库·sql·mysql
青云交8 小时前
大数据新视界 --大数据大厂之Kafka消息队列实战:实现高吞吐量数据传输
大数据·kafka·消息队列·高吞吐量·大数据新视界·技术奥秘·应用场景、新兴技术
成都古河云8 小时前
智慧园区:解析集成运维的未来之路
大数据·运维·人工智能·科技·5g·安全