带你走入 Flink 的世界


1. 学习 flink 的原因

早在 18 年时,我便听说了

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

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

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

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

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

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

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

  1. 官网介绍

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

基础语义

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

ververica
中的介绍:

  1. 流 Stream

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

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

  1. 状态 State

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

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

  1. 时间 Time

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

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

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

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

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

  1. 接口 API

从上到下分为三层:

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

反之,

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

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

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

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

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
)。

上图是数据处理流程,可以看到几个核心组件:

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

常用的存储

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

性能比较

例如与

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

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

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

上图的数据源是

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

上图采用

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

管理方式 JobManager、TaskWorker

上面是官方示意图,阐述了

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

上面是我对它的理解,我个人认为

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

高可用 HA、状态恢复

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

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

详细请参考这两篇:

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

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

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

Flink
官网:https://www./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` 的社区慢慢从小众走向大众,越来越多人参与。

基础知识点

运行环境如下:

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

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

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

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

Apache Flink 已经是非常优秀和成熟的流计算引擎

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

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

直觉相信,

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

参考资料

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

Apache Flink 是什么?

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

为什么说流处理即未来?

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

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


# apache  # git  # go  # github  # 大数据  # ai  # win  # 阿里巴巴  # 持久化存储  # 为什么  # red  # gate  # asic  # sql  # rabbitmq  # 架构  # 分布式  # 中间件  # yarn  # kafka  # 数据类型  # 封装  # Filter  # 接口  # operator  # Event  # map  # 事件  # table  # hadoop  # storm  # spark  # elasticsearch  # flink  # 数据库  # kubernetes  # 数据分析  # http  # https  # 系统架构  # 可以看出  # 多个  # 上图  # 无界  # 批处理  # 官网  # 大佬  # 指事  # 的是  # 都是 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: Win11怎么设置ipv4地址_Windows 11固定静态IP地址配置教程【详解】  Linux如何使用Curl发送请求_Linux下API接口测试与文件下载技巧【步骤】  c++ std::atomic如何保证原子性 c++ CAS操作原理【底层】  Python对象比较排序规则_集合使用说明【指导】  如何在 Python 中将 ISO 8601 时间戳转换为日期并计算日期差值  Win11任务栏怎么固定应用 Win11将软件图标固定到底部【步骤】  Win11如何更新显卡驱动 Win11检查和安装设备驱动程序【方法】  Python与MongoDB NoSQL开发实战_文档模型与索引优化  Win11如何开启telnet服务 Win11启用Telnet客户端【步骤】  如何在Golang中捕获HTTP服务器错误_GolangHTTP Handler中error处理  Win11怎么关闭触控板_Win11笔记本禁用触摸板快捷键  如何使用Golang包导出规则_控制函数和变量可见性  Win11怎么清理C盘系统日志_Win11清理系统日志文件【步骤】  c++ nullptr与NULL区别_c++11空指针规范  Win11色盲模式怎么开_Win11屏幕颜色滤镜设置【关怀】  c++的位运算怎么用 与、或、异或、移位操作详解【底层知识】  PythonWeb前后端整合项目教程_FastAPIReact完整实例  Mac如何设置动态壁纸?(让桌面动起来)  Win10怎么卸载迅雷_Win10彻底卸载迅雷方法【步骤】  Mac怎么给文件夹加密_Mac创建加密磁盘映像教程【安全】  Python装饰器设计思路_功能增强机制说明【指导】  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  php怎么捕获异常_trycatch结构处理运行时错误的技巧【方法】  如何在 Windows 11 中使用 AlomWare 工具箱  c# 在高并发场景下,委托和接口调用的性能对比  Win10闹钟铃声怎么自定义 Win10闹钟自定义铃声教程【方法】  Python函数接口稳定性_版本演进解析【指导】  如何使用Golang benchmark测量函数延迟_统计执行耗时  如何外贸网站设计-能留住客户提升用户体验!  Windows10电脑怎么设置电源按钮_Win10按电源键关机或休眠  Win11无法安装软件怎么办_Win11解除应用安装限制设置【修复】  MySQL 中使用 IF 和 CASE 实现查询字段的条件转换  php查询数据怎么导出csv_查询结果转csv文件保存【操作】  Windows执行文件被SmartScreen拦截原因_安全提示与绕过方式  php下载安装后memory_limit怎么设置_内存限制调整【技巧】  Win10怎样清理C盘阿里旺旺缓存_Win10清理阿里旺旺缓存步骤【步骤】  Windows资源管理器总是卡顿或重启怎么办?(修复方法)  Python抽象类与接口设计_规范说明【指导】  PhpStorm怎么调试PHP代码_PhpStorm断点设置与调试启动步骤【指南】  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Win11怎么关闭应用权限_Windows11相机麦克风隐私管理  Windows10系统怎么查看显卡型号_Win10 dxdiag显示选项卡  c++怎么用jemalloc c++替换默认内存分配器【性能】  c++ std::future和std::promise c++线程间通信【教程】  Win11怎么关闭自动调节屏幕亮度_Windows11禁用内容自适应亮度控制  如何使用Golang指针与接口结合_实现方法调用和动态类型  Win10怎样安装Excel数据分析工具_Win10安装分析工具包步骤【教程】  PHP的FastAdmin架构适合二次开发吗_特点分析【介绍】  如何使用Golang实现RPC序列化与反序列化_Golang RPC数据编码与解码方法  Win11如何设置计划任务 Win11定时执行程序教程【详解】 

 2025-09-23

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.