热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

06Flink基础(1)/构建大数据平台

https:flink.apache.orgApacheFlink是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink能在所有常见集群环境中运行,并

图片

https://flink.apache.org/

Apache Flink是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。



01 Flink架构

图片

Flink运行时由一个JobManager和一个或者多个TaskManager组成,Client不是运行时和程序执行的一部分,用于准备数据流并将其提交给 JobManager。

./bin/flink run  /path/to/WordCount.jar

JobManager

JobManager负责协调Flink应用程序的执行,如何时调度下一个task(或一组 task)、对完成的task或执行失败做出反应、协调checkpoint、并且协调从失败中恢复等。

TaskManager

也称为worker,执行作业流的task,并且缓存和交换数据流。至少有一个TaskManager,TaskManager中资源调度的最小单位slot,所有TaskManager中slot的数量之和表示并发处理task的数量。

Flink应用程序从代码编写、到提交JobManager,到TaskManager调度执行涉及到四种不同的图

图片

stream graph

Flink应用程序的原始算子执行链,可在execute之前通过打印env.getExecutionPlan()输出stream graph(JSON),并将JSON串拷贝到_https://flink.apache.org/visualizer/_ 查看 stream graph,考虑如下代码

图片

通过Flink Plan Visualizer查看

图片

stream graph

job graph

也称为logical graph或dataflow graph,Client端完成,在stream graph的基础上做了一个很重要的优化:operator chain(算子链)

算子链由两个或多个连续的operator组成,两者之间没有任何的重新分区。同一算子链内的算子可以彼此直接传递record,减少线程间切换,无需通过序列化或Flink的网络栈。

图片

job graph

execution graph

JobManager将Client提交的job graph转化为execution graph,这是并行化,可调度的执行图。

physical graph

JobManager根据execution graph进行调度后,在各个TaskManager上部署 Task 后形成的运行时图



02 算子

用户通过算子能将一个或多个 DataStream 转换成新的 DataStream,在应用程序中可以将多个数据转换算子合并成一个复杂的数据流拓扑。如map、flatMap、filter是一种forward(保持元素的顺序和分区不变)算子,source、sink也是特殊的算子。实际上dataflow graph中的一个节点就是算子(或算子链)。

每个算子都有属于自己的并行度,每个并行度会产生一个在execution graph中对应的结点。

算子链将多个算子链接在一起能使得它们在同一个线程中执行,从而提升性能。Flink默认会将能链接的算子尽可能地进行链接(如两个map转换操作)。

===========================================================================



03 Task与subTask

图片

向JobManager提交的任务是一个Job,比如SocketWordCount就是一个Job。



  • Task是逻辑概念,一个operator就代表一个Task(operator chain算一个operator)



  • 运行时,Task会按照并行度分成多个subtask,subtask是执行/调度的基本单元



  • 每个subtask由一个线程执行





**04 Slot

**

每个worker(TaskManager)都是一个JVM进程,可以在单独的线程中执行一个或多个 subtask,为了控制一个TaskManager中接受多少个subtask,于是有了task slots。

图片

subtask是执行的基本单元,slot则是资源分配的基本单元,slot只隔离内存,不隔离CPU。

Flink默认允许同一个Job中不同Task的subtask运行在一个Slot中。结果就是一个slot 可以持有整个作业管道。允许slot 共享有两个主要优点:



  • Flink集群所需的task slot和作业中使用的最大并行度(算子并行度)一样



  • 容易获得更好的资源利用。如果没有slot共享,非密集subtask(source/map)将阻塞和密集型subtask(window) 一样多的资源



图片



推荐阅读
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 如何使用 `org.apache.tomcat.websocket.server.WsServerContainer.findMapping()` 方法及其代码示例解析 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 美团优选推荐系统架构师 L7/L8:算法与工程深度融合 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 本文探讨了在PHP中实现MySQL分页查询功能的优化方法与实际应用。通过详细分析分页查询的常见问题,提出了多种优化策略,包括使用索引、减少查询字段、合理设置缓存等。文章还提供了一个具体的示例,展示了如何通过优化模型加载和分页参数设置,显著提升查询性能和用户体验。 ... [详细]
author-avatar
漫路细雨中_575
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有