news 2026/6/22 21:27:11

Flink运行架构深度解析:从核心组件到实战提交

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink运行架构深度解析:从核心组件到实战提交

一、Flink运行架构概述

Flink作为一个分布式流式计算引擎,其运行架构主要围绕JobManagerTaskManager两大核心组件展开。

1. JobManager(Master)

负责协调分布式任务的执行,包括任务调度、资源申请、检查点协调和故障恢复等。一个Flink集群可配置多个JobManager实现高可用。

2. TaskManager(Worker)

实际执行任务的节点,每个TaskManager是一个独立的JVM进程,可运行一个或多个任务(Task)。任务通过Slot进行资源隔离和管理。

3. 集群部署模式

  • Standalone模式:Flink自带ResourceManager,负责Slot分配。

  • Yarn/K8s模式:由外部资源调度框架(如Yarn)担任ResourceManager角色。


二、并发度与Slots详解

1. Slot:资源隔离的基本单元

每个TaskManager可配置多个Slot(通过taskmanager.numberOfTaskSlots),Slot代表TaskManager内的一块固定资源子集(内存隔离)。Slot之间不隔离CPU,仅在同一个JVM内做内存隔离。

例如:若集群有3个TaskManager,每个配置1个Slot,则集群共有3个Slot。

2. 并行度(Parallelism):动态执行能力

并行度是指程序运行时实际使用的并发数量,是一个动态概念。Flink允许在三个层面设置并行度,优先级从高到低如下:

  1. 代码中指定(最高优先级)

    java

    env.setParallelism(4); dataStream.map(...).setParallelism(2);
  2. 提交任务时指定
    通过命令行或Web UI提交时设置-p参数。

  3. 配置文件指定(最低优先级)
    flink-conf.yaml中设置parallelism.default

若所需Slot数 > 集群可用Slot数,任务将阻塞或抛出异常。


三、开发环境搭建与示例程序

1. Maven依赖

xml

<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-java</artifactId> <version>1.12.5</version> </dependency> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-streaming-java_2.12</artifactId> <version>1.12.5</version> </dependency>

2. 示例:Socket词频统计(流式WordCount)

java

public class SocketWordCount { public static void main(String[] args) throws Exception { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.setParallelism(1); ParameterTool params = ParameterTool.fromArgs(args); DataStream<String> input = env.socketTextStream(params.get("host"), params.getInt("port")); DataStream<Tuple2<String, Integer>> counts = input .flatMap(new Splitter()).setParallelism(2) .keyBy(0) .sum(1).setParallelism(3); counts.print(); env.execute("Socket WordCount"); } }

3. 本地运行(LOCAL模式)

  1. 启动Socket服务端:

    bash

    nc -lk 7777
  2. 在IDE中配置程序参数:--host hadoop01 --port 7777

  3. 运行程序,输入文本即可实时看到词频累加结果。


四、提交到集群执行与并行度分析

1. 打包与提交

  1. 使用Maven打包生成FlinkDemo-1.0.jar

  2. 通过Flink Standalone Web UI提交:

    • 进入Submit New Job页面

    • 上传JAR文件

    • 指定入口类与全局并行度

2. 任务执行视图

提交后可在Running Jobs页面查看:

  • 数据流图:展示任务执行的各阶段与数据流向

  • Slot占用情况:每个步骤的并行度与Slot数量

3. Slot复用机制

即使一个任务需要的总Slot数(如7个)大于集群总Slot数(如3个),任务仍可运行,因为Slot在不同执行阶段可复用。只要集群Slot数 ≥ 任务中最大并行度所需的Slot数,任务即可执行。

4. 资源竞争与等待

若集群Slot被占满,新任务将等待并重试申请Slot(默认重试10次后暂停)。在attached模式下,客户端会持续输出申请进度。


五、Flink整体运行流程

