flink计算框架概述

author author     2023-03-21     651

关键词:

Flink 是一个针对流数据和批数据的分布式处理引擎,主要用 Java 代码实现。目前,Flink主要还是依靠开源社区的贡献来发展的。对于 Flink ,其处理的数据主要是流数据,批数据只是流数据的一个极限特例而已。Flink的批处理方式采用的是流式计算原理,这一点跟Spark的设计思想正好相反(Spark Streaming本质上是批处理,只是将计算分成了很小的单元,近似成流计算),这也是Flink的最大特点。Flink支持本地快速迭代,以及一些环形的迭代任务。

1、基本概念
  • 数据集

数据集(DataSet)分为有界数据集和无界数据集。无界数据集的数据会源源不断地流入,有界数据集的数据是不可变的。许多传统上被认为是有界或“批”数据的真实数据集实际上是无界数据集。无界数据集包括但不限于:与移动或Web应用程序交互的最终用户、提供测量的物理传感器、金融市场、机器的日志数据。

  • 执行模型

实时处理是指当数据正在生成时连续执行的数据的处理过程。批处理是指在有限的时间内执行有限的数据的处理过程。不管采用哪种类型的执行模型来处理数据都是可以的,但却不一定是最优的。例如,批处理一直被应用于无界数据集的处理上,尽管它存在窗口、状态管理和次序错误等潜在问题。Flink采用实时处理的执行模型,在数据处理精度和计算性能方面都有更大的优势。

  • Flink程序模块

Flink程序包含的主要模块有:Data SourceTransformationsData Sink,其中,Data Source(数据源)就是要进入Flink处理的数据,如HDFS、Kafka中的数据等。Transformations根据实际业务进行计算和转换。Data Sink是Flink处理完的数据,即输出数据。

Flink计算框架概述_Flink

2、主要特点

Flink 是一个开源的分布式实时计算框架。Flink 是有状态的和容错的,可以在维护一次应用程序状态的同时无缝地从故障中恢复;它支持大规模计算能力,能够在数千个节点上并发运行;它具有很好的吞吐量和延迟特性。同时,Flink提供了多种灵活的窗口函数。

  • 状态管理机制

Flink检查点机制能保持exactly-once语义的计算。状态保持意味着应用能够保存已经处理的数据集结果和状态。

Flink计算框架概述_Flink_02

  • 事件机制

Flink支持流处理和窗口事件时间语义。事件时间可以很容易地通过事件到达的顺序和事件可能的到达延迟流中计算出准确的结果。

Flink计算框架概述_Flink_03

  • 窗口机制

Flink 支持基于时间、数目以及会话的非常灵活的窗口机制(window)。可以定制 window的触发条件来支持更加复杂的流模式。

Flink计算框架概述_Flink_04

  • 容错机制

Flink高效的容错机制允许系统在高吞吐量的情况下支持exactly-once语义的计算。Flink可以准确、快速地做到从故障中以零数据丢失的效果进行恢复。

Flink计算框架概述_Flink_05

  • 高吞吐量、低延迟

Flink 具有高吞吐量和低延迟(能快速处理大量数据)特性。下图展示了 Apache Flink和Apache Storm完成分布式项目计数任务的性能对比。

Flink计算框架概述_Flink_06

  • 部署

可以通过Yarn和Mesos等资源管理软件来管理和部署Flink。

3、运行原理
  • 链操作任务

分布式执行 Flink 的链操作任务,每个任务都由一个线程执行。将操作符链接到任务中是一个有用的优化,其减少了线程间切换和缓冲的开销,并且在降低延迟的同时提高了总体吞吐量,可以配置链接行为。

Flink计算框架概述_Flink_07

  • 任务提交

Job Tracker:协调分布式执行—安排任务、协调检查点、协调故障恢复等。为了具有高可用性,设置了多个JobManager,其中一个是领导者,其他的作为备用。

Task Tracker:执行任务(更具体地说,是一个数据流任务)、和缓冲区交换数据流。

Client:客户端用来进行任务调度前期的准备(数据、环境变量等),然后提交计算任务到JobManager。任务提交之后,客户端可以断开连接,也可以继续保持连接以接收进度报告。

  • 运行

当Flink集群启动后,首先会启动一个JobManager和一个或多个TaskManager。由客户端提交任务给JobManager,JobManager再调度任务到各个TaskManager来执行,然后TaskManager将心跳和统计信息汇报给JobManager。TaskManager之间以流的形式进行数据传输。

Flink计算框架概述_Flink_08

  • 任务槽和资源

每个Worker(TaskManager)都是一个JVM进程,并且可以在单独的线程中执行一个或多个子任务。为了控制Worker可以接收多少个任务,Worker有所谓的任务槽(至少一个)。

每个任务槽都代表TaskManager的一个固定资源子集。例如,具有三个插槽的TaskManager将为每个插槽分配1/3隔离的内存资源,这意味着子任务不会与其他作业中的子任务来竞争内存。请注意,目前插槽仅分离托管的任务内存,不会进行CPU的隔离。

通过调整任务槽的数量,用户可以定义子任务如何彼此隔离。每个TaskManager都拥有一个插槽,这意味着每个任务组都可以在单独的JVM中运行(例如,可以在单独的容器中启动);而拥有多个插槽,则意味着更多的子任务共享相同的JVM。同一个JVM中的任务共享TCP连接(通过多路复用)和心跳消息,它们也可能共享数据集和数据结构,从而减少每个任务的开销。

