Flink 系列第13篇:Flink 生产环境中的并行度与资源配置

Flink 优化-资源配置优化 可以看到容器的 vcore 变了:还是 4 个容器,但是 TaskManager 占用的 3 个容器,每个容器有 2 个 vcore,即 1 + 3 * 2 = 7。可以修改策略为 “DominantResourceCalculator” 该资源计算器在计算资源的时候会综合考虑 cpu 和内存的情况。2)执行开销:JVM 执行时自身所需要的内容,包括线程堆栈、IO、编译缓存等所使用的内存。,所以在 Yarn 的资源管理页面上看到每个容器的 vcore 个数还是 1。Yarn 的容量调度器默认情况下是使用。 阅读详情

一、Flink 中的计算资源

Flink 中的计算资源核心载体是具体执行的 Task,要实现生产环境的高效资源管理与问题定位,需先掌握 Slot、Chain、Task 等核心概念,理解资源的隔离与管理逻辑。

1.1 Task Slot

Flink 集群运行时包含两类核心进程,其中 TaskManager 是计算资源的主要提供方,其核心特性如下:

  • 一个 TaskManager 对应一个独立的 JVM 进程;

  • TaskManager 内部通过独立线程执行 Task;

  • Task Slot 是 TaskManager 的计算资源子集,用于控制 TaskManager 可接收的 Task 数量。

若一个 TaskManager 配置 5 个 Slot,则其计算资源会被平均划分为 5 份,不同 Task 运行在不同 Slot 中,避免资源竞争。需重点注意:Slot 仅实现内存隔离,对 CPU 不做隔离。

同一 JVM 进程(同一 TaskManager)中的 Task 可共享 TCP 连接,减少网络传输开销,提升程序运行效率、降低资源消耗。

1.2 Slot 共享

Flink 默认允许同一 Job 的子任务共享 Slot,核心目的是提高集群资源利用率。

Flink 任务中不同算子的计算压力差异较大:简单算子(如 map、filter)资源需求低,复杂算子(如 window、group by)资源需求高。通过 Slot 共享,资源需求高的算子可复用其他算子的空闲 Slot,避免资源浪费,实现集群资源的高效利用。

1.3 Operator Chain

Operator Chain 是 Flink 内置的任务优化机制,核心逻辑是将多个算子的 Task 连接成一个新的 Task,让其在同一个线程中执行。

该优化可有效减少线程间上下文切换的开销,同时避免算子间数据序列化/反序列化带来的资源消耗,最终提升任务吞吐量。

1.4 并行度

并行度是 Flink 中定义“某一算子被切分成多少个子任务”的核心参数。Flink 代码会先转换为逻辑视图,运行时会根据并行度配置,将逻辑算子切分为对应数量的子任务并行执行。

并行度直接决定了算子的并行处理能力。

二、源码解析(资源申请与分配流程)

Flink Job 执行过程中,资源的申请与分配由多个核心类协同完成,核心流程是:JobManager 通过 SlotProvider 向 ResourceManager(RM)申请资源,RM 协调 TaskManager 满足资源请求,最终将资源分配给对应的 Task 执行。

2.1 核心类与交互流程

资源管理核心类包括 Scheduler(调度器)、SlotPool(资源池)、JobMaster,三者交互流程如下:

  1. Scheduler 向 SlotPool 申请或释放 Slot 资源;

  2. 若 SlotPool 中的空闲资源无法满足 Scheduler 的申请需求,则 SlotPool 向 ResourceManager 发起资源申请;

  3. ResourceManager 协调 TaskManager 提供资源,获取到资源后通过 JobMaster 分配给 SlotPool;

  4. SlotProvider 核心功能:通过 allocateSlot() 方法向 SlotPool 申请可用 Slot,通过 returnLogicSlot() 方法将空闲 Slot 释放回 SlotPool,完成资源循环利用。

三、并行度设置(生产环境重点)

Flink 支持 4 个级别设置并行度,不同级别优先级不同,生产环境需根据业务需求选择合适的设置方式,确保资源合理分配。

并行度优先级(从高到低):算子级别 > 环境级别 > 客户端级别 > 集群配置级别

生产环境推荐使用算子级别的并行度进行资源控制,可实现更精细的资源分配与管控。

3.1 算子级别(推荐)

通过显式调用 setParallelism() 方法,为每个算子单独指定并行度,可根据不同算子的计算压力精准分配资源。

