0

0

带你走入 Flink 的世界

雪夜

雪夜

发布时间:2025-09-23 08:46:22

|

935人浏览过

|

来源于php中文网

原创

1. 学习 flink 的原因

早在 18 年时,我便听说了

Flink
这个流式计算引擎,当时阿里选择它作为新一代大数据计算框架,这一消息给我留下了深刻印象。

由于我平时主要从事业务开发,尚未系统学习

Flink
,但今年随着数据量的快速增长,我们的架构师提出了通过数据加工和分析,获取更多指标性结果,为用户提供更有价值的业务。

因此,我们规划了如下的系统架构:

带你走入 Flink 的世界可以看出,业务数据库与数据分析系统已被分离,这样可以避免对核心业务的影响。数据分析的结果存储在线下备份库中,这样即使查询大量分析结果,也不会影响到核心业务。

在数据处理方面,我们选择了

Flink
作为分布式处理引擎。经过深入调研和学习,从它的描述、性能、接口编程和容错恢复等方面来看,它非常适合我们的场景。接下来,我将分享我的调研结果。

  1. 官网介绍

官网虽然有中文版的文档,但翻译并不完全,经常需要跳转到英文博文。这里推荐一个国内网站 https://www.php.cn/link/7da66e82dc1f8024527341be2df86b9f

基础语义

基础语义非常重要,高层语法都是基于基础语义构建的,所以需要对它们有所了解。我推荐

ververica
中的介绍:

  1. 流 Stream

带你走入 Flink 的世界从上图可以看出,数据流分为有界(bounded)和无界(unbounded)两种。有界数据流大小固定,计算最终会完成并结束;无界数据流的数据会随着时间推移持续增加,计算会持续进行且没有结束的状态。

数据流还具有实时和历史记录的属性。实时处理是数据一生成就立即处理;如果时效性要求不高,可以在凌晨统计前一天的完整数据,将数据流持久化到存储系统中,然后进行批处理。

  1. 状态 State

状态是计算过程中保存的数据信息,在容错恢复和

Checkpoint
中起到重要作用。流计算本质上是增量处理,因此需要不断查询和维护状态。为了保证
Exactly-once
语义,还需要将数据写入到状态中,以确保在故障发生时,通过保存在状态中的数据进行恢复,保证一致性。持久化存储则可以在整个分布式系统运行失败或崩溃的情况下,实现
Exactly-once
语义,这是状态的另一个重要价值。

  1. 时间 Time

带你走入 Flink 的世界

Flink
时间分为事件时间(Event Time)、摄入时间(Ingestion Time)和处理时间(Processing Time)。对于无界数据流,时间是判断业务状态是否滞后的重要依据。

事件时间
:指事件被处理的时间,由机器的系统时间决定。

处理时间
:指事件发生的时间,通常由数据源携带的字段指明。

摄入时间
:指数据进入
Flink
的时间,在数据源处以操作时间作为时间戳。

三个时间的具体位置如上图所示,后续会详细讲解。

  1. 接口 API

带你走入 Flink 的世界从上到下分为三层:

SQL/Table API
DataStream API
ProcessFunction
API
的表达能力和业务抽象能力都很强,但越接近
SQL
层,表达能力会逐步减弱,抽象能力会增强(由于这是基础了解,所以没有深入学习
SQL API
层,感兴趣的同学可以进一步探索)。

反之,

ProcessFunction
层的
API
表达能力非常强,可以进行多种灵活操作,但抽象能力相对较低。

通常,我们最常用的是中间层的

DataStream API
,后续的学习也将围绕它展开。

架构介绍来源于 https://www.php.cn/link/45402d4ff8981a182dcfc4813600961f

带你走入 Flink 的世界1. 有界和无界数据流

Flink
具备统一处理有界和无界数据流的能力(流处理是无界的,批处理是有界的,给无界的流处理加上窗口
Window
相当于有界的批处理,由于
API
一致,算子可以复用)。

  1. 部署灵活