Flink计算框架概述_Flink_09

flink学习笔记概述

...式流处理框架,它能够在大规模的数据流上进行实时计算和批处理。Flink支持丰富的API,包括DataStreamAPI和DataSetAPI,可以在多种计算场景中使用,例如实时数据处理、批处理、图形计算和机器学习等。Flink还具有高... 查看详情

一文解析什么是flink计算框架

...据的一个极限特例而已。Flink的批处理方式采用的是流式计算原理,这一点跟Spark的设计思想正好相反(SparkStreaming本质上是批处理,只是将计算分成了很小的单元,近似成流计算),这也是Flink的最大特 查看详情

大数据(9f)flink状态编程(代码片段)

文章目录概述ManagedStateOperatorStateListStateBroadcastStateKeyedStateValueStateListStateMapStateReducingStateAggregatingState状态后端Appendix概述流式计算分为无状态计算和有状态计算流处理的状态功能:去重、监控……状态分类ManagedStateRawState状态 查看详情

大数据(9f)flink状态编程(代码片段)

文章目录概述ManagedStateOperatorStateListStateBroadcastStateKeyedStateValueStateListStateMapStateReducingStateAggregatingState状态后端Appendix概述流式计算分为无状态计算和有状态计算流处理的状态功能:去重、监控……状态分类ManagedStateRawState状态 查看详情

什么是flink(流处理框架)(代码片段)

...柏林工业大学的一个研究性项目。早期,Flink是做Batch计算的,但是在2014年,StratoSphere里面的核心成员孵化出Flink,同年将Flink捐赠Apache,并在后来成为Apache的顶级大数据项目,同时Flink计算的主流方向被定... 查看详情

flink基础入门(含案例)(代码片段)

...gt;DAG框架(tez)--->Spark流批处理框架,内存计算(伪实时)-->flink流批处理,内存计算(真正的实时计算)flinkvsspark什么是flinkflink是一个分布式,高性能,随时可用的以及准确的流处理... 查看详情

java开发之实时计算--flink(代码片段)

简介介绍计算框架对java开发的重要性介绍flink的架构介绍flink的编程模型:DataStream、DataSet、TableAPI、SQL介绍flink的部署计算框架每个Java开发一定要懂至少一个流行的计算框架,因为现在的数据量越来越大,光靠数据库... 查看详情

huid学习七:hudi与flink集成(代码片段)

...布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算  2.2、安装部署        此文档使用的Flink1.12版本,部署FlinkStandalone集... 查看详情

大数据(9d)flink流处理核心编程练习:计算pv和uv(代码片段)

文章目录概述数据样本代码pom.xmllog4j.propertiesPV计算UV计算UV计算优化:使用键控状态概述本地开发环境(WIN10+IDEA)(本文代码可作为Flink之Transform练习模板,在#####################################之间修改业务逻辑&... 查看详情

新一代实时计算领域flink独树一帜,你知道blink的关系吗

...是Flink的一部分,都在不断演讲中,对比其他流式计算框架(老到新)名称概述Storm只支持流处理SparkStreaming流式处理,其实是micro-batch微批处理,本质还是批处理Flink支持流批一体 查看详情

大数据(9d)flink流处理核心编程练习-计算pv和uv(代码片段)

文章目录概述数据样本代码pom.xmllog4j.propertiesPV计算UV计算概述本地开发环境(WIN10+IDEA)(本文代码可作为Flink之Transform练习模板,在#####################################之间修改业务逻辑)计算PV:每个页面的... 查看详情

flink安装部署

...和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink设计为在所有常见的集群环境中运行,以内存速度和任何规模执行计算。Flink特点1)随处部署应用与其它组件集成!flink是分布式系统,需要计算资源才可执行程... 查看详情

大数据(9f)flink窗口函数练习:计算pv和uv(代码片段)

...(页面ID,用户ID,时间戳)环境和依赖PV计算代码UV计算代码概述需求计算每小时每个页面的PV和UV数据样本(页面ID,用户ID,时间戳)"device_id":"d1","page_id":"p1" 查看详情

大数据(9f)flink窗口函数练习:计算pv和uv(代码片段)

...(页面ID,用户ID,时间戳)环境和依赖PV计算代码UV计算代码概述需求计算每小时每个页面的PV和UV数据样本(页面ID,用户ID,时间戳)"device_id":"d1","page_id":"p1" 查看详情

flink学习1:概述

第一章 查看详情

flink原理

...flink提供同时支持高吞吐、低延迟和exactly-once语义的实时计算能力,同时flink还提供了基于流式计算引擎处理批量数据的计算能力,真正意义上实现了批流统一一、Flink的优势:同时支 查看详情

flink窗口与水位线不得不说的秘密(代码片段)

...和分布式处理引擎,用于对无界和有界流进行有状态计算。在我们的这个Flink框架中,自Flink1.12.0正式发布流批一体统一运行之后,我们的实时计算框架真正步入了Flink的时代,flink实现了流批一体,那么在我们... 查看详情

flink和sparkstream等框架的对比

...、exactlyonce、流和批统一的,能够支撑足够大体量的复杂计算的引擎。 Sparkstreaming的本质还是一款基于microbatch计算的引擎。这种引擎一个天生的缺点就是每个microbatch的调度开销比较大,当我们要求越低的延迟时,额外 查看详情