flink从入门到精通,跟着我学这些就够了【3】flink核心架构

发布于:2025-02-11 ⋅ 阅读:(112) ⋅ 点赞:(0)

一、总体架构概览
architecture.png&pos_id=img-frKicYYC-1739189786478)
Flink采用典型的主从架构,主要包含以下核心组件:

1. JobManager(作业管理器)
  • 职责矩阵

    | 功能模块          | 说明                                                                 |
    |-------------------|----------------------------------------------------------------------|
    | JobMaster         | 单个作业的协调中心,负责调度、Checkpoint协调、故障恢复               |
    | ResourceManager   | 集群资源管理(Flink原生/YARN/K8s适配)                                |
    | Dispatcher        | 提供REST接口,作业提交入口,为每个作业启动JobMaster                  |
    
  • 关键机制

    • 基于Actor模型的消息传递(Akka实现)
    • Exactly-Once语义的Checkpoint协调
    • 故障检测(心跳机制+ZooKeeper)
2. TaskManager(任务管理器)
  • 核心能力
    // 伪代码示例:Task执行流程 
    while (hasInput()) {
        StreamRecord record = input.poll();
        userFunction.processElement(record);
        if (checkpointTriggered) {
            snapshotState();
        }
    }
    
  • 内存结构
    内存区域 占比 用途
    Network Buffers 20% 数据交换缓存
    Managed Memory 40% RocksDB状态后端/批处理排序
    JVM Heap 40% 用户代码内存分配
3. Client(客户端)
  • 执行流程:
    1. 解析用户程序生成JobGraph
    2. 通过REST提交到Dispatcher
    3. 获取执行进度监控

二、运行时执行模型

1. 任务拓扑结构
物理计划
并行化
JobGraph
ExecutionGraph
Task Slots
2. 数据传输机制
  • 背压(Backpressure)
    • 基于信用值的流量控制(Credit-Based)
    • 网络栈优化:
      1. 数据序列化阶段使用堆外内存 
      2. 批量发送机制(BufferTimeout调优)
      3. 零拷贝技术(同一TM内共享内存)
      

三、状态管理架构

1. 状态类型矩阵
状态类型 存储方式 适用场景
Keyed State 每个Key对应状态实例 分组统计/窗口聚合
Operator State 算子级别状态 源连接器偏移量记录
Broadcast State 全局可读的广播状态 规则动态更新
2. 状态后端对比
|                  | MemoryStateBackend     | FsStateBackend       | RocksDBStateBackend   |
|-------------------|------------------------|----------------------|-----------------------|
| 存储介质          | JVM Heap               | 文件系统+Heap        | 本地磁盘+RocksDB      |
| 容量限制          | <1GB                   | 单TM内存上限         | 本地磁盘容量          |
| 恢复速度          | 快                     | 中等                 | 较慢                  |
| Checkpoint耗时    | 低                     | 中等                 | 高                    |

四、容错机制实现

1. Checkpoint执行流程
  1. JobMaster触发检查点屏障(Barrier)
  2. Barrier通过数据流传播
  3. 算子对齐状态快照
  4. 异步持久化到持久存储
2. 恢复策略优化
  • 增量Checkpoint:仅保存差异数据(RocksDB特性)
  • 非对齐Checkpoint:允许Barrier乱序(Flink 1.11+)
  • Savepoint:人工触发的全量持久化点

五、资源管理架构

1. 部署模式对比
模式 资源申请方 适用场景
Session Mode 预先分配 短期作业/测试环境
Per-Job Mode 按需申请 生产环境长期作业
Application Mode 客户端集成 Kubernetes环境部署
2. 动态资源扩展
1. ResourceManager监控Slot利用率 
2. 向YARN/K8s申请新TaskManager 
3. 注册新Slots到集群 
4. JobMaster重新调度任务 

六、网络栈优化

1. 数据传输模式
  • Pipelined:流式传输(默认)
  • Batch:阶段式传输(批处理优化)
2. 反压传播机制
Task B Task A Credit=10 发送8个Buffer Credit=2 发送2个Buffer 更新Credit值 Task B Task A

七、最新架构演进

  1. 统一批流架构

    • 批处理作为有界流的特例处理
    • 自适应执行模式(Batch/Streaming自动切换)
  2. 云原生优化(目前我们主要就是投入在这个方向,便于自动化运维及高级韵味):

    • Kubernetes原生部署支持增强
    • 弹性伸缩API标准化
  3. 状态后端改进

    • 分层状态存储(Hot/Warm/Cold Data)
    • 基于JDK 17的ZGC内存优化

根据实际使用场景关注:

  • 高可用配置(ZooKeeper/K8s)
  • 状态后端选型(吞吐量 vs 延迟)
  • 网络参数调优(taskmanager.network.memory.fraction)
  • Checkpoint间隔平衡(可靠性 vs 性能)

网站公告

今日签到

点亮在社区的每一天
去签到