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

flink中startNewChain() 的详解

        在 Apache Flink 中,startNewChain() 是一个与算子链(operator chaining)相关的方法。与 disableChaining() 类似,它允许开发者控制算子链的创建方式,但 startNewChain() 的作用是从当前算子开始创建一个新的算子链,而不是完全禁止链式合并。

1. 作用

   startNewChain() 的主要作用是从当前算子开始强制开启一个新的算子链。Flink 默认会将多个连续的算子自动链在一起作为一个任务运行,以减少开销和提高性能。但通过 startNewChain(),你可以控制从某个算子开始,停止将前面的算子与它合并,并从它开始创建一个新的链。

  • 创建新的算子链:该算子将作为一个新的链的起点,不会与前面的算子链合并。
  • 更灵活的任务分配:在需要调整任务的执行结构时,可以通过这种方式将某些算子分离开来。
  • 部分链式执行:与 disableChaining() 不同,startNewChain() 不会禁止后续算子与当前算子进行链式合并,只是从当前算子开始断开前面的链。

2. 使用场景

  • 优化任务调度:通过为某些算子开启新的链,开发者可以更灵活地优化任务调度结构,确保关键任务能够得到独立执行。
  • 资源管理与性能优化:当某个算子需要独立分配资源或需要特别的调度策略时,可以使用 startNewChain() 确保它作为新的起点,不与前面的算子共享资源。
  • 部分调试与监控:通过将算子从前面的链分离开来,可以针对特定的任务链进行监控和调试。
  • 算子分离:如果某些算子需要隔离以避免性能瓶颈或资源竞争问题,可以通过 startNewChain() 将它们从已有的算子链中分离出来。

3. 代码示例

import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.datastream.DataStream;public class StartNewChainExample {public static void main(String[] args) throws Exception {// 创建执行环境StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();// 创建数据流DataStream<String> stream = env.fromElements("one", "two", "three", "four");// 第一个 map 操作:默认算子链合并stream.map(value -> {System.out.println("Map 1: " + value);return value.toUpperCase();})// 从这里开始一个新的算子链.startNewChain().map(value -> {System.out.println("Map 2 (new chain): " + value);return "Processed: " + value;}).filter(value -> value.startsWith("P"));// 执行作业env.execute("Start New Chain Example");}
}

4. 效果

  • 新的链式执行起点:在上述代码中,stream.map(value -> value.toUpperCase()) 和它前面的部分属于默认的算子链,而通过 startNewChain()map(value -> "Processed: " + value) 开始了一个新的算子链,断开了与前面部分的链式合并。

  • 任务拆分:Flink 在调度时会识别从 startNewChain() 开始的算子,并将它作为一个新任务的起点。这样,map 和后续的 filter 可能会被放在一个新的 slot 或独立执行,不再与前面的算子链共享同一个任务资源。

  • 优化资源调度:由于从当前算子开启了新的链,Flink 在分配任务槽时将会为新的链分配不同的资源,从而提高调度灵活性。这对于具有复杂计算逻辑的算子来说非常有用,可以避免其资源消耗影响到前后的算子。

  • 调试与监控方便:通过将算子链分隔开来,监控和分析特定算子的执行性能变得更加简单,开发者可以清楚地看到每个链的资源消耗和执行情况。

总结

   startNewChain() 是一个强大的工具,允许开发者精确控制 Flink 作业中的算子链划分。它不会完全禁用链式合并,但允许从某个算子开始独立形成新链,这对任务调度优化、资源分配和调试分析有着重要作用。与 disableChaining() 不同,它保留了对后续算子链的优化潜力,但更灵活地打破了默认的算子链合并策略。

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

相关文章:

  • uniapp 苹果安全域适配
  • linux使用命令行编译qt.cpp
  • Ubuntu 22.04 LTS 上安装 Docker
  • 2024秋季云曦开学考
  • 基于STM32与Qt的自动平衡机器人:从控制到人机交互的的详细设计流程
  • C#使用ZipFile的方法CreateFromDirectory
  • Redis 哨兵模式的选举算法是什么?
  • Linux shell编程学习笔记80:gzip命令——让文件瘦身
  • 【字幕】恋上数据结构与算法之01为什么要学习数据结构与算法
  • 120页ppt丨集团公司战略规划内容、方法、步骤及战略规划案例研究
  • 滚雪球学SpringCloud[2.3]:服务发现与负载均衡详解
  • 商务英语口语之聚会宴饮常用口语柯桥培训到蓝天广场
  • 【C#】VS插件
  • 嵌入式C语言自我修养:C语言的面向对象编程思想
  • 行车记录仪格式化了怎么恢复?专业恢复方法分享
  • C++中extern ”c“的理解
  • 红黑树的删除
  • Vue3+setup实现父子组件单表增删改查写法模板
  • jmeter 录制APP脚本
  • C++类与对象深度解析(一):从抽象到实践的全面入门指南
  • docker拉取 jdk 8
  • 机器学习VS深度学习
  • 基于vue框架的宠物交流平台1n2n3(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • Rust 所有权 借用与引用
  • 构建智能电商新生态:深度解析京东商品详情API的力量
  • Golang | Leetcode Golang题解之第398题随机数索引
  • 使用注意力机制可以让你的模型更加灵活,但是需要额外的计算资源。rnn lstm bilstm attension
  • git命令大全
  • 【数据仓库】数据仓库常见的数据模型——范式模型
  • 【LeetCode每日一题】——LCR 078.合并 K 个升序链表