定远规划建设局网站今天特大军事新闻

张小明 2026/3/2 19:51:50
定远规划建设局网站,今天特大军事新闻,北京seo公司哪家好,政务网站建设需求Flink架构深度剖析#xff1a;JobManager与TaskManager 前言 上一篇我们成功跑起了第一个 Flink 程序#xff0c;但你有没有想过#xff1a;当你点击运行后#xff0c;代码是怎么被执行的#xff1f;数据是怎么在多个节点之间流动的#xff1f; 这篇文章我…Flink架构深度剖析JobManager与TaskManager前言上一篇我们成功跑起了第一个 Flink 程序但你有没有想过当你点击运行后代码是怎么被执行的数据是怎么在多个节点之间流动的这篇文章我们就来揭开 Flink 的底裤——深入剖析 Flink 的架构设计。理解了架构你才能知道程序为什么慢、哪里出了问题、怎么调优。放心我会用大白话 图解的方式来讲保证你看完能说清楚 Flink 的架构。个人主页你的主页目录一、Flink架构全景图二、JobManager详解三、TaskManager详解四、作业提交与执行流程五、Task与SubTask六、算子链与任务槽七、并行度的理解与配置八、高可用架构九、总结一、Flink架构全景图Flink 采用经典的主从架构Master-Slave和 Hadoop、Spark 类似。先看一张全景图┌─────────────────────────────────────────────────────────────────────────┐ │ Flink 集群架构 │ │ │ │ ┌─────────────────────────────────────────────────────────────────┐ │ │ │ JobManager主节点 │ │ │ │ ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ │ │ │ │ Dispatcher │ │ResourceManager│ │ JobMaster │ │ │ │ │ │ 接收作业提交 │ │ 资源管理 │ │ 作业调度执行 │ │ │ │ │ └───────────────┘ └───────────────┘ └───────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ 分配任务 │ │ ↓ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ TaskManager 1 │ │ TaskManager 2 │ │ TaskManager 3 │ │ │ │ ┌────┐ ┌────┐ │ │ ┌────┐ ┌────┐ │ │ ┌────┐ ┌────┐ │ │ │ │ │Slot│ │Slot│ │ │ │Slot│ │Slot│ │ │ │Slot│ │Slot│ │ │ │ │ └────┘ └────┘ │ │ └────┘ └────┘ │ │ └────┘ └────┘ │ │ │ │ 执行任务 │ │ 执行任务 │ │ 执行任务 │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ │ │ │ │ │ │ └──────────────────────┴──────────────────────┘ │ │ 数据交换 │ └─────────────────────────────────────────────────────────────────────────┘一句话概括JobManager 老板负责接活、分配任务、监督进度TaskManager 员工负责干活、汇报状态二、JobManager详解JobManager 是 Flink 集群的大脑负责整个作业的管理和协调。它由三个核心组件构成2.1 三大核心组件┌─────────────────────────────────────────────────────────────────┐ │ JobManager │ │ │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ Dispatcher │ │ │ │ • 提供 REST 接口接收客户端提交的作业 │ │ │ │ • 为每个作业启动一个 JobMaster │ │ │ │ • 负责 Flink WebUI 展示 │ │ │ └────────────────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ ResourceManager │ │ │ │ • 管理集群资源TaskManager 的 Slot │ │ │ │ • 负责 TaskManager 的注册与心跳 │ │ │ │ • 与外部资源管理器对接YARN/K8s/Mesos │ │ │ └────────────────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ JobMaster │ │ │ │ • 每个作业一个 JobMaster │ │ │ │ • 将 JobGraph 转换为 ExecutionGraph │ │ │ │ • 调度 Task 到 TaskManager 执行 │ │ │ │ • 协调 Checkpoint │ │ │ └────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘2.2 用大白话解释打个比方JobManager 就像一个项目管理部门组件角色类比职责Dispatcher前台接待接收客户需求作业分配给项目经理ResourceManagerHR部门管理员工TaskManager分配工位SlotJobMaster项目经理负责具体项目拆解任务、分配工作、跟进进度2.3 JobManager 的核心职责接收作业提交通过 REST API 或命令行接收用户提交的 Jar 包生成执行计划将用户代码转换为可执行的任务图调度任务将任务分配到具体的 TaskManager 执行协调 Checkpoint触发检查点协调各 Task 进行状态快照故障恢复当 Task 失败时重新调度执行三、TaskManager详解TaskManager 是 Flink 集群的劳动力负责实际执行计算任务。3.1 TaskManager 结构┌─────────────────────────────────────────────────────────────────┐ │ TaskManager │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ Task Slot 1 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ SubTask │ │ SubTask │ │ SubTask │ ← 同一 Slot 可 │ │ │ │ │ (Source)│→ │ (Map) │→ │ (Sink) │ 运行多个 SubTask │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ ┌───────────────────────────────────────────────────────────┐ │ │ │ Task Slot 2 │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ SubTask │→ │ SubTask │→ │ SubTask │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ └───────────────────────────────────────────────────────────┘ │ │ │ │ ┌──────────────────────┐ ┌──────────────────────┐ │ │ │ Network Buffer │ │ Memory Pool │ │ │ │ 网络数据缓冲 │ │ 内存管理 │ │ │ └──────────────────────┘ └──────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘3.2 什么是 Task SlotSlot任务槽是 TaskManager 中资源分配的基本单位。你可以把它理解为工位一个 TaskManager 可以有多个 Slot每个 Slot 拥有固定的内存资源不同 Slot 之间内存隔离CPU 共享默认配置每个 TaskManager 有 1 个 Slot。生产环境通常配置 2-4 个。# flink-conf.yamltaskmanager.numberOfTaskSlots:23.3 TaskManager 的核心职责执行任务运行 JobManager 分配下来的 SubTask数据交换与其他 TaskManager 交换数据Shuffle状态管理维护本地状态参与 Checkpoint心跳汇报定期向 JobManager 汇报自身状态3.4 TaskManager vs TaskSlot vs Task这三个概念很容易混淆我们来理清楚概念是什么类比TaskManager一个 JVM 进程一个员工Task SlotTM 中的资源单位员工的工位Task一个算子的并行实例一项具体工作SubTaskTask 的一个并行度实例工作的一个子任务举例一个 Flink 集群有 3 个 TaskManager每个 TaskManager 有 2 个 Slot那么集群总共有 6 个 Slot最多可以同时执行 6 个并行任务四、作业提交与执行流程当你在 IDEA 点击运行或者用flink run提交作业时背后发生了什么4.1 完整流程图┌──────────┐ ┌──────────────────────────────────────────────────────┐ │ Client │ │ JobManager │ │ │ │ │ │ 用户代码 │ │ Dispatcher ResourceManager JobMaster │ └────┬─────┘ └──────┬──────────────┬──────────────────┬─────────────┘ │ │ │ │ │ ① 提交 JobGraph │ │ │ │─────────────────→│ │ │ │ │ │ │ │ │ ② 启动 JobMaster │ │ │────────────────────────────────→│ │ │ │ │ │ │ │ ③ 申请 Slot │ │ │ │←──────────────────│ │ │ │ │ │ │ │ ④ 分配 Slot │ │ │ │──────────────────→│ │ │ │ │ │ │ │ │ ⑤ 部署 Task │ │ │ │─────────┐ │ │ │ │ │ │ │ │ │ ↓ │ │ │ ┌────────────────────┐ │ │ │ │ TaskManager │ │ │ │ │ 执行 Task │ │ │ │ └────────────────────┘4.2 流程详解第一步客户端提交作业// 用户代码env.execute(My Flink Job);当调用execute()时客户端会将用户代码编译成StreamGraph流图优化成JobGraph作业图通过 REST API 提交给 Dispatcher第二步Dispatcher 接收作业Dispatcher 收到 JobGraph 后为这个作业启动一个专属的JobMaster。第三步JobMaster 申请资源JobMaster 分析 JobGraph计算需要多少个 Slot然后向 ResourceManager 申请。第四步ResourceManager 分配 SlotResourceManager 检查有哪些 TaskManager 有空闲 Slot分配给 JobMaster。如果 Slot 不足Standalone 模式等待或报错YARN/K8s 模式动态申请新的 TaskManager第五步部署 Task 执行JobMaster 将 Task 部署到分配好的 Slot 上TaskManager 开始执行。4.3 三种图的转换用户代码在提交过程中会经历三次转换用户代码 │ │ 客户端 ↓ StreamGraph流图 │ │ 客户端优化 ↓ JobGraph作业图 │ │ JobMaster ↓ ExecutionGraph执行图 │ │ 调度执行 ↓ 物理执行图类型生成位置特点StreamGraph客户端最原始的逻辑图一个算子一个节点JobGraph客户端优化后的图可合并的算子会chain在一起ExecutionGraphJobMaster并行化后的图每个节点按并行度展开五、Task与SubTask5.1 什么是 TaskTask是 Flink 执行的基本单位。但这里的 Task 不是指单个算子而是算子链Operator Chain。Flink 会把可以合并的算子串成一个 Task减少数据传输开销。5.2 什么是 SubTaskSubTask是 Task 的并行实例。如果一个 Task 的并行度是 3那么它会有 3 个 SubTask。┌────────────────────────────────────────────────────────────────┐ │ 一个 Task算子链 │ │ │ │ Source → Map → Filter 这三个算子被合并成一个 Task │ │ │ │ 并行度 3 │ │ │ │ ┌─────────────────┐ │ │ │ SubTask 0 │ ← 处理 partition 0 的数据 │ │ │ Source→Map→Filter │ │ └─────────────────┘ │ │ ┌─────────────────┐ │ │ │ SubTask 1 │ ← 处理 partition 1 的数据 │ │ │ Source→Map→Filter │ │ └─────────────────┘ │ │ ┌─────────────────┐ │ │ │ SubTask 2 │ ← 处理 partition 2 的数据 │ │ │ Source→Map→Filter │ │ └─────────────────┘ │ └────────────────────────────────────────────────────────────────┘5.3 Task 数量计算假设有如下作业source.setParallelism(2).map(...).setParallelism(2).keyBy(...).reduce(...).setParallelism(3).sink(...).setParallelism(3);假设 source → map 被 chain 成一个 Taskreduce → sink 被 chain 成一个 TaskTask 1source-map2 个 SubTaskTask 2reduce-sink3 个 SubTask总共需要 5 个 Slot六、算子链与任务槽6.1 什么是算子链Operator Chain算子链是 Flink 的一个重要优化。它把多个算子合并在一起在同一个线程中执行避免了线程切换开销数据序列化/反序列化开销网络传输开销优化前 ┌────────┐ 网络 ┌────────┐ 网络 ┌────────┐ │ Source │ ────────→ │ Map │ ────────→ │ Filter │ └────────┘ └────────┘ └────────┘ ↓ ↓ ↓ 线程1 线程2 线程3 优化后算子链 ┌──────────────────────────────────────────┐ │ Source → Map → Filter │ ← 同一线程执行 │ 算子链 │ └──────────────────────────────────────────┘ ↓ 线程16.2 算子链的条件不是所有算子都能被 chain 在一起需要满足以下条件上下游并行度相同数据传输方式是 Forward一对一传输非 shuffle在同一个 SlotSharingGroup中没有被用户禁用chain6.3 手动控制算子链有时候你可能需要手动控制算子链的行为// 禁用当前算子与下游的 chaindataStream.map(...).disableChaining();// 从当前算子开始一个新的 chaindataStream.map(...).startNewChain();// 全局禁用算子链env.disableOperatorChaining();什么时候需要手动控制某个算子特别重如调用外部 API需要单独监控排查性能问题想看每个算子的耗时6.4 Slot 共享Slot Sharing默认情况下Flink 允许不同 Task 的 SubTask 共享同一个 Slot。┌────────────────────────────────────────────────────────┐ │ Slot │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ Source │ │ Map │ │ Sink │ │ │ │ SubTask0│ │ SubTask0│ │ SubTask0│ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ │ │ ← 三个不同 Task 的 SubTask 共享一个 Slot │ └────────────────────────────────────────────────────────┘好处充分利用 Slot 资源减少需要的 Slot 数量同一 Slot 内数据传输不走网络计算公式需要的 Slot 数 max(各算子的并行度)例如 Source 并行度 2Map 并行度 3Sink 并行度 3那么需要 3 个 Slot而不是 2338。七、并行度的理解与配置7.1 什么是并行度并行度Parallelism就是一个算子同时有多少个实例在并行执行。并行度 1 并行度 3 ┌─────────┐ ┌─────────┐ │ Map │ │ Map 0 │ │ │ ← 单实例 ├─────────┤ └─────────┘ │ Map 1 │ ← 三个实例并行 ├─────────┤ │ Map 2 │ └─────────┘7.2 并行度的四种设置方式优先级从高到低// 1. 算子级别最高优先级dataStream.map(...).setParallelism(2);// 2. 执行环境级别env.setParallelism(3);// 3. 提交时指定// flink run -p 4 xxx.jar// 4. 配置文件最低优先级// flink-conf.yaml: parallelism.default: 17.3 如何设置合理的并行度经验法则场景并行度建议开发测试1-2方便调试生产环境等于或略小于可用 Slot 数Kafka Source等于 Kafka 分区数CPU 密集型接近 CPU 核心数IO 密集型可以超过 CPU 核心数注意Source 的并行度不能超过 Kafka 分区数否则多余的 SubTask 会空转。7.4 并行度实例// 假设 Kafka 有 6 个分区集群有 12 个 Slotenv.setParallelism(6);// 全局默认并行度KafkaSourceStringsourceKafkaSource.Stringbuilder()// ....build();env.fromSource(source,WatermarkStrategy.noWatermarks(),Kafka Source).setParallelism(6)// Source 并行度 Kafka 分区数.map(...).setParallelism(12)// Map 可以更高.keyBy(...).reduce(...).setParallelism(6)// 聚合操作并行度适中.addSink(...).setParallelism(6);八、高可用架构生产环境中JobManager 是单点一旦挂掉整个作业就停了。Flink 支持HAHigh Availability模式。8.1 Standalone HA┌─────────────────────────────────────────────────────────────────┐ │ ZooKeeper 集群 │ │ Leader 选举 │ │ │ │ │ ┌─────────────┼─────────────┐ │ │ ↓ ↓ ↓ │ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │JobManager │ │JobManager │ │JobManager │ │ │ │ (Leader) │ │ (Standby) │ │ (Standby) │ │ │ └───────────┘ └───────────┘ └───────────┘ │ │ │ │ 元数据存储HDFS / S3 / NFS │ └─────────────────────────────────────────────────────────────────┘工作原理多个 JobManager 启动通过 ZK 选举 LeaderLeader 负责实际工作Standby 待命作业元数据JobGraph、Checkpoint 路径存储在共享存储Leader 挂掉后Standby 接管从共享存储恢复8.2 YARN/K8s HA在 YARN 或 K8s 上HA 更简单YARNApplicationMasterJobManager失败后YARN 会自动重启K8s通过 Deployment 配置副本数Pod 失败自动重建8.3 配置示例# flink-conf.yaml# 开启 HAhigh-availability:zookeeperhigh-availability.zookeeper.quorum:zk1:2181,zk2:2181,zk3:2181high-availability.zookeeper.path.root:/flinkhigh-availability.storageDir:hdfs:///flink/ha/high-availability.cluster-id:my-flink-cluster九、总结这篇文章我们深入了解了 Flink 的架构设计核心组件组件职责类比JobManager作业管理、任务调度、协调 Checkpoint老板/项目经理TaskManager执行任务、数据交换、状态管理员工Dispatcher接收作业、启动 JobMaster前台ResourceManager管理资源、分配 SlotHRJobMaster单个作业的调度执行项目经理核心概念概念说明Task SlotTaskManager 中的资源单位内存隔离Task算子链执行的基本单位SubTaskTask 的并行实例算子链多个算子合并减少开销并行度算子的并行实例数Slot 共享不同 Task 可共享 Slot作业执行流程客户端生成 JobGraph提交给 DispatcherDispatcher 启动 JobMasterJobMaster 向 ResourceManager 申请 SlotResourceManager 分配 SlotJobMaster 部署 Task 到 TaskManager 执行下一篇文章我们将学习Flink 的编程模型DataStream 与 DataSet深入理解流批一体的 API 设计。热门专栏推荐Agent小册Java基础合集Python基础合集Go基础合集大数据合集前端小册数据库合集Redis 合集Spring 全家桶微服务全家桶数据结构与算法合集设计模式小册Ai工具小册等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持文章到这里就结束了如果有什么疑问的地方请指出诸佬们一起来评论区一起讨论希望能和诸佬们一起努力今后我们一起观看感谢您的阅读如果帮助到您不妨3连支持一下创造不易您们的支持是我的动力
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

