【Flink】Flink核心概念简述

本文详细介绍了ApacheFlink的起源、组件架构、编程模型、部署选项和优点,涵盖了从API到集群管理的关键要素,展示了其在流处理和批处理中的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Flink 简介

Apache Flink 的前身是柏林理工大学一个研究性项目, 在 2014 被 Apache 孵化器所接受,然后迅速地成为了Apache Software Foundation的顶级项目之一。2019 年 1 年,阿里巴巴收购了 Flink 的母公司 Data Artisans,并宣布开源内部的 Blink,Blink 是阿里巴巴基于 Flink 优化后的版本,增加了大量的新功能,并在性能和稳定性上进行了各种优化,经历过阿里内部多种复杂业务的挑战和检验。

Flink 是一个分布式的流处理框架,它能够对有界和无界的数据流进行高效的处理。

二、Flink 组件栈

Flink 采用分层的架构设计,从而保证各层在功能和职责上的清晰。如下图所示,由上而下分别是 API & Libraries 层、Runtime 核心层以及物理部署层:

在这里插入图片描述

1. API & Libraries 层

  • API层主要实现了面向无界Stream的流处理和面向Batch的批处理API,其中面向流处理对应DataStream API,面向批处理对应DataSet API
  • 在API层之上构建的满足特定应用的实现计算框架,也分别对应于面向流处理和面向批处理两类

这里的API可以进行更具体的划分
在这里插入图片描述
API 的一致性由下至上依次递增,接口的表现能力由下至上依次递减

  • SQL 和 Table API 同时适用于批处理和流处理,这意味着可以对有界数据流和无界数据流以相同的语义进行查询,并产生相同的结果。

  • DataStream 和 DataSet API 是 Flink 数据处理的核心 API,支持使用 Java 语言或 Scala 语言进行调用,提供了数据读取,数据转换和数据输出等一系列常用操作的封装。

  • Stateful Stream Processing 是最低级别的抽象,它通过 Process Function 函数内嵌到 DataStream API 中。 Process Function 是 Flink 提供的最底层 API,具有最大的灵活性,允许开发者对于时间和状态进行细粒度的控制。

2. runtime层

这一层是 Flink 分布式计算框架的核心实现层,包括作业转换,任务调度,资源分配,任务执行等功能,基于这一层的实现,可以在流式引擎下同时运行流处理程序和批处理程序。

3. 物理部署层

Flink 的物理部署层,用于支持在不同平台上部署运行 Flink 应用

Flink支持多种部署模式:本地、集群(Standalone/YARN)、云(GCE/EC2)

在这里插入图片描述

三、Flink 集群架构

Flink采用标准的 Master - Slave 结构, 其中,Master 部分包含了三个核心组件:Dispatcher、ResourceManager 和 JobManager,而 Slave 则主要是 TaskManager 进程。它们的功能分别如下:

  • JobManager: 负责所有需要中央协调的操作,比如说检查点(checkpoints) 的协调

    • 接收由 Dispatcher 传递过来的执行程序,该执行程序包含了作业图 (JobGraph),逻辑数据流图 (logical dataflow graph) 及其所有的 classes 文件以及第三方类库 (libraries) 等等 。
    • JobManagers 会将 JobGraph 转换为执行图 (ExecutionGraph)
    • 向 ResourceManager 申请资源来执行该任务,一旦申请到资源,就将执行图分发给对应的 TaskManagers 。因此每个作业 (Job) 至少有一个 JobManager;高可用部署下可以有多个 JobManagers,其中一个作为 leader,其余的则处于 standby 状态。
  • TaskManagers:负责实际的子任务 (subtasks) 的执行

    • 每个 TaskManagers 都拥有一定数量的 slots。Slot 是一组固定大小的资源的合集 (如计算能力,存储空间)
    • TaskManagers 启动后,会将其所拥有的 slots 注册到 ResourceManager 上,由 ResourceManager 进行统一管理
    • 在执行过程中,一个TaskManager可以跟其它运行同一应用程序的 TaskManager交换数据
  • ResourceManager :负责管理 slots 并协调集群资源

    • ResourceManager 接收来自 JobManager 的资源请求,并将存在空闲 slots 的 TaskManagers 分配给 JobManager 执行任务
    • Flink 基于不同的部署平台,如 YARN , Mesos,K8s 等提供了不同的资源管理器
    • 当 TaskManagers 没有足够的 slots 来执行任务时,它会向第三方平台发起会话来请求额外的资源。
  • Dispatcher

    • 负责接收客户端提交的执行程序,并传递给 JobManager
    • 提供了一个 WEB UI 界面,用于监控作业的执行情况
    • 在架构中可能并不是必需的,这取决于应用提交运行的方式。
      在这里插入图片描述
      Flink任务 on yarn
      在这里插入图片描述
      在这里插入图片描述

四、Flink基本编程模型

所有的Flink程序都是由三部分组成的: Source 、Transformation 和 Sink

  • Source 负责读取数据源
  • Transformation 利用各种算子进行处理加工
  • Sink 负责输出

