Flink的API分层、架构与组件原理、并行度、任务执行计划

这篇具有很好参考价值的文章主要介绍了Flink的API分层、架构与组件原理、并行度、任务执行计划。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flink的API分层

Flink的API分层、架构与组件原理、并行度、任务执行计划,flink,flink,大数据

        Apache Flink的API分为四个层次,每个层次都提供不同的抽象和功能,以满足不同场景下的数据处理需求。下面是这四个层次的具体介绍:

  • CEP API:Flink API 最底层的抽象为有状态实时流处理。其抽象实现是Process Function,并且Process Function被  框架集成到了DataStream API中来为我们使用。它允许用户在应用程序中自由地处理来自单流或多流的事件(数据),并提供具有全局一致性和容错保障的状态。此外,用户可以在此层抽象中注册事件时间(event time)和处理时间(processing time)回调方法,从而允许程序可以实现复杂计算。

  • Core APIs:Flink API 第二层抽象是Core APIs。实际上,许多应用程序不需要使用到上述最底层抽象的 API,而是可以使用Core APIs进行编程:其中包含DataStream API(应用于有界/无界数据流场景)和DataSet API(应用于有界数据集场景)两部分。Core APIs 提供的流式 API(Fluent API)为数据处理提供了通用的模块组件,例如各种形式的用户自定义转换(transformations)、联接(joins)、聚合(aggregations)、窗口(windows)和状态(state)操作等。此层 API 中处理的数据类型在每种编程语言中都有其对应的类。

    Process Function 这类底层抽象和 DataStream API 的相互集成使得用户可以选择使用更底层的抽象 API 来实现自己的需求。DataSet API 还额外提供了一些原语,比如循环/迭代(loop/iteration)操作。

  • Table API:Flink API 第三层抽象是Table API。Table API是以表(Table)为中心的声明式编程(DSL)API,例如在流式数据场景下,它可以表示一张正在动态改变的表。Table API遵循(扩展)关系模型:即表拥有 schema(类似于关系型数据库中的 schema),并且 Table API 也提供了类似于关系模型中的操作,比如 select、project、join、group-by 和 aggregate 等。Table API 程序是以声明的方式定义应执行的逻辑操作,而不是确切地指定程序应该执行的代码。尽管 Table API 使用起来很简洁并且可以由各种类型的用户自定义函数扩展功能,但还是比 Core API 的表达能力差。此外,Table API 程序在执行之前还会使用优化器中的优化规则对用户编写的表达式进行优化。

           表和DataStream/DataSet可以进行无缝切换,Flink 允许用户在编写应用程序时将Table API与DataStream/DataSetAPI 混合使用。Table API提供了更简洁、易读的编程模型,适合对结构化数据进行处理。

  • SQL API:Flink API 最顶层抽象是SQL。这层抽象在语义和程序表达式上都类似于Table API,但是其程序实现都是 SQL 查询表达式。SQL抽象与 Table API 抽象之间的关联是非常紧密的,并且 SQL 查询语句可以在Table API中定义的表上执行。用户可以将SQL查询直接提交给Flink引擎,然后Flink会将查询解析为对应的Table API操作,并执行查询计划。SQL API使得熟悉SQL语言的用户能够更方便地使用Flink进行数据处理,无需编写额外的代码。

        这四个层次的API相互补充,用户可以根据自己的需求和技术背景选择适合的API进行数据处理。无论使用哪个层次的API,底层都是Flink的核心引擎来执行计算任务,因此它们在性能和功能上是相当的,只是提供了不同的编程模型和抽象层次。

Flink架构

Flink的API分层、架构与组件原理、并行度、任务执行计划,flink,flink,大数据

        当 Flink 集群启动后,首先会启动一个 JobManger 和一个或多个的 TaskManager。由 Client 提交任务给 JobManager,JobManager 再调度任务到各个 TaskManager 去执行,然后 TaskManager 将心跳和统计信息汇报给 JobManager。TaskManager 之间以流的形式进行数据的传输。上述三者均为独立的 JVM 进程。