小白网站建设行业自助建站

RomM游戏平台图标完全使用指南:打造专业级游戏库界面 【免费下载链接】romm A beautiful, powerful, self-hosted rom manager 项目地址: https://gitcode.com/GitHub_Trending/rom/romm 还在为游戏库界面缺乏统一视觉效果而苦恼吗?RomM精心整合了…

张小明 2026/3/2 13:09:25 网站建设

南庄做网站京东云 安装wordpress

HunyuanVideo-Foley与Maven项目集成:Java后端调用AI音效生成服务 在短视频和流媒体内容爆炸式增长的今天,一个常被忽视却至关重要的环节正悄然发生变革——音效制作。过去,一段10秒的动画要配上脚步声、风声和背景音乐,可能需要音…

张小明 2026/3/2 16:16:20 网站建设

免费建自己域名的网站模具东莞网站建设

Xcode调试兼容难题终极解决方案:iOS设备支持文件完整指南 【免费下载链接】iOSDeviceSupport All versions of iOS Device Support 项目地址: https://gitcode.com/gh_mirrors/ios/iOSDeviceSupport 当你满怀期待地连接iPhone到Mac准备调试,Xcode…

张小明 2026/1/19 20:12:42 网站建设

建设棋牌类网站要多少钱在线考试类网站怎么做

在信息共享的时代,你是否经常遇到这样的情况:找到了心仪的百度网盘资源链接,却被提取码拦在门外?百度网盘提取码查询工具正是解决这一痛点的利器,让你轻松获取百度网盘分享链接的提取码,告别在各大论坛和社…

张小明 2026/1/19 20:12:12 网站建设

推广型网站制作哪家好wordpress qq微信登陆地址修改

终极指南:5分钟在飞书中部署智能AI助手,实现工作流程革命性升级 【免费下载链接】feishu-openai 🎒 飞书 (GPT-4 GPT-4V DALLE-3 Whisper) 飞一般的工作体验 🚀 语音对话、角色扮演、多话题讨论、图片创…

张小明 2026/1/19 20:11:41 网站建设

模板网站开发定制做设计找图有哪些网站有哪些

应用层才是 AI 机会最多的地方。作者 I 王彬封面 I Unsplash今年以来,中国 AI 路线正在获得全球更多关注。从年初 DeepSeek 等开源模型的破圈传播,到年末一大批面向产业、企业和个人开发者的 AI 应用密集涌现。在中国市场,AI 已经不再是技术展…

张小明 2026/1/19 20:11:10 网站建设