带你走入 Flink 的世界

雪夜
发布: 2025-09-23 08:46:22
原创
921人浏览过

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
登录后复制
(既可以连接数据源,也能发送到某个地方存储起来)。

你好星识
你好星识

你的全能AI工作空间

你好星识40
查看详情 你好星识

常用的存储

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状态管理和容错机制介绍

以上就是带你走入 Flink 的世界的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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