Client

        为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程(Streaming的任务),也可以不结束并等待结果返回。

        Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程./bin/flink run ...中运行。

        可以通过多种方式启动 JobManager 和 TaskManager:直接在机器上作为standalone 集群启动、在容器中启动、或者通过YARN等资源框架管理并启动。TaskManager 连接到 JobManagers,宣布自己可用,并被分配工作。

JobManager

        主要负责从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:

  • ResourceManager

    ResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的单位(请参考TaskManagers
    )。Flink 为不同的环境和资源提供者(例如 YARN、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。

  • Dispatcher

    Dispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。

  • JobMaster

    JobMaster 负责管理单个JobGraph
    的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。

始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby

TaskManager

       TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。

         在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自己的上游建立 Netty 连接,接收数据并处理。

        必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子

        flnik架构中的角色间的通信使用Akka,数据的传输使用Netty


Task Slot
        在上图中我们介绍了 TaskManager 是一个 JVM 进程,并会以独立的线程来执行一个task或多个subtask。为了控制一个 TaskManager 能接受多少个 task,Flink 提出了 Task Slot 的概念。
Flink 中的计算资源通过 Task Slot 来定义。每个 task slot 代表了 TaskManager 的一个固定大小的资源子集。例如,一个拥有3个slot的 TaskManager,会将其管理的内存平均分成三分分给各个 slot。将资源 slot 化意味着来自不同job的task不会为了内存而竞争,而是每个task都拥有一定数量的内存储备。需要注意的是,这里不会涉及到CPU的隔离,slot目前仅仅用来隔离task的内存。
通过调整 task slot 的数量,用户可以定义task之间是如何相互隔离的。每个 TaskManager 有一个slot,也就意味着每个task运行在独立的 JVM 中。每个 TaskManager 有多个slot的话,也就是说多个task运行在同一个JVM中。而在同一个JVM进程中的task,可以共享TCP连接(基于多路复用)和心跳消息,可以减少数据的网络传输。也能共享一些数据结构,一定程度上减少了每个task的消耗。

Flink 主要组件

  1. JobManager: JobManager是Flink集群的主节点,负责接收和调度任务,并协调所有TaskManager的工作。它还负责检查各个任务的状态,以及提供监控和管理服务。

  2. TaskManager: TaskManager是Flink集群中的工作节点,每个TaskManager都会启动一个或多个任务,执行具体的计算逻辑。TaskManager负责维护和管理本地资源,包括内存、CPU、IO等资源。

  3. DataStream: DataStream是Flink中的基本数据处理单元,代表了一个无限的数据流。用户可以通过DataStream API来定义数据流的输入源、转换操作和输出目的地。

  4. DataSet: DataSet是Flink中的批处理组件,它可以在有限的数据集上执行批处理操作。DataSet API提供了类似于Spark的RDD API的编程模型,允许用户对数据集进行转换、过滤、聚合等操作。

  5. Connector: 连接器是Flink中用于连接外部系统的组件,包括Kafka、Hadoop、Elasticsearch等常见的数据存储和消息队列系统。Flink提供了丰富的Connector库,使得用户可以方便地与各种外部系统进行交互。

Flink的核心实现原理

  1. 流式计算模型:Flink采用基于时间的窗口机制来对无限数据流进行处理,任务被切分为若干个子任务,每个子任务处理一部分数据。数据在不同的TaskManager之间通过网络传输,Flink使用基于消息的异步通信模型来实现高效的数据传输。

  2. 基于内存的计算引擎:Flink使用内存存储来提高计算性能和效率,它利用了Java虚拟机的内存管理机制,并采用了紧凑的数据结构和高效的内存管理策略来减少内存开销。

  3. 分布式快照机制:Flink采用了基于检查点的容错机制,通过定期创建快照来记录任务状态并恢复故障。检查点可以保存在HDFS等分布式存储系统中,以保证数据的持久性和可靠性。

  4. 优化器和执行引擎:Flink提供了强大的查询优化器和执行引擎,能够对Job进行优化和重排,以提高执行效率和性能。Flink还支持各种类型的窗口、聚合和Join操作,以满足不同的计算需求。

        总的来说,Flink的架构和组件设计充分考虑了分布式计算的特点和要求,采用了多项高级技术来提高计算性能和可靠性,使得它成为了一个高效、灵活和可扩展的分布式数据处理框架。

flink 的并行度

        Flink的并行度是指在执行数据处理任务时,将任务分解为多个子任务并行执行的能力。并行度可以帮助提高计算性能和吞吐量,充分利用集群中的资源。

        在Flink中,有两种类型的并行度:任务并行度(Task Parallelism)和数据并行度(Data Parallelism)。

  1. 任务并行度(Task Parallelism):任务并行度是指将一个Flink作业分解为多个任务(Tasks),这些任务可以在不同的TaskManager上并行执行。任务并行度由JobManager进行调度和分配,它决定了作业的整体并行度。通过增加任务并行度,可以提高作业的并发度和处理速度,但也会增加系统的负载和资源消耗。

  2. 数据并行度(Data Parallelism):数据并行度是指将一个任务根据数据流进行切分,让每个子任务处理不同的数据分片。数据并行度通常涉及到数据的分区和并行操作,并且可以根据数据源的特性进行设置。通过增加数据并行度,可以使得每个子任务处理更少的数据量,从而提高任务的执行效率。

        在Flink中,任务并行度和数据并行度可以同时使用,以实现更好的性能和资源利用。通过合理设置并行度参数,可以根据数据的特点、计算的复杂度和集群的资源情况来优化作业的执行效果。

        需要注意的是,并行度的设置需要综合考虑多个因素,包括可用的计算资源、数据源的分布、任务之间的依赖关系等。过低的并行度可能导致资源浪费和性能瓶颈,而过高的并行度则可能导致资源竞争和系统负载过重。因此,在设置并行度时需要进行实际测试和调优,找到最佳的配置参数。

flink 任务执行计划

        Flink是一个开源的流处理和批处理框架,它提供了用于构建高性能、可伸缩的分布式数据处理应用程序的工具和库。在执行Flink任务时,它会根据任务的逻辑生成执行计划。

        Flink的执行计划描述了任务在集群中的执行方式和顺序,它将任务转化为一系列的操作算子,这些算子会在不同的并行任务槽(task slot)上执行。执行计划包含以下几个关键组成部分:

  1. 数据源(Source):执行计划的起点是数据源,它可以是从文件、消息队列、数据库等读取数据的操作。数据源会生成一个或多个数据流,作为整个任务的输入。

  2. 转换操作(Transformation):转换操作是对输入数据流进行处理和转换的操作,如过滤、映射、聚合等。每个转换操作都会生成一个新的数据流,并形成有向无环图(DAG)结构,描述了数据流之间的依赖关系。

  3. 算子(Operator):每个转换操作都会被映射为一个具体的算子,例如Map、Filter、Join等。算子会在任务的task slot上执行,并处理输入数据流的每个数据元素。

  4. 并行度(Parallelism):Flink任务可以以并行的方式执行,算子的并行度定义了在集群中并行执行的任务槽数量。并行度可以根据数据量和任务的处理能力进行调整,以提高任务的吞吐量和性能。

  5. 数据分区(Data Partitioning):数据分区定义了数据在不同算子之间的分发方式,它决定了数据在不同任务槽之间的均衡性和负载情况。Flink支持多种数据分区策略,如哈希分区、重分区、广播等。

  6. Sink操作(Sink):Sink操作将处理后的数据流输出到外部系统,如文件、数据库、消息队列等。它是执行计划的终点。

        在执行计划生成后,Flink会将其提交给执行引擎,执行引擎会根据执行计划中定义的算子和并行度,在集群中分配任务槽,并分配资源进行任务执行。执行引擎会负责任务的调度、数据的传输和故障恢复等工作,确保任务能够按照计划顺利执行。

        总之,Flink的执行计划描述了任务的逻辑和执行方式,通过转换操作和算子将任务映射到具体的执行环境中。这种灵活和可扩展的执行计划是Flink实现高性能、可伸缩数据处理的关键。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)文章来源地址https://www.toymoban.com/news/detail-752111.html

