当前位置: 首页 > 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() 不同,它保留了对后续算子链的优化潜力,但更灵活地打破了默认的算子链合并策略。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【计网】从零开始使用UDP进行socket编程 --- 服务端业务实现
  • 相亲交友中的用户画像构建方法探讨
  • cfs三层靶机——内网渗透
  • centos中yum方式部署Jenkins
  • git github仓库管理
  • idea激活页面怎么打开
  • 搜索二叉树BSTree的原理及实现
  • 监控系列之-prometheus部署说明
  • 服务器搭建FTP服务
  • SurfaceTexture OnFrameAvailableListener 调用流程分析
  • C++11的部分新特性
  • 《微信小程序实战(1)· 开篇示例 》
  • 工作流activiti笔记(四)审批人设置
  • Python | Leetcode Python题解之第403题青蛙过河
  • 如何使用 Vue 3 的 Composition API
  • Debian下无root权限使用Python访问Oracle
  • Go 语言编译器的 //go: 详解
  • Js基础知识(一) - 变量
  • magento 货币换算
  • Spring-boot 启动时碰到的错误
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • tweak 支持第三方库
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 每天10道Java面试题,跟我走,offer有!
  • 前端存储 - localStorage
  • 如何优雅地使用 Sublime Text
  • 时间复杂度与空间复杂度分析
  • 突破自己的技术思维
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用 Swift 编写面向协议的视图
  • 转载:[译] 内容加速黑科技趣谈
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 回归生活:清理微信公众号
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #70结构体案例1(导师,学生,成绩)
  • #HarmonyOS:Web组件的使用
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)Neo4j下载安装以及初次使用
  • (转)Mysql的优化设置
  • (转)Unity3DUnity3D在android下调试
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET Framework 3.5安装教程
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .net/c# memcached 获取所有缓存键(keys)
  • .netcore 获取appsettings
  • .net开发日常笔记(持续更新)