教育网站建设计划书网站百度显示绿色官网字如何做的

张小明 2026/1/7 12:51:22
教育网站建设计划书,网站百度显示绿色官网字如何做的,怎样做运营一个网站,wordpress子目录 多站点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进行投诉反馈,一经查实,立即删除!

投资公司网站建设意义wordpress添加微信公众号

想不想把家里的旧电视盒子变成怀旧游戏设备?🎮 TVBoxOSC这款开源工具能让你在现代电视设备上重温《超级马里奥》《魂斗罗》等经典游戏。本文专为新手设计,带你轻松搭建专属的电视大屏游戏体验。 【免费下载链接】TVBoxOSC TVBoxOSC - 一个基于…

张小明 2026/1/6 6:34:13 网站建设

网站怎么企业备案信息查询建筑设计图纸

JD-GUI终极实战:Java代码逆向分析的10个高效技巧 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 在Java开发领域,掌握代码逆向分析能力是每个中级开发者必备的技能。JD-GUI作为业…

张小明 2026/1/5 12:36:13 网站建设

做网站视频 上传到哪儿性价比最高网站建设价格

夏普 Zaurus PDA 黑客工具介绍 在网络安全和渗透测试领域,有许多工具可以用于不同的目的,如端口扫描、建立安全隧道、测试防火墙规则等。本文将介绍一些可用于夏普 Zaurus PDA 的工具及其功能、下载地址和使用方法。 1. BING Bing 是一个简单的脚本,可自动执行端口扫描。…

张小明 2026/1/6 5:44:11 网站建设

手机版网站建设企业网站电话

文章目录 0 前言1 项目运行效果2 设计原理3 数据收集和处理4 卷积神经网络4.1卷积层4.2 池化层4.3 激活函数:4.4 全连接层4.5 使用tensorflow中keras模块实现卷积神经网络 5 MobileNetV2网络6 损失函数softmax 交叉熵6.1 softmax函数6.2 交叉熵损失函数 7 优化器SGD…

张小明 2026/1/3 22:19:18 网站建设

关于网站建设的合同范本wordpress 自适应 主题

第一章:大模型与AutoGLM融合的未来展望随着人工智能技术的迅猛发展,大模型在自然语言处理、代码生成和知识推理等领域展现出前所未有的能力。其中,AutoGLM作为结合自动化机器学习与通用语言模型的前沿探索,正逐步成为推动AI系统自…

张小明 2026/1/6 19:13:55 网站建设

o2o网站建设方案ppt手机erp系统免费版

用PWM“调光”蜂鸣器?揭秘有源蜂鸣器的节能发声黑科技 你有没有遇到过这样的问题:一个小小的蜂鸣器,响起来挺精神,但电池却掉得飞快?尤其是在智能门锁、温湿度传感器这类靠纽扣电池撑一年的设备里,每次“嘀…

张小明 2026/1/3 22:24:58 网站建设