Flink
底层支持多种资源调度器,包括
Yarn
Kubernetes
等。
Flink
自带的
Standalone
调度器在部署上也非常灵活(
Standalone
也是本地开发常用的模式)。

  1. 极高的可伸缩性

对于分布式系统来说,可伸缩性非常重要。资源不足时可以动态添加节点,分担压力;资源充足时可以撤下服务器,减少资源浪费。阿里巴巴双 11 大屏使用

Flink
处理海量数据,测得峰值可达 17 亿/秒。

  1. 极致的流式处理性能

Flink
相较于
Storm
的最大特点是将状态语义完全抽象到框架中,支持本地状态读取,避免了大量网络
IO
,大大提升了状态存储的性能。

  1. 特性和优点

以上是对

Flink
的定义和架构介绍,下面是更具体的信息。官网从【架构】、【应用】和【运维】三个方面进行了介绍。

这里不会深入分析,主要简单介绍它的特性和优点,提供一个大致的了解,逐步深入,在后续文章中进一步学习。

处理流程

Flink
程序的基本构建块是流和转换。(请注意,
Flink
DataSet API
中使用的
DataSet
也是内部流)从概念上讲,流是数据记录流(可能永无止境),而转换是将一个或多个流作为一个操作的操作。一个输入可以产生一个(例如
map
)或多个输出流(例如
flatMap
)。

带你走入 Flink 的世界上图是数据处理流程,可以看到几个核心组件:

  1. 数据源 Source

自带的

API
中,可以读取以下数据:集合数据(fromCollection)、文件数据(readFile)、网络套接字(socket)以及更多扩展来源(addSource)。更多扩展中可以通过自定义
RichSourceFunction
实现读取更多来源的数据。

图中获取的数据源是

Kafka
,与其他中间件整合中,也封装了许多方便的方法,调用它们可以更方便地获取数据源的数据。

  1. 转换 Transaction

进行数据的转化,对应于文档中的算子

Operator
。常见的数据操作有以下:
map
flatMap
filter
keyBy
reduce
fold
(在 1.9 中被标注为
deprecated
)、
aggregate
Window
等常用操作。

从上图也可以看出,转换的操作可以不止一次,多个算子可以形成

chain
链式调用,然后发挥作用。

  1. 存储 Sink

进行数据的存储或发送,对应于文档中的

connector
(既可以连接数据源,也能发送到某个地方存储起来)。

Sencha Touch快速入门2.0 中文WORD版
Sencha Touch快速入门2.0 中文WORD版

本文档主要讲述的是Sencha Touch快速入门2.0;Sencha Touch可以让你的Web App看起来像Native App。美丽的用户界面组件和丰富的数据管理,全部基于最新的HTML5和CSS3的 WEB标准,全面兼容Android和Apple iOS设备。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看

下载

常用的存储

sink
Kafka
Apache Cassandra
Elasticsearch
RabbitMQ
Hadoop
等。与前面一样,可以通过扩展
RichSinkFunction
进行自定义存储的逻辑。

性能比较

例如与

Hadoop
Storm
Spark
进行比较,对比性能的高低。如果选择使用
Flink
,必须比以前的开发更方便且性能更好。

由于之前没有使用过这些大数据框架,所以测评数据可以参考以下两篇文章:

Flink实时计算性能分析 https://www.php.cn/link/9ce60c64ac4510df68537de96631261f Flink 与 Storm 的性能对比 https://www.php.cn/link/87e942236933558e0ea7cd7dee76e9db

带你走入 Flink 的世界上图的数据源是

Kafka Source
,蓝色是
Storm
,橙色是
Flink
。在一个分区
partition
情况下,
Flink
的吞吐量约为
Storm
的 3.2 倍;而在 8 个分区情况下,性能提高到 4.6 倍。