每一个dataflow以一个或多个sources开始以一个或多个sinks结束。dataflow 类似于任意的有向无环图(DAG)

下面是一个由Flink程序映射为Streaming Dataflow的示意图:

在这里插入图片描述
转化为并行的数据流时
在这里插入图片描述

五、Flink 的部署模式

前文介绍一共有三种部署模式,分别是部署在本地、集群和云上。其中常见的部署模式是本地和集群,细分为下面三种

  • Local:以单机模式运行,无需启动分布式资源管理器
  • Standalone:作为一个独立的集群运行,独占集群中的资源,不依赖任何外部的资源管理平台,只能运行Flink
  • Flink On Yarn:在yarn之上运行,利用YARN来管理资源分配和任务调度,集群中可运行其他系统

六、Flink 任务的执行模式

  • Session Mode:会话模式

    需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业。集群启动时所有资源就都已经确定,所有提交的作业会竞争集群中的资源。适合任务规模小,执行时间短的大量作业。

    Flink的作业执行环境会一直保留在集群上,直到会话被显式终止。这样,可以提交多个作业,它们可以共享相同的集群资源和状态,从而实现更高的效率和资源利用。

  • Per-Job Mode:单作业模式

    每个Flink应用程序作为一个独立的作业被提交和执行。每次提交的Flink应用程序都会创建一个独立的作业执行环境,该作业执行环境仅用于执行该特定的作业。当作业完成后,作业执行环境会被释放,集群关闭,资源释放

  • Application Mode:应用模式

    前2种模式中,Flink程序代码是在客户端执行,应用模式中,代码在在集群上执行

在这里插入图片描述

五、Flink 的优点

  • Flink 是基于事件驱动 (Event-driven) 的应用,能够同时支持流处理和批处理
  • 基于内存的计算,能够保证高吞吐和低延迟,具有优越的性能表现
  • 支持精确一次 (Exactly-once) 语意,能够完美地保证一致性和正确性
  • 分层 API ,能够满足各个层次的开发需求
  • 支持高可用配置,支持保存点机制,能够提供安全性和稳定性上的保证
  • 多样化的部署方式,支持本地,远端,云端等多种部署方案
  • 具有横向扩展架构,能够按照用户的需求进行动态扩容
  • 活跃度极高的社区和完善的生态圈的支持
### 大数据技术的核心概念 大数据技术的核心概念围绕着大规模数据的存储、处理和分析展开,其核心目标是解决海量数据带来的挑战并从中提取价值。以下是大数据技术的核心概念: #### 1. 数据存储与管理 大数据技术需要高效的存储系统来处理海量数据。Hadoop 是一种开源软件框架,为任何类型的数据提供了巨大的存储空间[^3]。它通过分布式文件系统(如 HDFS)将数据存储在廉价的商品硬件集群上,并支持数据的高可用性和容错性。 此外,大数据平台层用于完成数据的存储和计算,可以被视为数据仓库的一种实现方式[^2]。离线数据仓库和实时数据仓库是两种主要的数据存储形式,分别适用于批量处理和实时处理场景。 #### 2. 分布式计算 分布式计算是大数据技术的重要组成部分,旨在通过集群中的多台机器并行处理数据以提高效率。Hadoop 提供了 MapReduce 编程模型,允许用户编写简单的程序来处理大规模数据集。此外,还有其他更高效的计算引擎,如 Spark 和 Tez,它们能够提供更快的处理速度和更强的灵活性。 #### 3. 资源调度与管理 资源调度是大数据平台的关键功能之一,确保集群中的计算资源能够被合理分配给不同的任务。例如,YARN(Yet Another Resource Negotiator)是一种通用的资源管理系统,能够在同一集群中运行多种类型的计算框架[^1]。 #### 4. 查询与分析 为了从大数据中提取洞察,查询和分析工具至关重要。大数据平台通常包含查询引擎(如 Hive、Presto),这些工具允许用户使用 SQL 类语言对分布式数据进行查询。此外,还有专门的分析框架(如 Apache Flink)用于实时流数据分析[^1]。 #### 5. 实时处理与流处理 实时处理是大数据技术的一个重要方向,涉及对持续流入的数据进行即时分析。Storm 和 Kafka Streams 是两个流行的实时流处理框架,它们能够处理几乎无限并发的任务或作业。 #### 6. 容错与可靠性 大数据技术设计时充分考虑了硬件和软件故障的可能性。Hadoop 的分布式架构通过数据冗余和任务重试机制确保系统的可靠性和稳定性[^3]。 ```python # 示例:使用 PySpark 进行简单的大数据分析 from pyspark.sql import SparkSession spark = SparkSession.builder.appName("BigDataExample").getOrCreate() data = spark.read.format("csv").option("header", "true").load("hdfs://path/to/data.csv") data.show() ``` ### 总结 大数据技术的核心概念包括数据存储与管理、分布式计算、资源调度、查询与分析、实时处理以及容错与可靠性。这些概念共同构成了一个完整的大数据生态系统,能够有效应对海量数据带来的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值