当前位置: 首页 > news >正文

flink介绍

Flink 架构概述

Apache Flink 是一个分布式流处理框架,支持 有状态(Stateful)计算,能够处理流式(Streaming)和批量(Batch)数据。Flink 采用主从架构,由 JobManagerTaskManager 共同协作完成任务调度和计算。

1. Flink 主要组件

Flink 的核心架构主要由以下组件组成:

  1. Client(客户端)
    • 提交 Flink 任务 到集群
    • 解析用户代码并生成 JobGraph,提交给 JobManager
  2. JobManager(主节点)
    • 负责任务的 调度、资源分配、故障恢复
    • 主要由 Dispatcher、ResourceManager、JobMaster 组成
  3. TaskManager(工作节点)
    • 负责具体的 任务执行
    • 运行 TaskSlot,并处理 数据流、状态管理
  4. Storage(存储)
    • 任务的**检查点(Checkpoint)保存点(Savepoint)**存储在 HDFS、S3、RocksDB 等外部存储中
    • 任务的输入和输出数据存储在 Kafka、HDFS、MySQL、Elasticsearch 等

2. Flink 集群架构

Flink 采用 Master-Slave(主从)架构,主要包含 JobManager(主节点) 和 TaskManager(从节点)。

(1)Master 节点(JobManager)

JobManager 负责任务管理和调度,主要组件:

  • Dispatcher(调度器)
    • 负责接收 Client 提交的任务
    • 提供 REST API 接口,允许用户查询任务状态
  • ResourceManager(资源管理器)
    • 负责管理 Flink 计算资源
    • YARN / Kubernetes / Mesos 协作,动态分配 TaskManager
  • JobMaster(作业管理器)
    • 负责管理 Flink 任务的执行
    • 维护 ExecutionGraph(执行图)
    • 处理 故障恢复

(2)Worker 节点(TaskManager)

TaskManager 负责执行具体任务,包含:

  • TaskSlot(任务槽)
    • 任务的最小资源单位,每个 TaskManager 有多个 TaskSlot
    • Slot 之间内存相互隔离
  • Task(任务)
    • 执行 算子(Operators)
    • 通过 数据流(Stream) 进行计算

(3)存储层

Flink 需要持久化存储以下数据:

  1. 检查点(Checkpoint) → HDFS、S3、RocksDB
  2. 状态(State)存储 → RocksDB、内存
  3. 输入(Source)数据 → Kafka、MySQL、HDFS
  4. 输出(Sink)数据 → Elasticsearch、HDFS、Redis

3. Flink 作业执行流程

(1)任务提交

  1. Client 提交 Flink Job
    • 解析代码,生成 JobGraph
    • 发送 JobGraph 到 Dispatcher
  2. Dispatcher 分配 JobMaster
    • 启动 JobMaster 处理任务
    • JobMaster 解析 JobGraph,构造 ExecutionGraph

(2)任务调度

  1. JobMaster 解析 ExecutionGraph
    • 将 JobGraph 转换为并行执行图(ExecutionGraph)
    • 按算子依赖关系进行任务切分
  2. ResourceManager 分配 TaskManager
    • 申请 TaskSlot
    • 分配 TaskManager 并启动 Task 任务

(3)任务执行

  1. TaskManager 启动 Task
    • 运行算子(Operators)
    • 处理数据流(Stream)
  2. 数据传输
    • 通过 Shuffle、Network Stack 传输数据
    • 任务之间通过 流(Stream) 传递数据

(4)状态管理 & 容错

  1. Checkpoint 机制
    • 定期将 Task 状态 持久化到 HDFS、RocksDB
    • 任务故障时,从最近的 Checkpoint 恢复
  2. Savepoint 机制
    • 手动触发 Savepoint,支持 作业升级、代码变更后的恢复
  3. Failover
    • 任务失败后,JobMaster 重新调度任务,恢复计算

4. Flink 任务并行度

Flink 是 并行计算框架,并行度的定义如下:

  1. 全局并行度(Global Parallelism)
    • execution.parallelism 决定,影响整个 Job
  2. 算子级别并行度(Operator Parallelism)
    • 可以通过 operator.setParallelism(n) 设置
  3. Task Slot 数量
    • 每个 TaskManager 有多个 TaskSlot,影响作业运行

默认并行度

  • Flink 默认并行度为 1,可以在 flink-conf.yaml 配置:
    parallelism.default: 4  # 设置默认并行度为 4
    
  • 也可以通过代码指定:
    env.setParallelism(4);
    

5. Flink vs Spark 对比

对比项FlinkSpark
计算模式流计算(Streaming First)批计算(Batch First)
数据流模型实时流(Unbounded Stream)微批处理(Micro-batch)
状态管理内置状态管理(RocksDB)依赖外部存储(HDFS、Redis)
故障恢复精准一次(Exactly Once)依赖 RDD 重计算
吞吐量高吞吐、低延迟吞吐量高但延迟较高
并行计算Task Slot 控制并行度RDD Partition 控制并行度

6. 结论