1. 客户端提交任务

  • 方式:Java程序调用 或./bin/flink run命令

  • 模式

    • Per-job模式:在客户端构建JobGraph后提交

    • Application模式:提交到集群后由JobManager构建JobGraph

  • 连接模式

    • Attached(默认):客户端持续跟踪任务状态

    • Detached:提交后客户端立即退出

2. JobManager内部组件

组件职责
ResourceManager管理Slot资源(Standalone/Yarn/K8s)
Dispatcher提供REST接口与Web UI,为每个任务启动JobMaster
JobMaster管理单个JobGraph的执行

3. 执行流程

text

Client → 提交JobGraph + JAR包 → JobManager → 转换为ExecutionGraph(执行计划) → 向ResourceManager申请Slot → 分发任务到TaskManager → 启动执行

4. TaskManager与Slot

  • 每个TaskManager可配置多个Slot(taskmanager.numberOfTaskSlots

  • 每个Slot对应一个执行线程

  • Slot在同一个任务内可共享,一个Slot即可贯穿整个处理流程


总结

Flink通过JobManagerTaskManager的分离设计,实现了高效的分布式流处理能力。Slot作为资源单位提供内存隔离,并行度作为执行单位提供弹性伸缩。任务通过JobGraph → ExecutionGraph的转换在集群中调度执行,支持Slot复用与多任务并发运行。

掌握Flink的运行架构,有助于在实际开发中合理设置并行度、优化资源使用,并快速定位任务执行中的资源与性能问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 0:49:32

[硬核运营] 告别手动搬运!浅析如何用 Python+RPA 打造“1688 批量采集 -> 智能清洗 -> 自动上架”的无人值守流水线

1688采集 跨境电商RPA 自动上架 数据清洗 ETL技术 铺货模式 自动化工具前言在跨境电商&#xff08;TikTok Shop, Temu, Amazon, Shopify&#xff09;的“唯快不破”时代&#xff0c;铺货速度 往往决定了你能否抢到新品的第一波红利。绝大多数卖家的供应链源头都在 1688。但是&a…

作者头像 李华
网站建设 2026/6/13 18:41:09

CANN Runtime:AI 处理器的运行核心与计算编排中枢

CANN 组织链接&#xff1a; https://atomgit.com/cann runtime 仓库链接&#xff1a; https://atomgit.com/cann/runtime 在异构计算架构中&#xff0c;硬件的强大性能需要高效的软件来激活和管理。对于 AI 处理器而言&#xff0c;CANN Runtime 正是扮演着这一关键角色。作为 C…

作者头像 李华
网站建设 2026/6/15 17:50:47

实操教程:c盘分区小了怎么扩大?分享3种分区扩容方法

看着任务栏里那个刺眼的C盘红色警告条&#xff0c;系统频繁弹出的“磁盘空间不足”提示&#xff0c;这不仅会影响电脑的运行速度&#xff0c;甚至可能导致软件无法安装或系统崩溃。c盘分区小了怎么扩大&#xff1f;针对这个问题&#xff0c;本文会分享多种适合不同水平用户的解…

作者头像 李华
网站建设 2026/6/22 19:42:01

从零开始构建多智能体系统:7种核心架构模式详解,建议收藏!

“单体智能体”&#xff08;指只靠一个大语言模型&#xff0c;再塞一堆系统提示词&#xff09;的路子走不长远。 我们很快就意识到&#xff0c;要搭建高效的系统&#xff0c;得用多个 “专精型智能体”。它们要能协作&#xff0c;还能自主组织。 为实现这一点&#xff0c;AI …

作者头像 李华
网站建设 2026/6/16 14:58:12

AI驱动人才管理系统的分布式架构设计:架构师的考虑

AI驱动人才管理系统的分布式架构设计:架构师的考虑 1. 引入与连接 1.1 引人入胜的开场 想象一下,在一个大型跨国企业中,每天都有成千上万份简历涌入,人力资源部门需要从这些海量信息中筛选出符合岗位要求的潜在人才。传统的人才管理方式犹如在茫茫大海中捞针,效率低下且…

作者头像 李华