带你走入 Flink 的世界上图采用

outTime-eventTime
作为延迟,可以看出,
Flink
的延迟还是比
Storm
的要低。

管理方式 JobManager、TaskWorker

带你走入 Flink 的世界上面是官方示意图,阐述了

Flink
提交作业的流程,应用程序
Flink Program
JobManager
TaskManager
之间的关系。

带你走入 Flink 的世界上面是我对它的理解,我个人认为

zhisheng
大佬写的更加详细,可以参考这篇文章:https://www.php.cn/link/c3a05fe072d3d4f009eccce97c41ca71

高可用 HA、状态恢复

High Availability
是个老生常谈的话题了,服务难免会遇到无法预测的意外,如何在出现异常情况下快速恢复,继续处理之前的数据,保证一致性,这是个考量服务稳定性的标准。

Flink
提供了丰富的状态访问(例如有
List
map
aggregate
等数据类型),以及高效的容错机制,通过存储状态
State
,然后通过存储了状态的
Checkpoint
Savepoint
来帮助应用进行快速恢复。

带你走入 Flink 的世界详细请参考这两篇:

Apache Flink 零基础入门(七):状态管理及容错机制 https://www.php.cn/link/a1280bb57e980da66d54eb0f20cbb95e Flink状态管理和容错机制介绍 https://www.php.cn/link/c72741e550f08085fefee77a99d9ccb3

真的是非常敬仰发明优秀框架的团队,也非常敬佩每一个为技术做贡献的参与者,所以每次找到相关的资料都跟发现宝藏一样。

下面罗列一下目前找到的资料:

Flink
官网:https://www.php.cn/link/c323092e3dc96ec44049c28c7dd27089
国内牛人的分享:https://ververica.cn
Github 项目
可以关注一下提的问题和阿里分支
Blink
:https://github.com/apache/flink
zhisheng
个人学习的流程是跟着他的文章走了一遍,然后遇到不懂的继续深入学习和了解:http://www.54tianzhisheng.cn/tags/Flink/
wuchong
这位大佬是从 16 年就开始研究
Flink
,写的文章很有深度,想要详细了解
Flink
,一定要看他的文章!:http://wuchong.me/categories/Flink/从上面的资料可以看出,
Flink` 的社区慢慢从小众走向大众,越来越多人参与。

基础知识点

运行环境如下:

带你走入 Flink 的世界上图是我在学习过程中整理的一些知识点,之后将会根据罗列的知识点慢慢进行梳理和记录。

  1. 总结:未来的计算方式

从调研的结果中可以看出,无论从性能、接口编程和容错上,

Flink
都是一个不错的计算引擎。
github
上拥有 1 万多个
star
,这么多人支持以及阿里巴巴的大力推广,还有在 2019.09 参加的云栖大会,演讲嘉宾对
Flink
的展望:

带你走入 Flink 的世界Apache Flink 已经是非常优秀和成熟的流计算引擎

Apache Flink 已经成为优秀的批处理引擎的挑战者

继续挖掘 Apache Flink 在 OLAP 数据分析领域的潜力,使其成为优秀的数据分析引擎

直觉相信,

Flink
的发展前景不错,希望接下来与大家分享和更好的去学习它。

参考资料

Flink 从 0 到 1 学习 —— Apache Flink 介绍

Apache Flink 是什么?

Apache Flink 零基础入门(一&二):基础概念解析

为什么说流处理即未来?

Apache Flink 零基础入门(七):状态管理及容错机制

Apache Flink状态管理和容错机制介绍

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

675

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1084

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

356

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

674

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

566

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

409

2024.04.29

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
RunnerGo从入门到精通
RunnerGo从入门到精通

共22课时 | 1.7万人学习

尚学堂Mahout视频教程
尚学堂Mahout视频教程

共18课时 | 3.2万人学习

Linux优化视频教程
Linux优化视频教程

共14课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号