精华内容
下载资源
问答
  • Flink运行框架

    2021-01-23 11:56:12
    Flink集群采用Mater-Slave架构,Master的角色是JobManager,负责集群和作业管理,Slave的角色是TaskManager,负责执行计算任务。除此之外,Flink还提供了客户端来管理集群和提交任务,其中JobManager和TaskManager是...

    Flink集群采用Mater-Slave架构,Master的角色是JobManager,负责集群和作业管理,Slave的角色是TaskManager,负责执行计算任务。除此之外,Flink还提供了客户端来管理集群和提交任务,其中JobManager和TaskManager是集群的进程,Flink客户端是在集群外部执行的进程,不是集群的一部分。

    1.Flink客户端

    Flink客户端是Flink提供的CLI命令行工具,用来提交Flink作业到Flink集群,在客户端中负责Stream Graph(流图)和Job Graph(作业图)的构建。

    2.JobManager

    JobManager根据并行度将Flink客户端提交的Flink应用分解为子任务,从资源管理器申请所需的计算资源,资源具备之后,开始分发任务到TaskManager执行Task,并负责应用容错,跟踪作业的执行状态,发现异常则恢复作业等。

    JobManager里面有三个组件:

    1)ResourceManager  (flink自己的)

    主要负责管理任务管理器(TaskManager)的插槽(slot),TaskManger插槽是Flink中定义的处理资源单元。(事实上ResourceManager里面还有SlotManager)

    2) Dispatcher

    负责接收用户提供的作业,并且负责为这个新提交的作业启动一个新的JobManager 组件

    3) JobMaster

    JobMaster负责管理单个JobGraph的执行.多个Job可以同时运行在一个Flink集群中, 每个Job都有一个自己的JobMaster.

    3.TaskManager

    TaskManager接收JobManager分发的子任务,根据自身的资源情况,管理子任务的启动,停止,销毁,异常恢复等生命周期阶段。
      在这里插入图片描述

    展开全文
  • 文章目录什么是flink运行架构计算框架运行模式 什么是flink 一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。 下载地址 ...

    什么是flink

    • 一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。
    • 下载地址

    运行架构

    • 计算架构:JobManager和TaskManger
      • JobManager主要负责调度task,协调checkpoint已经错误恢复等
      • TaskManger具体任务执行

    计算框架

    在这里插入图片描述

    • Flink SQL,原型是阿里2019开源 Blink代码。
      • Flink SQL定义sql语句,代码加载实现数据结构化和处理功能。
    • Table API:
      • 有source和sink概念,source是输入源,sink为输出源,代码有相关sql方法,无需定义sql语句
    • DataStream和DataSetAPI,纯代码实现计算,一个负责实时,一个服务批处理。

    运行模式

    • 资料
    • 三种模式
      • 模式一:Local(本地)模式
        • 本地主机计算
      • 模式二:Standalone(独立)模式
        • 无hadoop集群,flink自身集群运行。
      • on yarn模式
        • Yarn-session 模式
          • 预先在yarn上面划分一部分资源给flink集群用,flink提交的所有任务,共用这些资源
        • Single job 模式
          • 每次提交任务,都会创建一个新的flink集群
    展开全文
  • 1.Flink运行时的组件 2.任务提交流程 3.任务调度原理

    目录

    1.Flink运行时的组件

    1.1 作业管理器(JobManager)

    1.2 资源管理器(ResourceManager)

    1.3 任务管理器(TaskManager)

    1.4 分发器(Dispatcher)

    2.任务提交流程

    3.任务调度原理

    3.1 TaskManger 与 Slots

    3.2 程序与数据流(DataFlow)

    3.3 执行图(ExecutionGraph)

    3.4 并行度(Parallelism)

    3.5 任务链(Operator Chains)


    1.Flink运行时的组件

            Flink 运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作: 作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager), 以及分发器(Dispatcher)。因为 Flink 是用 Java 和 Scala 实现的,所以所有组件都会运行在 Java 虚拟机上。每个组件的职责如下:

    1.1 作业管理器(JobManager)

            控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的 JobManager 所控制执行。

            JobManager 会先接收到要执行的应用程序,这个应用程序会包括: 作业图(JobGraph)、逻辑数据流图(logical dataflow graph)和打包了所有的类、库和其它资源的 JAR 包。JobManager 会把 JobGraph 转换成一个物理层面的数据流图,这个图被叫做 “执行图”(ExecutionGraph),包含了所有可以并发执行的任务。JobManager 会向资源管理器(ResourceManager)请求执行任务必要的资源,也就是任务管理器(TaskManager)上 的插槽(slot)。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的 TaskManager 上。而在运行过程中,JobManager 会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。

    1.2 资源管理器(ResourceManager)

            主要负责管理任务管理器(TaskManager)的插槽(slot),TaskManger 插槽是 Flink 中 定义的处理资源单元。Flink 为不同的环境和资源管理工具提供了不同资源管理器,比如 YARN、Mesos、K8s,以及 standalone 部署。当 JobManager 申请插槽资源时,ResourceManager 会将有空闲插槽的 TaskManager 分配给 JobManager。如果 ResourceManager 没有足够的插槽 来满足 JobManager 的请求,它还可以向资源提供平台发起会话,以提供启动 TaskManager 进程的容器。另外,ResourceManager 还负责终止空闲的 TaskManager,释放计算资源。

    1.3 任务管理器(TaskManager)

            主要根据jobManager要求执行任务。通常在 Flink 中会有多个 TaskManager 运行,每一个 TaskManager都包含了一定数量的插槽(slots)。插槽的数量限制了 TaskManager 能够执行的任务数量。 启动之后,TaskManager 会向资源管理器注册它的插槽;收到资源管理器的指令后, TaskManager 就会将一个或者多个插槽提供给 JobManager 调用。JobManager 就可以向插槽分配任务(tasks)来执行了。在执行过程中,一个 TaskManager 可以跟其它运行同一应用程序的 TaskManager交换数据。

    1.4 分发器(Dispatcher)

            可以跨作业运行,它为应用提交提供了 REST 接口。当一个应用被提交执行时,分发器就会启动并将应用移交给一个 JobManager。由于是 REST 接口,所以 Dispatcher 可以作为集群的一个 HTTP 接入点,这样就能够不受防火墙阻挡。Dispatcher 也会启动一个 Web UI,用来方便地展示和监控作业执行的信息。Dispatcher 在架构中可能并不是必需的,这取决于应用提交运行的方式。

    2.任务提交流程

            我们来看看当一个应用提交执行时,Flink 的各个组件是如何交互协作的:

            上图是从一个较为高层级的视角,来看应用中各组件的交互协作。如果部署的集群环境不同(例如 YARN,Mesos,Kubernetes,standalone 等),其中一些步骤可以被省略,或是有些组件会运行在同一个 JVM 进程中。具体地,如果我们将 Flink 集群部署到 YARN 上,那么就会有如下的提交流程:

            Flink 任务提交后,Client 向 HDFS 上传 Flink 的 Jar 包和配置,之后向 Yarn ResourceManager 提交任务,ResourceManager 分配 Container 资源并通知对应的 NodeManager 启动 ApplicationMaster,ApplicationMaster 启动后加载 Flink 的 Jar 包和配置构建环境,然后启动 JobManager,之后 ApplicationMaster 向 ResourceManager 申请资源启动 TaskManager , ResourceManager 分 配 Container 资 源 后 , 由 ApplicationMaster 通 知 资 源 所 在 节 点 的 NodeManager 启 动 TaskManager , NodeManager 加载 Flink 的 Jar 包和配置构建环境并启动 TaskManager,TaskManager 启动后向 JobManager 发送心跳包,并等待 JobManager 向其分配任务。

    3.任务调度原理

            客户端不是运行时和程序执行的一部分,但它用于准备并发送 dataflow(JobGraph)给 Master(JobManager),然后,客户端断开连接或者维持连接以等待接收计算结果。

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

            Client 为提交 Job 的客户端,可以是运行在任何机器上(与 JobManager 环境连通即可)。提交 Job 后,Client 可以结束进程(Streaming 的任务),也可以不结束并等待结果返回。JobManager 主 要 负 责 调 度 Job 并 协 调 Task 做 checkpoint, 职 责 上 很 像 Storm 的 Nimbus。从 Client 处接收到 Job 和 JAR 包等资源后,会生成优化后的执行计划,并以 Task 的单元调度到各个 TaskManager 去执行。TaskManager 在启动的时候就设置好了槽位数(Slot),每个 slot 能启动一个 Task,Task 为线程。从 JobManager 处接收需要部署的 Task,部署启动后,与自己的上游建立 Netty 连接,接收数据并处理。

    3.1 TaskManger 与 Slots

            Flink 中每一个 worker(TaskManager)都是一个 JVM 进程,它可能会在独立的线 程上执行一个或多个 subtask。为了控制一个 worker 能接收多少个 task,worker 通 过 task slot 来进行控制(一个 worker 至少有一个 task slot)。

            每个 task slot 表示 TaskManager 拥有资源的一个固定大小的子集。假如一个 TaskManager 有三个 slot,那么它会将其管理的内存分成三份给各个 slot。资源 slot 化意味着一个 subtask 将不需要跟来自其他 job 的 subtask 竞争被管理的内存,取而 代之的是它将拥有一定数量的内存储备。需要注意的是,这里不会涉及到 CPU 的隔 离,slot 目前仅仅用来隔离 task 的受管理的内存。

            通过调整 task slot 的数量,允许用户定义 subtask 之间如何互相隔离。如果一个 TaskManager 一个 slot,那将意味着每个 task group 运行在独立的 JVM 中(该 JVM 可能是通过一个特定的容器启动的),而一个 TaskManager 多个 slot 意味着更多的 subtask 可以共享同一个 JVM。而在同一个 JVM 进程中的 task 将共享 TCP 连接(基于多路复用)和心跳消息。它们也可能共享数据集和数据结构,因此这减少了每个 task 的负载。

            默认情况下,Flink 允许子任务共享 slot,即使它们是不同任务的子任务(前提 是它们来自同一个 job)。 这样的结果是,一个 slot 可以保存作业的整个管道。Task Slot 是静态的概念,是指 TaskManager 具有的并发执行能力,可以通过参数 taskmanager.numberOfTaskSlots 进行配置;而并行度 parallelism 是动态概念, 即 TaskManager 运行程序时实际使用的并发能力,可以通过参数 parallelism.default 进行配置。也就是说,假设一共有 3 个 TaskManager,每一个 TaskManager 中的分配 3 个 TaskSlot,也就是每个 TaskManager 可以接收 3 个 task,一共 9 个 TaskSlot,如果我 们设置 parallelism.default=1,即运行程序默认的并行度为 1,9 个 TaskSlot 只用了 1 个,有 8 个空闲,因此,设置合适的并行度才能提高效率。

    3.2 程序与数据流(DataFlow)

            所有的 Flink 程序都是由三部分组成的: Source 、Transformation 和 Sink。 Source 负责读取数据源,Transformation 利用各种算子进行处理加工,Sink 负责输出。在运行时,Flink 上运行的程序会被映射成“逻辑数据流”(dataflows),它包 含了这三部分。每一个 dataflow 以一个或多个 sources 开始以一个或多个 sinks 结 束。dataflow 类似于任意的有向无环图(DAG)。在大部分情况下,程序中的转换 运算(transformations)跟 dataflow 中的算子(operator)是一一对应的关系,但有 时候,一个 transformation 可能对应多个 operator。

    3.3 执行图(ExecutionGraph)

            由 Flink 程序直接映射成的数据流图是 StreamGraph,也被称为逻辑流图,因为它们表示的是计算逻辑的高级视图。为了执行一个流处理程序,Flink 需要将逻辑流图转换为物理数据流图(也叫执行图),详细说明程序的执行方式。

            Flink 中的执行图可以分成四层:StreamGraph -> JobGraph -> ExecutionGraph -> 物理执行图。StreamGraph:是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。JobGraph:StreamGraph 经过优化后生成了 JobGraph,提交给 JobManager 的 数据结构。主要的优化为,将多个符合条件的节点 chain 在一起作为一个节点,这 样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗。ExecutionGraph : JobManager 根 据 JobGraph 生 成 ExecutionGraph 。 ExecutionGraph 是 JobGraph 的并行化版本,是调度层最核心的数据结构。物理执行图:JobManager 根据 ExecutionGraph 对 Job 进行调度后,在各个 TaskManager 上部署 Task 后形成的“图”,并不是一个具体的数据结构。

    3.4 并行度(Parallelism)

            Flink 程序的执行具有并行、分布式的特性。在执行过程中,一个流(stream)包含一个或多个分区(stream partition),而 每一个算子(operator)可以包含一个或多个子任务(operator subtask),这些子任务在不同的线程、不同的物理机或不同的容器中彼此互不依赖地执行。在执行过程中,一个流(stream)包含一个或多个分区(stream partition),而每一个算子(operator)可以包含一个或多个子任务(operator subtask),这些子任务在不同的线程、不同的物理机或不同的容器中彼此互不依赖地执行。

            一个特定算子的子任务(subtask)的个数被称之为其并行度(parallelism)。 一般情况下,一个流程序的并行度,可以认为就是其所有算子中最大的并行度。一 个程序中,不同的算子可能具有不同的并行度。

            Stream 在算子之间传输数据的形式可以是 one-to-one(forwarding)的模式也可以 是 redistributing 的模式,具体是哪一种形式,取决于算子的种类。

            One-to-one:stream(比如在 source 和 map operator 之间)维护着分区以及元素的 顺序。那意味着 map 算子的子任务看到的元素的个数以及顺序跟 source 算子的子 任务生产的元素的个数、顺序相同,map、fliter、flatMap 等算子都是 one-to-one 的 对应关系。

    ➢ 类似于 spark 中的窄依赖

            Redistributing:stream(map()跟 keyBy/window 之间或者 keyBy/window 跟 sink 之间)的分区会发生改变。每一个算子的子任务依据所选择的 transformation 发送数 据到不同的目标任务。例如,keyBy() 基于 hashCode 重分区、broadcast 和 rebalance 会随机重新分区,这些算子都会引起 redistribute 过程,而 redistribute 过程就类似于 Spark 中的 shuffle 过程。

    ➢ 类似于 spark 中的宽依赖

    3.5 任务链(Operator Chains)

            相同并行度的 one to one 操作,Flink 这样相连的算子链接在一起形成一个 task, 原来的算子成为里面的一部分。将算子链接成 task 是非常有效的优化:它能减少线程之间的切换和基于缓存区的数据交换,在减少时延的同时提升吞吐量。链接的行为可以在编程 API 中进行指定。下图为task与operator chains。

    展开全文
  • Flink是一个分布式数据流处理引擎,用于处理带状态的有边界或无边界数据流。可以部署在通用的分布式集群上,实现海量数据在内存上快速计算。 无边界数据流:数据有产生标志但是没有结束标志。数据持续产生,因此...

    目录

     

    架构

    应用

    状态

    时间

    分层API

     运维


    架构

    Flink是一个分布式数据流处理引擎,用于处理带状态的有边界或无边界数据流。可以部署在通用的分布式集群上,实现海量数据在内存上快速计算。

    无边界数据流:数据有产生标志但是没有结束标志。数据持续产生,因此需要连续地处理,只能通过一定的方法根据事件的产生和结束进行分割处理。

    有边界数据流:数据可以明确的产生开始和结束标志,处理时一般不需要顺序处理,因为有边界数据流一般是按顺序产生的,可以用批处理的方法进行处理。

     

      Flink通过精确的控制状态和时间实现对无边界数据流的处理;通过内部处理算法和数据结构,灵活控制固定数据集的大小实现对有边界数据流的处理。

      Flink 是分布式系统,运行时需要计算资源,可以部署在Hadoop YARN, Apache Mesos, Kubernetes上,同时也可以以standalone的方式单独部署。

    有状态Flink应用程序针对本地状态访问进行了优化。 任务状态始终保持在内存中,或者,如果状态大小超出可用内存,则始终保持在访问有效的磁盘数据结构中。 因此,任务通过访问本地(通常在内存中)状态执行所有计算,从而产生非常低的处理延迟。 Flink通过定期将本地状态异步指向持久性存储来确保出现故障时一次状态的一致性。

     

     

    应用

    Flink是用于无限制和有限制的数据流上的有状态计算的框架。 Flink在不同的抽象级别提供了多个API,并为常见用例提供了专用的库。以下描述数据流处理中基本的术语定义

    流是流处理的基本方面。 但是,流可能具有不同的特性,这些特性会影响流的处理方式。 Flink是一个通用的处理框架,可以处理任何类型的流。如有边界或无边界流,实时流和记录

    状态

    每个非普通的流应用程序都是有状态的,即,仅对各个事件应用转换的应用程序不需要状态。 任何运行基本业务逻辑的应用程序都需要记住事件或中间结果,以便在以后的某个时间点访问它们,例如,在收到下一个事件时或在特定的持续时间之后。

    应用程序状态是Flink中的一等公民。 通过查看Flink在状态处理上下文中提供的所有功能,您可以看到这一点。

    多个状态原语:Flink为不同的数据结构(例如原子值,列表或映射)提供状态原语。开发人员可以根据功能的访问模式选择最有效的状态原语。

    可插拔状态后端:在可插拔状态后端中管理应用程序状态,并由该点检查点。 Flink具有不同的状态后端,这些后端将状态存储在内存或RocksDB(一种高效的嵌入式磁盘数据存储)中。自定义状态后端也可以插入。

    严格一次状态一致性:Flink的检查点和恢复算法可确保发生故障时应用程序状态的一致性。因此,可以透明地处理故障,并且不会影响应用程序的正确性。

    非常大状态:Flink由于具有异步和增量检查点算法,因此能够保持大小为数TB的应用程序状态。

    可扩展的应用程序:Flink通过将状态重新分配给更多或更少的工作程序来支持有状态应用程序的扩展。

     

    时间

    时间是流应用程序的另一个重要组成部分。大多数事件流具有固有的时间语义,因为每个事件都是在特定的时间点产生的。此外,许多常见的流计算都是基于时间的,例如窗口聚合,会话化,模式检测和基于时间的联接。流处理的一个重要方面是应用程序如何测量时间,即事件时间与处理时间之差。

    Flink提供了一组丰富的与时间相关的功能。

    事件时间模式:使用事件时间语义处理流的应用程序根据事件的时间戳计算结果。因此,无论是处理记录的事件还是实时事件,事件时间处理都可以提供准确一致的结果。

    水印支持:Flink在事件时间应用程序中使用水印推理时间。水印还是一种权衡结果的延迟和完整性的灵活机制。

    后期数据处理:在带有水印的事件时间模式下处理流时,可能会发生所有相关事件到达之前已经完成计算的情况。这种事件称为迟发事件。 Flink具有多个选项来处理较晚的事件,例如通过侧面输出重新路由它们并更新先前完成的结果。

    处理时间模式:除事件时间模式外,Flink还支持处理时间语义,该语义执行由处理机的挂钟时间触发的计算。处理时间模式可能适合具有严格的低延迟要求的某些应用程序,这些应用程序可以忍受近似结果。

    分层API

    Flink提供了三层API。 每个API在简洁性和表达性之间提供了不同的权衡,并且针对不同的用例。

     

    1、过程函数(The ProcessFunctions):

    ProcessFunctions是Flink提供的最具表现力的功能接口。 Flink提供ProcessFunctions来处理来自一个或两个输入流或在一个窗口中分组的事件的单个事件。 ProcessFunctions提供对时间和状态的细粒度控制。 ProcessFunction可以任意修改其状态并注册计时器,这些计时器将来会触发回调函数。 因此,ProcessFunctions可以根据许多有状态事件驱动的应用程序的需要,实现复杂的每事件业务逻辑。

    2、DataStream API

    DataStream API 为许多通用的流处理操作提供了处理原语。这些操作包括窗口、逐条记录的转换操作,在处理事件时进行外部数据库查询等。DataStream API 支持 Java 和 Scala 语言,预先定义了例如map()、reduce()、aggregate() 等函数。你可以通过扩展实现预定义接口或使用 Java、Scala 的 lambda 表达式实现自定义的函数。

    3、SQL & Table API

    Flink 支持两种关系型的 API,Table API 和 SQL。这两个 API 都是批处理和流处理统一的 API,这意味着在无边界的实时数据流和有边界的历史记录数据流上,关系型 API 会以相同的语义执行查询,并产生相同的结果。Table API 和 SQL 借助了 Apache Calcite 来进行查询的解析,校验以及优化。它们可以与 DataStream 和 DataSet API 无缝集成,并支持用户自定义的标量函数,聚合函数以及表值函数。

    4、库

    Flink 具有数个适用于常见数据处理应用场景的扩展库。这些库通常嵌入在 API 中,且并不完全独立于其它 API。它们也因此可以受益于 API 的所有特性,并与其他库集成。

    复杂事件处理(CEP):模式检测是事件流处理中的一个非常常见的用例。Flink 的 CEP 库提供了 API,使用户能够以例如正则表达式或状态机的方式指定事件模式。CEP 库与 Flink 的 DataStream API 集成,以便在 DataStream 上评估模式。CEP 库的应用包括网络入侵检测,业务流程监控和欺诈检测。

    DataSet API:DataSet API 是 Flink 用于批处理应用程序的核心 API。DataSet API 所提供的基础算子包括map、reduce、(outer) join、co-group、iterate等。所有算子都有相应的算法和数据结构支持,对内存中的序列化数据进行操作。如果数据大小超过预留内存,则过量数据将存储到磁盘。Flink 的 DataSet API 的数据处理算法借鉴了传统数据库算法的实现,例如混合散列连接(hybrid hash-join)和外部归并排序(external merge-sort)。

    Gelly: Gelly 是一个可扩展的图形处理和分析库。Gelly 是在 DataSet API 之上实现的,并与 DataSet API 集成。因此,它能够受益于其可扩展且健壮的操作符。Gelly 提供了内置算法,如 label propagation、triangle enumeration 和 page rank 算法,也提供了一个简化自定义图算法实现的 Graph API。

     运维

    1、7 * 24小时稳定运行

    在分布式系统中,服务故障是常有的事,为了保证服务能够7*24小时稳定运行,像Flink这样的流处理器故障恢复机制是必须要有的。显然这就意味着,它(这类流处理器)不仅要能在服务出现故障时候能够重启服务,而且还要当故障发生时,保证能够持久化服务内部各个组件的当前状态,只有这样才能保证在故障恢复时候,服务能够继续正常运行,好像故障就没有发生过一样。

    Flink通过几下多种机制维护应用可持续运行及其一致性:

    检查点的一致性: Flink的故障恢复机制是通过建立分布式应用服务状态一致性检查点实现的,当有故障产生时,应用服务会重启后,再重新加载上一次成功备份的状态检查点信息。结合可重放的数据源,该特性可保证精确一次(exactly-once)的状态一致性。

    高效的检查点: 如果一个应用要维护一个TB级的状态信息,对此应用的状态建立检查点服务的资源开销是很高的,为了减小因检查点服务对应用的延迟性(SLAs服务等级协议)的影响,Flink采用异步及增量的方式构建检查点服务。

    端到端的精确一次: Flink 为某些特定的存储支持了事务型输出的功能,及时在发生故障的情况下,也能够保证精确一次的输出。

    集成多种集群管理服务: Flink已与多种集群管理服务紧密集成,如 Hadoop YARN, Mesos, 以及 Kubernetes。当集群中某个流程任务失败后,一个新的流程服务会自动启动并替代它继续执行。

    内置高可用服务: Flink内置了为解决单点故障问题的高可用性服务模块,此模块是基于Apache ZooKeeper 技术实现的,Apache ZooKeeper是一种可靠的、交互式的、分布式协调服务组件

    2、Flink能够更方便地升级、迁移、暂停、恢复应用服务

    驱动关键业务服务的流应用是经常需要维护的。比如需要修复系统漏洞,改进功能,或开发新功能。然而升级一个有状态的流应用并不是简单的事情,因为在我们为了升级一个改进后版本而简单停止当前流应用并重启时,我们还不能丢失掉当前流应用的所处于的状态信息。

    而Flink的Savepoint 服务就是为解决升级服务过程中记录流应用状态信息及其相关难题而产生的一种唯一的、强大的组件。一个 Savepoint,就是一个应用服务状态的一致性快照,因此其与checkpoint组件的很相似,但是与checkpoint相比,Savepoint 需要手动触发启动,而且当流应用服务停止时,它并不会自动删除。Savepoint 常被应用于启动一个已含有状态的流服务,并初始化其(备份时)状态。Savepoint 有以下特点:

    便于升级应用服务版本: Savepoint 常在应用版本升级时使用,当前应用的新版本更新升级时,可以根据上一个版本程序记录的 Savepoint 内的服务状态信息来重启服务。它也可能会使用更早的 Savepoint 还原点来重启服务,以便于修复由于有缺陷的程序版本导致的不正确的程序运行结果。

    方便集群服务移植: 通过使用 Savepoint,流服务应用可以自由的在不同集群中迁移部署。

    方便Flink版本升级: 通过使用 Savepoint,可以使应用服务在升级Flink时,更加安全便捷。

    增加应用并行服务的扩展性: Savepoint 也常在增加或减少应用服务集群的并行度时使用。

    便于A/B测试及假设分析场景对比结果: 通过把同一应用在使用不同版本的应用程序,基于同一个 Savepoint 还原点启动服务时,可以测试对比2个或多个版本程序的性能及服务质量。

    暂停和恢复服务: 一个应用服务可以在新建一个 Savepoint 后再停止服务,以便于后面任何时间点再根据这个实时刷新的 Savepoint 还原点进行恢复服务。

    归档服务: Savepoint 还提供还原点的归档服务,以便于用户能够指定时间点的 Savepoint 的服务数据进行重置应用服务的状态,进行恢复服务

    3、监控和控制应用服务

    如其它应用服务一样,持续运行的流应用服务也需要监控及集成到一些基础设施资源管理服务中,例如一个组件的监控服务及日志服务等。监控服务有助于预测问题并提前做出反应,日志服务提供日志记录能够帮助追踪、调查、分析故障发生的根本原因。最后,便捷易用的访问控制应用服务运行的接口也是Flink的一个重要的亮点特征。

    Flink与许多常见的日志记录和监视服务集成得很好,并提供了一个REST API来控制应用服务和查询应用信息。具体表现如下:

    Web UI方式: Flink提供了一个web UI来观察、监视和调试正在运行的应用服务。并且还可以执行或取消组件或任务的执行。

    日志集成服务:Flink实现了流行的slf4j日志接口,并与日志框架log4j或logback集成。

    指标服务: Flink提供了一个复杂的度量系统来收集和报告系统和用户定义的度量指标信息。度量信息可以导出到多个报表组件服务,包括 JMX, Ganglia, Graphite, Prometheus, StatsD, Datadog, 和 Slf4j.

    标准的WEB REST API接口服务: Flink提供多种REST API接口,有提交新应用程序、获取正在运行的应用程序的Savepoint服务信息、取消应用服务等接口。REST API还提供元数据信息和已采集的运行中或完成后的应用服务的指标信息。

    展开全文
  • Flink运行架构

    2021-03-02 19:32:08
    Flink运行架构 目录Flink运行架构一、运行架构1.1 客户端1.2 JobManager1.2.1 ResourceManager1.2.2 Dispatcher1.2.3 JobMaster1.3 TaskManager二、核心概念2.1 TaskManager与Slots2.2 Parallelism(并行度)2.3 ...
  • Apache Flink架构 JobManger(作业管理器) TaskManger(任务管理器) ResourceMager(资源管理器) Dispacher(分发器) JobManager 控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所...
  • 一、Flink中的状态 1)由一个任务维护,并且用来计算某个结果的所有...5)为了使运行时的Flink了解算子的状态,算子需要预先注册其状态; 6)总的来说,有两种类型的状态: **** 算子状态(Operator State):...
  • Flink运行框架 Flink 运行时的组件 Flink 运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作:作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器(TaskManager),以及分发器...
  • Flink运行环境_Yarn

    2021-06-07 16:02:15
    Flink运行环境_Yarn 独立部署(Standalone)模式是由Flink框架本身提供计算资源,无需其他框架提供资源。这种方式降低了和其他第三方资源框架的耦合性,独立性非常强。但是由于Flink主要是计算框架,而不是资源调度...
  • 详解Flink运行架构

    2020-05-06 18:20:15
    1 Flink运行时的组件       Flink运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作:作业管理器(JobManager)、资源管理器(ResourceManager)、任务管理器...
  • 分布式: Flink 程序可以运行在多台机器上。 高性能: 处理性能比较高。 高可用: 由于Flink 程序本身是稳定的,因此它支持高可用性(High Availability,HA)。 准确:Flink 可以保证数据处理的准确性. Flink是Java代码...
  • Flink呗设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算 Flink的重要特点 时间驱动型(Event-driven) 时间驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并根据到...
  • 一、Flink运行时的组件 1、作业管理器(JobManager) 1)控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行。 2)JobManager会先接收到要执行的应用程序,这个应用...
  • https://www.cnblogs.com/bethunebtj/p/9168274.html写在最前:因为这篇博客太长,...追源索骥:透过源码看懂Flink核心框架的执行流程flink追源索骥:透过源码看懂Flink核心框架的执行流程前言1.从 Hello,World Wo...
  • Apache Flink是一种可以处理批处理任务的流处理框架。该技术可将批处理数据视作具备有限边界的数据流,借此将批处理任务作为流处理的子集加以处理。为所有处理任务采取流处理为先的方法会产生一系列有趣的副作用。 ...
  • 本篇文章大概2515字,阅读时间大约7分钟翻译Flink官网关于flink运行架构及编程模型的内容,本文的图片来自flink官网。计划今年下半年将flink应用到生产环境,最近在进行fl...
  • Flink流处理框架总结

    2021-04-27 23:34:33
    Flink快速应用第 1 节 单词统计案例(批数据)1.1 需求1.2 代码实现第 2 节 单词统计案例(流数据)2.1 需求2.2 代码实现第三部分 Flink体系结构第 1 节 Flink的重要角色第 2 节 Flink运行架构2.1 Fl
  • Flink运行时之基于Netty的网络通信上

    千次阅读 2017-01-08 15:03:28
    概述本文以及接下来的几篇文章将介绍Flink运行时TaskManager间进行数据交换的核心部分——基于Netty通信框架远程请求ResultSubpartition。作为系列文章的第一篇,先列出一些需要了解的基础对象。
  • Flink框架基础原理

    2021-02-26 09:47:34
    Flink是分布式、高性能、随时可用、准确的流处理框架Flink是一个一个框架、分布式处理引擎,用于对无界和有界数据流进行有状态计算。 1.1 Flink特点 ①事件驱动型(Event-driven) 事件驱动型应用是一类具有状态...
  • Flink运行时环境介绍

    2020-06-07 22:46:17
    Apache Flink 是一个开源的分布式,高性能,高可用,准确的流处理框架。支持实时流处理和批处理。 无界流有定义流的开始,但没有定义流的结束。无界流的数据必须持续立即处理,通常要求以特定顺序摄取事件,例如...
  • 001FlinkFlink简介处理无界和有界数据部署应用到任意地方运行任意规模应用利用内存性能Flink架构图 Flink简介 SparkStreaming需要整合hbase/redis才灵活管理状态,会复杂 Flink是有状态的流 数据的输入 数据的处理 ...
  • Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模 来执行计算。 二、为什么选择Flink 1、流数据更真实地反映了我们的生活方式 2、低延迟 ➢ 高吞吐 ➢ 结果的准确性和良好的容错性 3、支持...
  • 对于Flink中各个组件(JobMaster、TaskManager、Dispatcher等),其底层RPC框架基于Akka实现,本文着重分析Flink中的Rpc框架实现机制及梳理其通信流程。 2. Akka介绍 由于Flink底层Rpc是基于Akka实现,我们先了解...
  • Flink不仅可以运行在包括YARN、Mesos、Kubernetes在内的多种资源管理框架上,还支持在裸机集群上独立部署。在启用高可用选项的情况下,它不存在单点失效问题。 这里要说明两个概念: 边界:无边界和有边界数据流,...
  • Apache Flink是一个面向数据流处理和批量数据处理的可分布式的开源计算框架,它基于同一个Flink流式执行模型(streaming execution model),能够支持流处理和批处理两种应用类型。由于流处理和批处理所提供的SLA...
  • Apache Flink 框架浅析

    2020-12-17 17:44:58
    这篇文章准备对Blink所基于的Apache社区开源产品--Flink的架构做一些浅显分析。 一:Flink历史、基本架构及分布式部署 历史 Flink项目最早开始于2010年由柏林技术大学、柏林洪堡大学、哈索普拉特纳研究所共同合作...
  • flink运行模式 本地运行模式(local) 脱机运行模式(standalone) 集群运行模式(flink on yarn/mesos/kubernetes等资源管理平台) 其中集群运行模式又分为三种   会话模式(session)   工作模式(per-job) ...
  • Flink运行时之结果分区消费端

    千次阅读 2017-01-05 09:09:26
    远程数据交换的通信机制建立在Netty框架的基础之上,因此会有一个主交互对象PartitionRequestClient来衔接通信层跟输入通道。 我们以请求子分区的requestSubpartition为入口来进行分析。首先,通过一个Connection...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,813
精华内容 4,325
关键字:

flink运行框架