网站开发 跨平台开发技术南京网站c建设云世家
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:39
当前位置: 首页 > news >正文
网站开发 跨平台开发技术,南京网站c建设云世家,苏州做网站公司选苏州聚尚网络,能买源码的网站有哪些Apache Flink 是一个框架和分布式处理引擎#xff0c;用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行#xff0c;并能以内存速度和任意规模进行计算。 文章目录 0. 处理无界和有界数据无界流有界流 1. Flink程序和数据流图2. 为什么一定要… Apache Flink 是一个框架和分布式处理引擎用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行并能以内存速度和任意规模进行计算。 文章目录 0. 处理无界和有界数据无界流有界流 1. Flink程序和数据流图2. 为什么一定要用算子的形式来写程序呢3. 从逻辑视图转化为物理执行图4. 数据交换策略5. Flink分布式架构与核心组件1. Flink作业提交过程 6. Flink核心组件1. Client2. Dispatcher3. JobManager4. ResourceManager5.TaskManager 0. 处理无界和有界数据 任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录所有这些数据都形成一种流。 数据可以被作为 无界 或者 有界 流来处理。 无界流 有定义流的开始但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理因为输入是无限的在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件例如事件发生的顺序以便能够推断结果的完整性。 有界流 有定义流的开始也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序所以并不需要有序摄取。有界流处理通常被称为批处理 Apache Flink 擅长处理无界和有界数据集 精确的时间控制和状态化使得 Flink 的运行时(runtime)能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理产生了出色的性能。
- Flink程序和数据流图 如图所示Flink程序分为三大部分第1部分读取数据源Source第2部分对数据做转换操作Transformation第3部分将转换结果输出到一个目的地Sink。 代码中 sum()、flatMap()、keyBy()、timeWindow() 这些方法是Flink提供给程序员的接口程序员需要调用并实现这些函数对数据进行操作进而变成特定的业务逻辑。 通常一到多个函数会组成一个算子Operator、算子执行对数据的操作Operation。在WordCount的例子中有以下3类算子。 Source 算子读取数据源中的数据数据源可以是数据流也可以存储在文件系统中的文件。 Transformation 算子对数据进行必要的计算处理。 Sink 算子将处理结果输出数据一般被输出到数据库、文件系统或消息队列。 :::info 我们先对这个程序中各个函数做一个简单的介绍关于这些函数的具体使用方式将在后文中详细说明。 ::: 1flatMap() 对输入进行处理生成零到多个输出。本例中它执行一个简单的分词过程对一行字符串按照空格切分生成一个(word1)的Key-Value二元组。 2 keyBy() 根据某个Key对数据重新分组。本例中是将二元组(word,1)中第一项作为Key进行分组相同的单词会被分到同一组。 3timeWindow() 是时间窗口函数用来界定对多长时间之内的数据做统计。 4sum() 为求和函数。sum(1)表示对二元组中第二个元素求和因为经过前面的keyBy()算子将所有相同的单词都分到了一组因此在这个分组内将单词出现的次数相加就得到出现的总次数。 :::info 在程序实际执行前Flink会将用户编写的代码做一个简单处理生成一个如图所示的逻辑视图。 ::: 上图展示了WordCount程序中数据在不同算子间流动的情况。 图中圆圈代表算子圆圈间的空心箭头代表数据流数据流在Flink程序中经过不同算子的计算最终生成结果。 其中keyBy()、timeWindow() 和 sum() 共同组成了一个时间窗口上的聚合操作被归结为一个算子 Window Aggregation。我们可以在Flink的WebUI中单击一个作业查看这个作业的逻辑视图。 对于WordCount程序逻辑上来讲无非是对数据流中的单词做提取然后使用一个Key-Value二元组对单词做词频计数最后输出结果即可。这样的逻辑本可以用几行代码完成改成使用算子形式反而让人看得一头雾水。
- 为什么一定要用算子的形式来写程序呢 实际上算子进化成当前这个形态就像人类从石块计数到手指计数、算盘计数再到计算机计数这样的进化过程一样尽管更低级的方式可以完成一定的计算任务但是随着计算规模的增长古老的计数方式存在着低效的弊端无法完成更高级别和更大规模的计算需求。 试想如果我们不使用大数据处理框架提供的算子而是自己实现一套上述的计算逻辑尽管我们可以快速完成当前的词频统计的任务但是当面临一个新计算任务时我们需要重新编写程序完成一整套计算任务。我们自己编写代码的横向扩展性可能很差当输入数据暴增时我们需要做很大改动以部署在更多节点上。 :::info 大数据框架的算子对计算做了一些抽象对于人们来说有一定学习成本而一旦掌握这门技术人们所能处理的数据规模将成倍增加。 ::: 算子的出现正是针对大数据场景下人们需要一种统一的计算描述语言来对数据做计算而进化出的新计算形态。基于Flink的算子我们可以定义一个数据流的逻辑视图以此完成对大数据的计算。剩下那些数据交换、横向扩展、故障恢复等问题可交由大数据框架来解决。
- 从逻辑视图转化为物理执行图 在绝大多数的大数据处理场景下一个节点无法处理所有数据数据会被切分到多个节点上。在大数据领域当数据量大到超过单个节点处理能力时需要将一份数据切分到多个分区Partition上每个分区分布在一台虚拟机或物理机上。 大数据框架的算子提供了编程接口我们可以使用算子构建数据流的逻辑视图。考虑到数据分布在多个节点的情况逻辑视图只是一种抽象需要将逻辑视图转化为物理执行图才能在分布式环境下执行。 如图所示为 WordCount 程序的物理执行图数据流分布在2个分区上。空心箭头部分表示数据流分区圆圈部分表示算子在分区上的算子子任务Operator Subtask。从逻辑视图变为物理执行图后FlatMap 算子在每个分区都有一个算子子任务以处理该分区上的数据FlatMap[1⁄2] 算子子任务处理第一个数据流分区上的数据以此类推。 在分布式计算环境下执行计算的单个节点物理机或虚拟机被称为实例一个算子在并行执行时算子子任务会分布到多个节点上所以算子子任务又被称为算子实例Instance。即使输入数据增多我们也可以通过部署更多的算子子任务来进行横向扩展。从图中可以看到除去 Sink 外的算子都被分成了2个算子子任务它们的并行度Parallelism为2 Sink 算子的并行度为1。并行度是可以被设置的当设置某个算子的并行度为2时也就意味着这个算子有2个算子子任务或者说2个算子实例)并行执行。实际应用中一般根据输入数据量的大小、计算资源的多少等多方面的因素来设置并行度。
- 数据交换策略
如上图中出现了数据流动的现象即数据在不同的算子子任务上进行数据交换。无论是Hadoop、Spark还是Flink都会涉及数据交换策略。常见的数据交换策略有4种如下图所示。
前向传播Forward前一个算子子任务将数据直接传递给后一个算子子任务数据不存在跨分区的交换也避免了因数据交换产生的各类开销前面 wordCount 中 Source 和 FlatMap 之间就是这样的情形。按Key分组Key-Based数据以 (Key,Value) 二元组形式存在该策略将所有数据按照Key进行分组相同Key的数据会被分到一组、发送到同一个分区上。WordCount程序中keyBy() 将单词作为Key把相同单词都发送到同一分区以方便后续算子的聚合统计。广播Broadcast将某份数据发送到所有分区上这种策略涉及了数据在全局的复制因此非常消耗资源。随机Random该策略将所有数据随机均匀地发送到多个分区上以保证数据平均分配到不同分区上。该策略通常为了防止数据倾斜到某些分区导致部分分区数据稀疏另外一些分区数据拥堵的情况发生。 - Flink分布式架构与核心组件 :::info 为了支持分布式执行Flink跟其他大数据框架一样采用了主从Master-Worker架构。 ::: Flink执行时主要包括如下两个组件。 Master 是一个 Flink 作业的主进程。它起到了协调管理的作用。TaskManager又被称为Worker或Slave是执行计算任务的进程。它拥有CPU、内存等计算资源。Flink作业需要将计算任务分发到多个TaskManager上并行执行。下面将从作业执行层面来分析Flink各个模块如何工作。
- Flink作业提交过程 Flink为适应不同的基础环境Standalone集群、YARN、Kubernetes在不断迭代开发过程中已经逐渐形成了一个兼容性很强的架构。不同的基础环境对计算资源的管理方式略有不同不过都大同小异图所示为以Standalone集群为例分析作业的提交过程。Standalone模式指Flink独占该集群集群上无其他任务。 在一个作业提交前Master和TaskManager等进程需要先被启动。我们可以在Flink主目录中执行脚本来启动这些进程bin/start-cluster.sh。Master和TaskManager被启动后TaskManager 需要将自己注册给 Master 中的 ResourceManager。这个初始化和资源注册过程发生在单个作业提交前我们称之为第0步。 ① 用户编写应用程序代码并通过Flink客户端Client提交作业。程序一般为Java或Scala语言调用Flink API构建逻辑视图。代码和相关配置文件被编译打包被提交到Master的Dispatcher形成一个应用作业Application)。 ② Dispatcher接收到这个作业启动JobManager这个JobManager会负责本次作业的各项协调工作。 ③ JobManager向ResourceManager申请本次作业所需资源。 ④ 由于在第0步中TaskManager已经向ResourceManager中注册了资源这时闲置的TaskManager会被反馈给JobManager。 ⑤ JobManager将用户作业中的逻辑视图转化为并行化的物理执行图将计算任务分发部署到多个TaskManager上。至此一个Flink作业就开始执行了。 TaskManager在执行计算任务过程中可能会与其他TaskManager交换数据会使用一些数据交换策略。同时TaskManager也会将一些任务状态信息反馈给JobManager这些信息包括任务启动、执行或终止的状态快照的元数据等。 6. Flink核心组件 有了这个作业提交流程读者对各组件的功能应该有了更全面的认识接下来我们再对涉及的各个组件进行更为详细的介绍。
- Client 用户一般使用Client提交作业比如Flink主目录下bin目录中提供的命令行工具。Client会对用户提交的Flink作业进行预处理并把作业提交到Flink集群上。Client提交作业时需要配置一些必要的参数比如使用Standalone集群还是YARN集群等。整个作业被打成了JAR包DataStream API被转换成了JobGraphJobGraph是一种逻辑视图。
- Dispatcher Dispatcher可以接收多个作业每接收一个作业Dispatcher都会为这个作业分配一个JobManager。Dispatcher对外提供 restful 接口以 http 来对外提供服务。
- JobManager :::info JobManager 是单个Flink作业的协调者一个作业会有一个JobManager来负责。 ::: JobManager会将Client提交的JobGraph转化为ExecutionGraphExecutionGraph是并行的物理执行图。JobManager会向ResourceManager申请必要的资源当获取足够的资源后JobManager将ExecutionGraph以及具体的计算任务分发部署到多个TaskManager上。同时JobManager还负责管理多个TaskManager包括收集作业的状态信息、生成检查点、必要时进行故障恢复等。 早期Flink Master被命名为JobManager负责绝大多数Master进程的工作。随着迭代和开发出现了名为JobMaster的组件JobMaster负责单个作业的执行。本书中我们仍然使用JobManager的概念表示负责单个作业的组件。一些Flink文档也可能使用JobMaster的概念读者可以将JobMaster等同于JobManager来看待。
- ResourceManager Flink现在可以部署在 Standalone、YARN或Kubernetes 等环境上不同环境中对计算资源的管理模式略有不同Flink使用一个名为 ResourceManager 的模块来统一处理资源分配上的问题。 :::info 在Flink中计算资源的基本单位是TaskManager上的任务槽位Task Slot简称Slot。 ::: ResourceManager 的职责主要是从YARN等资源提供方获取计算资源当JobManager有计算需求时将空闲的Slot分配给JobManager。当计算任务结束时ResourceManager 还会重新收回这些Slot。 5.TaskManager TaskManager 是实际负责执行计算的节点。一般地一个Flink作业是分布在多个TaskManager上执行的单个TaskManager上提供一定量的Slot。一个 TaskManager 启动后相关Slot信息会被注册到 ResourceManager 中。当某个Flink作业提交后ResourceManager 会将空闲的Slot提供给 JobManager。JobManager 获取到空闲的 Slot 后会将具体的计算任务部署到空闲 Slot 之上任务开始在这些 Slot 上执行。在执行过程由于要进行数据交换TaskManager 还要和其他 TaskManager 进行必要的数据通信。 :::info 总之TaskManager 负责具体计算任务的执行启动时它会将 Slot 资源向 ResourceManager 注册。 :::
- 上一篇: 网站开发 介绍 回扣设计网站可能遇到的问题
- 下一篇: 网站开发 浏览器江苏城乡和住房建设厅网站
相关文章
-
网站开发 介绍 回扣设计网站可能遇到的问题
网站开发 介绍 回扣设计网站可能遇到的问题
- 技术栈
- 2026年03月21日
-
网站开发 嘉定wordpress忘记了密码
网站开发 嘉定wordpress忘记了密码
- 技术栈
- 2026年03月21日
-
网站开发 基础教学视频聊城营销网站建设价格
网站开发 基础教学视频聊城营销网站建设价格
- 技术栈
- 2026年03月21日
-
网站开发 浏览器江苏城乡和住房建设厅网站
网站开发 浏览器江苏城乡和住房建设厅网站
- 技术栈
- 2026年03月21日
-
网站开发 旅游个人网站取什么域名好
网站开发 旅游个人网站取什么域名好
- 技术栈
- 2026年03月21日
-
网站开发 密码wordpress页面不要菜单
网站开发 密码wordpress页面不要菜单
- 技术栈
- 2026年03月21日