实际生产中,推荐在算子级别显式指定各自的并行度,方便资源的可视化管理与精准控制,避免资源浪费或不足。

示例代码(以 map 算子为例):

// 为map算子单独设置并行度为5
dataStream.map(new MapFunction<String, String>() {
    @Override
    public String map(String value) throws Exception {
        return value.toUpperCase();
    }
}).setParallelism(5);

3.2 环境级别(不推荐)

通过调用 env.setParallelism() 方法,设置整个任务中所有算子的统一并行度。

特点:配置简单,但无法根据算子计算压力差异分配资源,容易造成资源浪费或瓶颈,生产环境不推荐使用。

示例代码:

// 设置整个任务所有算子的并行度为3
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setParallelism(3);

3.3 客户端级别

提交 Flink Job 时,通过命令行参数指定并行度,仅在代码中未设置任何并行度时生效。

核心命令:使用 \-p 参数指定并行度,示例如下:

./bin/flink run -p 5 ../wordCount-java*.jar

适用场景:临时调整任务并行度,无需修改代码。

3.4 集群配置级别(默认)

在 Flink 集群配置文件 flink\-conf\.yaml 中,通过 parallelism\.default 参数设置默认并行度。

生效条件:用户未设置算子级别、环境级别、客户端级别并行度时,该参数生效,作为全局默认值。

配置示例(flink-conf.yaml):

# 全局默认并行度,默认为1
parallelism.default: 3

四、生产环境配置注意事项

  • Slot 配置:根据 TaskManager 的内存大小合理设置 Slot 数量,避免单个 Slot 内存不足导致 OOM,一般建议每个 Slot 分配 1~4GB 内存;

  • 并行度规划:复杂算子(window、group by)并行度建议高于简单算子,结合数据量调整,避免并行度过高导致资源浪费,或并行度过低导致任务瓶颈;

  • 资源隔离:虽 Slot 不隔离 CPU,但可通过控制每个 TaskManager 的 Slot 数量,间接控制 CPU 使用率,避免单个 TaskManager 过载;

  • 并行度优先级:严格遵循“算子级别优先”,避免环境级别并行度覆盖算子的精准配置。

Flink Standalone集群部署与生产环境调优指南 流式计算框架Apache Flink通过其Standalone集群模式为开发者提供了轻量级部署方案,特别适合中小规模数据处理场景。该模式不依赖YARN或Kubernetes等资源管理器,通过JobManager进行任务调度和TaskManager执行运算,实现了高效的数据流处理。在生产环境中,合理的资源配置、检查点优化和网络调优是保证Flink稳定运行的关键,例如TaskManager内存分配需遵循特定公式,检查点机制需要根据业务容忍度调整间隔和超时设置。这些优化手段在金融风控和物联网数据处理等实时计算场景 阅读详情

相关推荐

Flink核心模块解析与生产实践指南

分布式流处理框架Apache Flink通过模块化架构实现高效的流批一体计算。其核心原理基于事件时间处理和有状态计算,采用检查点机制保障Exactly-Once语义。在技术价值方面,Flink提供了低延迟、高吞吐的实时计算能力,特别适合金融风控、实时推荐等场景。本文重点解析Flink运行时层的JobManager和TaskManager协作机制,以及API层的DataStream和Table API使用技巧。针对生产环境常见问题,分享了Kafka连接器优化和状态管理的最佳实践,并介绍了如何通过Prometh

weixin_30907935的博客 331

Flink 优化 (一) --------- 资源配置调优

Flink 资源配置调优

在森林里麋了鹿 2051

Flink与Hadoop集成:大数据生态的无缝对接

将Flink与Hadoop生态无缝集成,不仅能够充分利用Hadoop成熟稳定的存储和资源管理能力,还能发挥Flink强大的实时计算能力,形成"1+1>2"的技术协同效应。本文将深入探讨Flink与Hadoop生态系统集成的方方面面,从基础原理到架构设计,从环境搭建到实战案例,从性能优化到生产实践,为读者提供一份全面、系统、深入的技术指南。(2013-至今):随着实时数据价值的凸显,Storm、Spark Streaming、Flink等流处理框架相继涌现,实时数据处理能力成为企业竞争力的关键指标。

AI云原生与云计算技术学院 954

Flink 常见优化

