Flink原理与实践 · 第三章总结

Flink原理与实践 · 第三章总结

从 WordCount 出发,彻底吃透 Flink 的设计与运行原理
原文整理自《Flink原理与实践》第三章 ,作者鲁蔚征

作者:AlgoCraft

发布时间:2025-08-19


一、本章定位:从"跑起来"到"跑明白"

本章回答三个灵魂拷问:

  1. 代码 → 作业:Flink 如何把用户写的 DataStream 程序翻译成可执行的分布式任务?
  2. 作业 → 运行:JobManager、TaskManager、Slot 这些角色到底在干什么?
  3. 运行 → 资源:并行度、算子链、Slot Sharing 如何决定任务最终落在哪台机器、哪个线程?

1. 逻辑视图(Logical Plan)

  • 算子(Operator):Source → flatMap → keyBy → timeWindow → sum → Sink
  • 数据交换策略:Forward / KeyBy / Broadcast / Rebalance

2. 物理执行图(Physical Plan)

  • 并行切片 :每个算子被拆成若干 Sub-task (又称 Instance)。
  • 并行度 = Sub-task 个数;可在代码、Client、WebUI 上设置。
  • 示例 :并行度=2 ⇒ 每个算子产生 2 个 Sub-task,如 FlatMap[1/2]FlatMap[2/2]

组件 作用 备注
Client 把 JAR → JobGraph → 提交给集群 CLI / REST
Dispatcher 为每个作业起 1 个 JobManager 高可用可多实例
JobManager 作业的"大脑" 申请资源、生成 ExecutionGraph、故障恢复
ResourceManager 管资源 向 YARN / K8s / Standalone 要容器 & Slot
TaskManager 作业的"肌肉" 真正跑 Sub-task,向 RM 注册 Slot

一句话:Client 提交通关,JM 指挥全局,TM 干活挣钱,RM 管钱袋子


四、从代码到执行:四张图的演变

官方把"翻译"过程拆成 4 个阶段:

  1. StreamGraph

    用户代码直接映射出的 DAG,节点=算子。

  2. JobGraph

    优化阶段:把可以 链在一起 的算子合并成 Operator Chain(JobVertex),减少网络 shuffle。

  3. ExecutionGraph

    JobManager 把 JobVertex 按并行度 横向展开,形成并行实例 ExecutionVertex。

  4. 物理执行图

    ExecutionVertex 被调度到 TaskManager 的某个 Slot 内,变成真正的线程 / Task。


五、Slot 与资源隔离

  • Slot = TaskManager 资源子集

    默认 1 Slot ≈ 1 CPU core + 部分内存。

  • Slot Sharing(槽位共享)

    同一个作业的所有 Sub-task 可以塞进 一个 Slot ,减少 IPC 与线程切换,提高利用率。

    示例:并行度=6,但只开 2 个 Slot,也能跑满。

  • 算子链 vs. Slot Sharing

    • 算子链:把算子"纵向"合并进同一线程。
    • Slot Sharing:把 Sub-task"横向"塞进同一 Slot。
      二者叠加,最终一个 Slot 里可能跑 多条链的多个 Sub-task

六、实战:把 WordCount 再"解剖"一次

步骤 关键动作
设置并行度 env.setParallelism(2)
算子链 Source→FlatMap 链在一起;keyBy 不能链(发生 shuffle)
Slot Sharing Source[1/2]、FlatMap[1/2]、Window[1/2] 共享 Slot1
WebUI 观察 可看到 5 个 Sub-task 落在 2 个 Slot 内

七、本章实验:亲手调优 WordCount

官方实验要求:

  1. 把分词逻辑从"空格"改为 正则 \\W+,支持逗号、句号、冒号等。
  2. 本地模式跑通后,用 Flink CLI 提交到 Standalone 集群。
  3. 在 WebUI 里查看:
    • 并行度、Slot 数量
    • Sub-task 与 Slot 的映射关系
  4. 提交实验报告:代码 + 输出 + WebUI 截图。

八、小结

维度 关键词
图模型 StreamGraph → JobGraph → ExecutionGraph → 物理图
并行度 算子子任务数,可全局或单算子设置
资源 Slot、Slot Sharing、Operator Chain
角色 Client / Dispatcher / JobManager / ResourceManager / TaskManager

理解本章后,再回头看任何 Flink 程序,你都能迅速画出它的 逻辑 DAG 、估算 并行度 、预判 资源占用------真正做到"跑起来"也"跑明白"。

相关推荐
艾莉丝努力练剑2 小时前
【Git:基本操作】深度解析Git:从初始Git到熟悉基本操作
大数据·linux·c++·人工智能·git·gitee·指令
猫猫姐姐3 小时前
Flink 2.1 SQL:解锁实时数据与AI集成,实现可扩展流处理
大数据·人工智能·sql·flink
武子康3 小时前
大数据-142 ClickHouse分片×副本×Distributed 实战 ReplicatedMergeTree、Keeper、insert_quorum
大数据·后端·nosql
月屯4 小时前
es大页读取
大数据·elasticsearch·搜索引擎
hexionly5 小时前
数据仓库·简介(一)
大数据·数据仓库
TDengine (老段)5 小时前
TDengine 数学函数 TRUNCATE 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
TDengine (老段)5 小时前
TDengine 数据函数 CORR 用户手册
大数据·数据库·物联网·时序数据库·tdengine·1024程序员节
现在,此刻9 小时前
flink学习与如何在springboot项目中使用flink
spring boot·学习·flink
隐语SecretFlow12 小时前
【隐语SecretFlow】由蚂蚁集团牵头制定的“隐私保护计算安全分级”IEEE国际标准已正式发布!
大数据·网络·安全
微三云、小叶15 小时前
裂变速度提升300%!279模式如何盘活一个私域商城
大数据·软件开发·商业模式·小程序商城·本地生活·商业思维