到了这里,关于Flink的API分层、架构与组件原理、并行度、任务执行计划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据Flink(六十):Flink 数据流和分层 API介绍

    文章目录 Flink 数据流和分层 API介绍 一、​​​​​​​​​​​​​​Flink 数据流

    2024年02月12日
    浏览(44)
  • Android组件化架构开发--为什么要使用组件化?组件分层?组件路由的简单实现。

    1.1 单工程项目结构 一般我们都是一个业务建一个包 缺点: 各种业务代码混杂在同一个模块里,开发人员在开发、调测过程的效率越来越低,定位某个业务问题,需要在多个业务代码混合的模块中寻找和跳转。 需要了解各个业务的功能,避免代码的改动影响其它业务的功能

    2024年02月10日
    浏览(63)
  • 十三、Flink使用local模式执行任务 并开启Flink的webUI

    1、概述 1)webUI依赖 2)调用StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(configuration); 3)可以通过configuration配置webUI的端口号 2、代码实现 3、执行结果 1)输入测试数据 控制台输出执行结果 2)localhost:8081查看webUI

    2024年02月10日
    浏览(37)
  • Flink 深入理解任务执行计划,即Graph生成过程(源码解读)

    我们先看一下,Flink 是如何描述作业的执行计划的。以这个 DataStream 作业为例,Flink 会基于它先生成一个 StreamGraph。这是一个有向无环图,图中的节点对应着计算逻辑,图中的边则对应着数据的分发方式。 Flink 会根据节点的并行度以及他们之间的连边方式,把一些计算节点进

    2024年02月22日
    浏览(45)
  • flink执行任务运行10h以后挂掉并且报错

    问题描述 flink运行jar包任务,运行几个小时或者1天以后,任务就会挂掉!!! 第一个错误是 2023-02-01 23:43:08,083 INFO org.apache.flink.runtime.executiongraph.ExecutionGraph [] - Window(TumblingEventTimeWindows(60000), EventTimeTrigger, getHvcDownLine) - Sink: Unnamed (1/1) (8672ad64cfc4ddce37756e60242432be) switched from RUN

    2024年02月10日
    浏览(44)
  • 206.Flink(一):flink概述,flink集群搭建,flink中执行任务,单节点、yarn运行模式,三种部署模式的具体实现

    Flink官网地址:Apache Flink® — Stateful Computations over Data Streams | Apache Flink Flink是一个 框架 和 分布式处理引擎 ,用于对 无界 和 有界 数据流进行 有状态计算 。 无界流(流): 有定义流的开始,没有定义结束。会无休止产生数据 无界流数据必须持续处理 有界流(批): 有定

    2024年02月11日
    浏览(49)
  • 【Flink】Flink架构及组件

    我们学习大数据知识的时候,需要知道大数据组件如何安装以及架构组件,这将帮助我们更好的了解大数据组件 对于大数据Flink,架构图图下:  整个架构图有三种关键组件 1、Client:负责作业的提交。调用程序的 main 方法,将代码转换成“数据流图“(DataflowGraph),并最终

    2024年02月11日
    浏览(40)
  • 《移动互联网技术》 第十章 系统与通信: 掌握Android系统的分层架构设计思想和基于组件的设计模式

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月16日
    浏览(56)
  • 万字长文深入理解Docker镜像分层原理、容器数据卷、网络通信架构(Docker系列第2章,共3章)

    在执行docker pull时,会发现多个Pull complete 字样,就能体现分层,如果是一个文件,只会有一个Pull complete 。 概念:文件系统是计算机系统中用于组织和管理数据存储的一种方式。它定义了数据如何存储、命名、访问和修改的方式。 举例:如Windows自带的NTFS、FAT32、EXFAT,和L

    2024年04月14日
    浏览(39)
  • [Flink02] Flink架构和原理

    这是继第一节之后的Flink入门系列的第二篇,本篇主要内容是是:了解Flink运行模式、Flink调度原理、Flink分区、Flink安装。 1、运行模式 Flink有多种运行模式,可以运行在一台机器上,称为本地(单机)模式;也可以使用YARN作为底层资源调度系统以分布式的方式在集群中运行,

    2024年02月19日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包