Flink 采用 Master-Slave 架构,由 JobManager(主节点)+ TaskManager(工作节点)+ 存储层 组成
支持流计算和批计算,以 流计算优先(Streaming First) 为核心
高并发低延迟,支持 Exactly Once 语义,适用于 实时计算场景
任务并行度由 Task Slot、算子并行度决定,默认并行度为 1,可调整
与 Spark 相比,Flink 在实时流计算方面更强,而 Spark 在离线计算更优秀

Savepoint

1. 什么是 Savepoint?

Savepoint 是 Flink 提供的一种手动触发的作业状态快照机制,用于:

  • 任务升级、迁移(跨版本、跨集群恢复)
  • 故障恢复(比 Checkpoint 更灵活)
  • A/B 测试(从相同状态启动不同版本任务)

2. Savepoint vs Checkpoint

对比项SavepointCheckpoint
触发方式手动触发自动触发(周期性)
存储内容作业完整状态(可跨版本恢复)任务运行状态(仅用于故障恢复)
存储位置HDFS / S3 / RocksDB / 文件系统HDFS / S3 / RocksDB
用途任务升级、迁移、测试任务失败后自动恢复
适用场景长期存储,版本切换临时存储,断点恢复
数据一致性需要手动触发,非实时端到端 Exactly-Once

总结
Savepoint 适用于长期存储和版本迁移
Checkpoint 适用于作业自动恢复

3. 如何使用 Savepoint?

3.1 触发 Savepoint

flink savepoint job_id savepoint_path

例如:

flink savepoint 123456 /flink/savepoints/

说明job_id 是 Flink 任务 ID,savepoint_path 指定 Savepoint 存储位置(HDFS、S3等)。

3.2 使用 Savepoint 恢复作业

flink run -s savepoint_path -c MainClass my-flink-job.jar

示例:

flink run -s hdfs://flink/savepoints/savepoint-1234 my-job.jar

说明-s 参数指定 Savepoint 位置,作业会从 Savepoint 处继续执行。

3.3 删除 Savepoint

Savepoint 需要手动删除:

flink stop -s savepoint_path job_id

4. Savepoint 适用于哪些场景?

  1. 任务升级
    • 旧版本任务 触发 Savepoint,新版本任务从 Savepoint 恢复
    • 例如升级 Flink 作业时,保证状态不丢失
  2. 跨集群任务迁移
    • 不同 Flink 集群 之间迁移作业
    • 先在 A 集群 Savepoint,然后在 B 集群加载 Savepoint
  3. A/B 测试
    • 从同一个 Savepoint 启动多个作业,对比不同算法版本效果

5. Savepoint vs Kafka Offset

对比项SavepointKafka Offset
作用存储 Flink 作业的所有状态存储 Kafka 消费者消费位点
适用范围所有 Flink 状态(窗口、聚合等)仅流式 Kafka 消费 Offset
是否支持作业升级✅ 支持❌ 不支持
存储方式HDFS / S3 / RocksDBKafka 内部存储

Savepoint 适用于 Flink 作业状态恢复
Kafka Offset 适用于 Kafka 消费恢复

6. 总结

  • Savepoint 适用于手动触发的状态持久化,用于任务升级、迁移、A/B 测试
  • Checkpoint 适用于自动任务恢复,用于故障恢复
  • Flink 任务可以从 Savepoint 恢复,保持状态一致
  • Savepoint 需要手动管理和存储,Checkpoint 是临时的

相关文章:

  • 【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
  • 突破网络壁垒:实现 Mac SSH 访问 Windows WSL Ubuntu 的最佳实践20250301
  • 【Linux】Linux的基本指令(3)
  • PostgreSQL10 逻辑复制实战:构建高可用数据同步架构!
  • Android JNI开发指南
  • IP段转CIDR:原理Java实现
  • 优云智算:借助强大镜像社区,开启AI算力新纪元!
  • Flutter的permission_handler插件检查iOS的通知权限不准确
  • iphone上ios设备开启safari开发者debug模式,配合mac电脑使用
  • SLAM网站连接
  • playbin之autoplug_factories源码剖析
  • Windows文件资源管理器左侧导航窗格没有WSL的Linux图标的解决方法
  • eNSP中AR2220、AR201、AR1220、AR2240、AR3260、Router、NE40E、NE5000E、NE9000、CX路由器学习笔记
  • 算法-二叉树篇15-最大二叉树
  • 蓝桥杯 路径之谜
  • spineNET模型详解及代码复现
  • 六、索引优化实战案例
  • 自然语言处理NLP入门 -- 第五节词向量与嵌入
  • 2025计算机考研复试资料(附:网课+历年复试真题+140所高校真题+机试)
  • python量化交易——金融数据管理最佳实践——qteasy创建本地数据源
  • 阿里云二级域名建设网站/百度知识营销
  • 深圳有没有可以做家教的网站/windows优化大师靠谱吗
  • 购物网站开发价格/网站优化seo教程
  • 企业网站主页素描模板/公司网站制作流程
  • 自己做单词卡的网站是什么/网络营销策划书包括哪些内容
  • 科室建设网站/湖南网站推广优化