Flink 性能调优的第一步, 就是为任务分配合适的资源,在一定范围内, 增加资源的分 配与性能的提升是成正比的, 实现了最优的资源配置后, 在此基础上再考虑进行后面论述的 性能调优策略。 提交方式主要是 yarn-per-job, 资源的分配在使用脚本提交 Flink 任务时进行指定。➢ 标准的 Flink 任务提交脚本 (Generic CLI 模式)从 1.11 开始, 增加了通用客户端模式,参数使用-D 指定 参数列表: https://ci.apache...

weixin_46580067的博客 997

别再手动敲flink run了!用海豚调度器DolphinScheduler配置Flink任务,5分钟搞定WordCount案例

本文详细介绍了如何使用海豚调度器DolphinScheduler图形化部署Flink任务,以WordCount案例为例,5分钟即可完成配置。通过可视化编排、参数集中管理和资源统一管控,大幅提升任务部署效率和准确性,特别适合数据开发工程师快速上手。

weixin_33720078的博客 421

Flink on K8s实战:从零配置到任务提交的完整避坑指南

本文详细介绍了Flink on Kubernetes的实战部署指南,从环境准备、镜像构建到任务提交的全流程避坑技巧。重点解析了Application模式和Session模式的配置差异,提供了生产环境下的高可用、监控及性能调优方案,帮助开发者高效实现分布式计算任务在K8s平台的稳定运行。

weixin_30825581的博客 447

Flink 1.13.5 部署与任务提交实战:从Standalone到Yarn的完整配置与验证指南

本文详细介绍了Flink 1.13.5的部署与任务提交实战,涵盖从Standalone到Yarn的完整配置与验证指南。重点解析了Standalone和Standalone HA部署方式,以及Yarn模式下的Session和Per-Job任务提交策略,帮助开发者快速掌握生产环境中的Flink集群部署与调优技巧。

weixin_30780649的博客 298

保姆级教程:在DolphinScheduler 3.x中配置Apache SeaTunnel任务(Flink引擎实战)

本文提供在DolphinScheduler 3.x中配置Apache SeaTunnel任务的详细教程,重点介绍Flink引擎的实战应用。从环境准备到任务创建,再到版本适配和生产级配置,帮助数据工程师高效整合分散数据源,避开常见问题,提升数据处理效率。

weixin_42525005的博客 178

【免费下载】 Apache SeaTunnel 基于 Flink 引擎的快速入门指南

Apache SeaTunnel 是一个高性能、分布式、易扩展的数据集成平台,支持海量数据的实时和离线处理。本文将详细介绍如何使用 Flink 作为计算引擎来运行 SeaTunnel 作业。 ## 环境准备 ### 1. SeaTunnel 安装部署 首先需要完成 SeaTunnel 的基础部署,建议使用最新稳定版本。部署完成后,确保以下目录结构完整: ``` apache-seatunn...

gitblog_00009的博客 773

手把手教你用Hadoop 2.10.1搭建Flink On Yarn高可用环境(含最新版本兼容性测试)

本文详细介绍了基于Hadoop 2.10.1搭建Flink On Yarn高可用环境的完整流程,包括环境规划、软件版本兼容性测试、关键配置优化及生产环境验证。特别针对Flink与Yarn的集成方案提供了深度调优建议和常见问题解决方案,帮助开发者构建稳定高效的实时计算平台。

weixin_30879169的博客 357

Flink CDC同步MySQL到ES踩坑全记录:从Debezium配置、Exactly-Once保证到性能调优(附1.17版本代码)

本文详细介绍了使用Flink CDC将MySQL数据同步到Elasticsearch的实战经验,涵盖Debezium配置、Exactly-Once语义保证及性能调优等关键环节。基于Flink 1.17版本,提供从环境准备到生产问题排查的全流程指南,帮助开发者构建高效可靠的实时数据管道。

justJavaC的专栏 584

Apache SeaTunnel 快速入门指南:基于Flink引擎的实战教程

Apache SeaTunnel 快速入门指南:基于Flink引擎的实战教程 前言 Apache SeaTunnel 是一个高性能、分布式、海量数据集成和处理平台,支持实时和批处理模式。本文将详细介绍如何使用 SeaTunnel 结合 Flink 引擎快速构建数据处理流水线。 环境准备 1. SeaTunnel 部署与连接器配置 首先需要完成 SeaTunnel 的基础部署,确保已按照官方文档正确...

gitblog_00666的博客 604

Flink CDC 与 Kubernetes Operator 深度整合:构建高效实时数据管道的实践指南

