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

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

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

从 WordCount 出发,彻底吃透 Flink 的设计与运行原理

原文整理自《Flink原理与实践》第三章 ,作者鲁蔚征
作者:AlgoCraft
发布时间:2025-08-19


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

本章回答三个灵魂拷问:

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

二、一张图看懂 Flink 数据流图

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]

三、Flink 分布式架构全景

组件作用备注
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 SharingSource[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、估算 并行度、预判 资源占用——真正做到“跑起来”也“跑明白”。

http://www.lryc.cn/news/626140.html

相关文章:

  • 第5.6节:awk字符串运算
  • 【驱动】RK3576:桌面操作系统基本概念
  • L2TP虚拟局域网
  • 快速傅里叶变换:数字信号处理的基石算法
  • Orange的运维学习日记--47.Ansible进阶之异步处理
  • 数据库-MYSQL配置下载
  • go链路追踪
  • 微算法科技(NASDAQ: MLGO)研究利用PBFT中的动态视图变换机制,实现区块链系统高效运转
  • 不同语言的并发模型对比:Go、Java与Python
  • Go高效复用对象:sync.Pool详解
  • 机器学习中的「损失函数」:模型优化的核心标尺
  • 决策树算法详解
  • 【完整源码+数据集+部署教程】鳄梨表面缺陷检测图像分割系统源码和数据集:改进yolo11-MLCA
  • QT聊天项目DAY19
  • 广东省省考备考(第八十一天8.19)——资料分析、数量(强化训练)
  • 第5.5节:awk算术运算
  • 基于深度学习的森林火灾图像识别实战
  • 【撸靶笔记】第七关:GET - Dump into outfile - String
  • 浙江电信IPTV天邑TY1613_高安版_晶晨S905L3SB_安卓9_原厂固件自改_线刷包
  • Linux中Docker k8s介绍以及应用
  • windows电脑对于dell(戴尔)台式的安装,与创建索引盘,系统迁移到新硬盘
  • 微信小程序连接到阿里云物联网平台
  • 高等数学 8.6 空间曲线及其方程
  • 添加右键菜单项以管理员权限打开 CMD
  • DNS有关知识(根域名服务器、顶级域名服务器、权威域名服务器)
  • 【C语言16天强化训练】从基础入门到进阶:Day 3
  • Vue 2 项目中快速集成 Jest 单元测试(超详细教程)
  • 【矢量数据】1:250w中国地质图地断层数据/岩性shp数据
  • EPM240T100I5N Altera FPGA MAX II CPLD
  • 无人机/航测/三维建模领域常见的“航线规划或建模方式