概念
Flink 的官方定义是:
Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
以上定义可分解为两个定义:
Flink 是一个计算框架,用于在无边界和有边界数据流上进行有状态的计算。
Flink 是一个分布式计算引擎,能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
本人认为,以如下定义,更容易全面理解 Flink :
Flink 是一个流式分布式数据计算系统。
既然 Flink 是一个分布式计算系统,那么必然包含3大部分,即系统内核、系统库、系统接口。
Flink 的系统内核主要包含一个流式分布式计算框架、一个流式分布式计算引擎。
Flink 的系统库主要包含 Flink CEP、Flink State Processor、Flink Kubernetes Operator、Flink CDC、Flink ML、Flink Stateful Funtions、Flink Table Store(现已独立为Paimon)。
Flink 的系统接口主要包含存储接口、IO接口、编程接口、管理接口。
价值
- 创建事件驱动型应用
- 创建数据分析应用
- 创建数据管道应用
功能
- 海量数据的流批复杂处理
- 精确的状态管理
- 完备的容错机制
- 丰富的连接器
- 可自定义任意数据处理逻辑模型
- 提供多种部署方式,部署于任意集群规模
特点
- 流批一体大规模计算:水平扩展架构;支持超大状态;增量检查点机制
- 正确性保证:Exactly-once状态一致性;完善的事件时间处理;成熟的迟到数据处理
- 性能卓越:低延迟;高吞吐;内存计算
- 生态成熟:丰富的连接器
- 分层API:SQL & Table on Stream & Batch Data;DataStream API;ProcessFunction (Time & State)
- 聚焦运维:灵活部署;高可用;保存点
架构模型
数据流模型
任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。
数据可以被作为 无界 或者 有界 流来处理。
- 无界流 有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
- 有界流 有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理
Apache Flink 擅长处理无界和有界数据集 精确的时间控制和状态化使得 Flink 的运行时(runtime)能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生了出色的性能。
运行模型
Flink 是一个分布式系统,需要有效分配和管理计算资源才能执行流应用程序。它集成了所有常见的集群资源管理器,例如Hadoop YARN,但也可以设置作为独立集群甚至库运行。
Flink 运行时由两种类型的进程组成:一个 JobManager 和一个或者多个 TaskManager。
Client 不是运行时和程序执行的一部分,而是用于准备数据流并将其发送给 JobManager。之后,客户端可以断开连接(分离模式),或保持连接来接收进程报告(附加模式)。客户端可以作为触发执行 Java/Scala 程序的一部分运行,也可以在命令行进程
./bin/flink run ...
中运行。
可以通过多种方式启动 JobManager 和 TaskManager:直接在机器上作为standalone 集群启动、在容器中启动、或者通过YARN等资源框架管理并启动。TaskManager 连接到 JobManagers,宣布自己可用,并被分配工作。
JobManager
JobManager 具有许多与协调 Flink 应用程序的分布式执行有关的职责:它决定何时调度下一个 task(或一组 task)、对完成的 task 或执行失败做出反应、协调 checkpoint、并且协调从失败中恢复等等。这个进程由三个不同的组件组成:
- ResourceManagerResourceManager 负责 Flink 集群中的资源提供、回收、分配 - 它管理 task slots,这是 Flink 集群中资源调度的单位(请参考TaskManagers)。Flink 为不同的环境和资源提供者(例如 YARN、Kubernetes 和 standalone 部署)实现了对应的 ResourceManager。在 standalone 设置中,ResourceManager 只能分配可用 TaskManager 的 slots,而不能自行启动新的 TaskManager。
- DispatcherDispatcher 提供了一个 REST 接口,用来提交 Flink 应用程序执行,并为每个提交的作业启动一个新的 JobMaster。它还运行 Flink WebUI 用来提供作业执行信息。
- JobMasterJobMaster 负责管理单个JobGraph的执行。Flink 集群中可以同时运行多个作业,每个作业都有自己的 JobMaster。
始终至少有一个 JobManager。高可用(HA)设置中可能有多个 JobManager,其中一个始终是 leader,其他的则是 standby(请参考 高可用(HA))。
TaskManagers
TaskManager(也称为 worker)执行作业流的 task,并且缓存和交换数据流。
必须始终至少有一个 TaskManager。在 TaskManager 中资源调度的最小单位是 task slot。TaskManager 中 task slot 的数量表示并发处理 task 的数量。请注意一个 task slot 中可以执行多个算子(请参考Tasks 和算子链)。
编程模型
Flink 有3层 API,即3种编程模型,分别是
- SQL & Table 模型:Flink 最简单的编程模型。SQL & Table 都是批处理和流处理统一的模型,这意味着在无边界的实时数据流和有边界的历史记录数据流上,会以相同的语义执行查询,并产生相同的结果。SQL & Table 借助了 Apache Calcite 来进行查询的解析,校验以及优化。它们可以与 DataStream 无缝集成,并支持用户自定义的标量函数,聚合函数以及表值函数。
- DataStream 模型:比 SQL & Table 模型复杂,需要 Java/Scala/Python 编程功底。DataStream为许多通用的流处理操作提供了处理原语。这些操作包括窗口、逐条记录的转换操作,在处理事件时进行外部数据库查询等。DataStream API 支持 Java 和 Scala 语言,预先定义了例如
map()
、reduce()
、aggregate()
等函数。你可以通过扩展实现预定义接口或使用 Java、Scala 的 lambda 表达式实现自定义的函数。 - ProcessFunction 模型:Flink 最复杂最具表达力的编程模型,不仅需要 Java/Scala/Python 编程功底,还需要对 Flink 有较为全面的认识。ProcessFunction 可以处理一或两条输入数据流中的单个事件或者归入一个特定窗口内的多个事件。它提供了对于时间和状态的细粒度控制。开发者可以在其中任意地修改状态,也能够注册定时器用以在未来的某一时刻触发回调函数。
难点
- Flink 代码与相关知识规模庞大:Flink 代码工程异常复杂,相关知识繁多,对于大多数开发者来说,掌握 Flink,绝非易事,需要耗费大量时间与精力
- Flink 流计算框架复杂:Flink 以流式计算理论为核心,流式计算理论异常复杂,涉及的构件极多,对于大多数开发者来说,很难完全理解透理论,及 Flink 基于流式计算理论所搭建的流计算框架
- Flink 使用门槛高:Flink 的三层API,均需要至少掌握一门编程语言,才能入门使用,要想更进一步使用,更需要掌握 Flink 相关核心概念与相关代码对象
解决难点
针对以上掌握与使用 Flink 的难点,本人创造了Daph。
Daph是一个通用的数据同步与数据处理平台级工具,既具有丰富的数据同步能力,又具有强大的数据处理能力,一站式满足数据开发所有需求,可用于构建可视化配置化的数据同步与数据处理平台。
Daph为【简化 Flink/Spark 等大数据计算系统的使用】而生。
通过Daph,能够以配置,而非编程的方式,完成大数据处理目标。
Daph具有如下功能:
- 全量增量整库整表数据同步:以极简配置方式,完成全量增量整库整表数据同步 - 已支持50多种数据源类型的全量整表同步- 已支持Flink-cdc所支持的所有数据源类型的cdc整表同步- 已支持mysql/postgresql/oracle/sqlserver/doris/starrocks到mysql/postgresql/oracle/sqlserver/doris/starrocks/hive/iceberg/kafka的全量增量整库同步
- 流批一体复杂数据处理:以极简配置方式,完成流批一体任意复杂多表sql处理逻辑
Daph具有如下价值:
- 统一数据开发视图:Daph既具有丰富的数据同步能力,又具有强大的数据处理能力,一站式满足数据开发所有需求
- 降低数据开发门槛:通过配置文件,完成数据开发
- 缩短数据开发周期:开箱即用的海量数据同步与数据处理能力,极简的安装部署方式,极简的二次开发过程
Daph的中文名称是大赋。大赋是汉代发展起来的一种文体,结构严谨,形式宏大,内容丰富,追求形式与内容的完美结合,讲究音韵和谐,对仗工整,用典丰富,是古代文学中极具艺术魅力的文体之一。
Daph的英文名称,取自【有向无环图Directed Acyclic Graph】的第一个字母与最后三个字母。
Daph图标的形状灵感源于字母D、图形圆、图形椭圆。
Daph图标的表层意思是:
- 红色一竖代表Daph依赖的开源大数据计算系统
- 三条曲线从左到右,分别代表做任何事的三个步骤,即输入、处理、输出。
Daph图标的颜色内涵是:
- 红色一竖:红色是火,火是人类开始质变的起源
- 橙色曲线:橙色可理解为能量,理解为初始自然,截取自椭圆的一小部分
- 绿色曲线:绿色是生机盎然,可理解为大自然,截取自圆的一半,恰好半圆
- 蓝色曲线:蓝色是天空,是海洋,是生命的起点,是生命的终点。
Daph图标的思想内核是道,Dao即Da与O,即大与圆,大圆满,即道。
Daph以道家一开始,结合儒家中庸思想,只取半圆,半圆是种看似不圆满、实则达到佛家圆融无碍的人生观。
从一开始,
往右走,即往前走,路越走越窄,人变成利刃;
往左走,即往回走,路越走越宽,回到初心,回到一,回到一切,拥有一切。
圆源于一。
Daph目前处于起步阶段,起步不易,期待大家的使用与关注。
走过路过不要错过,前往gitee与github,动用您轻快灵活的食指,敲击一个动听的星标音符。
共同成就大赋,你我皆为美妙音符!
附录
版权归原作者 Dasea96 所有, 如有侵权,请联系我们删除。