本文详细介绍了如何将Flink CDC与Kubernetes Operator深度整合,构建高效的实时数据管道。通过Flink CDC捕获数据库变更事件,结合Kubernetes Operator的声明式管理,实现资源弹性、故障自愈和版本控制。文章包含实战案例,展示MySQL到Elasticsearch的CDC管道构建,并提供生产环境调优策略和故障排查经验。

weixin_29216353的博客 384

免费的大数据处理框架,Flink教程

3. GitHub示例:[https://github.com/apache/flink](https://github.com/apache/flink)2. 中文社区:[https://flink-learning.org.cn/](https://flink-learning.org.cn/)1. 官方文档:[https://flink.apache.org/](https://flink.apache.org/)1. **流处理优先**:以流为基础,批处理视为流的特例。

2509_93945467的博客 268

运行flink on yarn遇到的一些问题

1,根据hadoop的版本在flink的页面上下载对应于hadoop版本和scala版本的flink的包 2,使用start-yarn.sh在集群上运行yarn,启动后可以在8088上面找到yarn的web界面 需要注意的是,需要将resourcemanager的地址指向master的地址 <property> <name>yarn.nodemanager....

zhoucs86的博客 2386

CoaXPress FMC子卡:高速图像采集与FPGA原型开发实战指南

在机器视觉和工业检测领域,高速、可靠的数据传输是核心需求。CoaXPress(CXP)协议作为一种基于同轴电缆的高速接口标准,通过其高带宽、长距离传输和低延迟的特性,有效解决了传统接口在确定性实时传输方面的短板。其技术价值在于为海量图像数据提供了稳定、高效的物理层和数据链路层解决方案,广泛应用于半导体检测、医疗成像等对吞吐量有极致要求的场景。要实现CXP系统的快速原型验证,集成了高速SerDes接口和时钟管理的FMC子卡与FPGA开发板的组合成为关键。这种平台将复杂的硬件设计封装,让开发者能聚焦于图像处理算

weixin_31815843的博客 278

Apache Flink 1.10.0 最新发布,年度最大规模版本升级!

Apache Flink 社区迎来了激动人心的两位数位版本号,Flink 1.10.0 正式宣告发布!作为 Flink 社区迄今为止规模最大的一次版本升级,Flink 1.10 容纳了超过 200 位贡献者对超过 1200 个 issue 的开发实现,包含对 Flink 作业的整体性能及稳定性的显著优化、对原生 Kubernetes 的初步集成以及对 Python 支持(PyFlink)的重大优化...

少年单排,记录点滴 2222

OSG第三方库编译之二十一:minizip编译(Windows、Linux、Macos环境下编译)

OSG编译;第三方库;跨平台编译;minizip编译(Windows、Linux、Macos环境下编译)

LuckyHanMo的博客 2619

复杂Flink任务Task均衡调度和优化措施

300万字!全网最全大数据学习面试社区等你来!一、背景:flink任务部署使用基于k8s的standalone集群,先在容器上部署flink集群再提交flink任务,其中flink任务的提交与taskmanager的创建、注册是同时进行的。二、问题如果集群有35个taskmanager,140个slot,其中一个Vertex的并行度<140,属于该vertex的task在taskmanage...

微信搜:import_bigdata,大数据领域硬核原创作者 1341

AI智能体实战:从LangChain到多智能体协作的自动化新范式

在人工智能技术快速发展的今天,大语言模型(LLM)已成为推动自动化变革的核心驱动力。其原理在于通过深度学习海量文本数据,使模型能够理解、生成自然语言并执行推理任务。这一技术进步催生了AI智能体(AI Agent)这一新兴概念,它赋予自动化系统自主决策和动态规划能力,从而突破了传统脚本和RPA工具在固定流程上的局限。从技术价值看,AI智能体框架通过封装LLM调用、工具集成与流程编排,显著降低了构建复杂人机协同应用的开发门槛。在实际应用场景中,智能体尤其擅长处理信息调研、内容创作辅助、数据分析等需要处理非结构化

weixin_33730836的博客 773

ERROR conda.core.link:_execute(502): error occurred while installing conda-forge::setuptools 解决方案

本文主要介绍了ERROR conda.core.link:_execute(502): An error occurred while installing package mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge::setuptools-65.5.1-pyhd8ed1ab_0.FileNotFoundError(2, 系统找不到指定的文件。, None, 2) 解决方案,希望能对新手有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+
上一篇: Flink 系列第12篇:Flink 维表关联详解
下一篇: Flink 系列第14篇:Flink Metrics 监控指标详解(生产环境版)
juniperhan
博客等级 码龄1年 132粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值