Apache Flink 概念介绍:有状态流式处理引擎的基石(二)| 学习笔记

简介: 快速学习 Apache Flink 概念介绍:有状态流式处理引擎的基石。

开发者学堂课程【Apache Flink 入门到实战 - Flink 开源社区出品 Apache Flink 概念介绍:有状态流式处理引擎的基石(二)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/632/detail/10037


Apache Flink 概念介绍:有状态流式处理引擎的基石(二)

五.有状态流式处理的挑战

这部分包括状态容错,状态维护,Event-time 处理,还有状态保存与迁移,这四个点都是身为一个状态,流式处理引擎必须有的特征,如果没有这些特征,以现在来说应是比较不成熟的。

1.状态容错

一提到状态这个东西,当引擎维护状态,一定会想知道,如果节点挂了,引擎会如何做到状态容错。所以考虑状态容错,一定会想要考虑的就是精确的状态容错

一个应用在运算的时候累积状态,通常情况下一定会希望每一笔输入的事件反映到状态,更改状态都是恰好一次精确一次

如果改超过一次的话,就代表这一个数据引擎产生的结果是不可靠的

同理,用刚刚很简单的 counter,就是使用者拜访的次数来看的话,如果某一个使用者拜访的次数多计算了,并不是精确一次的话,那产生的结果是没办法参考的。

image.png

首先考虑最简单的一个使用场景,先考虑的是有一个无穷无尽的 qdata 一直在进来,数据进来后单一个执行绪的 process 预算就可以,

此时状态也是不断累积的。

产生一个精确一次的容错方法的做法其实很简单,那就是每处理完一笔,更改完状态之后,都做一个快照,快照会包含它在 Q 里面的位置、处理到第几笔以及当时的状态。

image.png

image.png如图做一个对比,做个一致的快照,在这个四档图里面,处理到第二笔就可以把它想成位置X,对应到状态 state X,如果现在进展到接下来这一笔,所处位置跟着更新了状态也更新,每处理完一笔就做一个这样的快照

假设在处理下一笔时,这一笔造成 process 失败了,如果要 recover 确保进去一次,只需上一个的位置与上一个状态直接回复就可以

接下来,要学习如何在分散式场景下,替多个拥有本地状态的运算子产生一个全域一致的快照,更重要的是如何在不中断的运算前提下产生快照。

image.png

通常情况下可以作用笨的方法,也可以好的方法去完成首先定义什么叫 global consistent snapshot,就是图中这些 operator,在分散式的环境中,在各个节点去做运算。 

第一个方法是处理完一笔快照再更改运算值状态,更改完所有的运算值的状态后,目前所看到的每一个运算值状态,只是刚刚讲的简易场景的延伸而已,这里其实就可以想到笨的方式是什么,就是让每一笔每个运算值之后产生一个快照,然后再让第二笔经过所有的 operator 再产生一个快照,这个比较笨的方式会有一个负作用,就是出完一笔到第二个 operate 之后,其实第一个 operator 可以继续做运算的可是已经停止了所有之前的 operator 的运算,运算中断后使用者也会付出相应的代价。

这里要介绍一个词,就是 checkpoint,目前 flink 社区里面将 checkpoint 翻译成检查点。

每一个 operator,每个预算值他本地后端所维护的这个状态,会在每一次产生一个检查点的时候把他们传到一个共享的 DFS,即使任何一个 process fail 掉时,也可以直接从上一个完整的检查点去把所有的预算值的 state 的状态恢复,然后再把试用卡数据源,就是把卡的位置直接重新设定到对的位置,那利用这样才有办法去达到 XXY,在一个分散式的环境中。

image.png

image.png

其中,刚刚一些提示的重点,就是系统如何在不中断运算的状况下持续产生,其实就是基于一个之前颜色法机制去延伸出来的方法。

那先知道一个点,一个 part of barrier,它会在 data stream 中一直去安插 checkpoint barrier,然后 checkpoint barrier 会出现 N- 或 N。

image.png

如上图,假设现在需要产生 checkpoint barrier,但实际上在 think 中是由 job manager 去触发 checkpoint,在触发 checkpoint 之后就会从数据源开始,由checkpoint barrier 去填满一个表格,如图左下角。

把下面的这一些事件标为红色,checkpoint barrier 也是红色,这个代表着这些数据,这些事数据事件都是属于其负责的 triple berry2,后面的这些白色的就不属于Barry n 项的概念数据源收到了触碰 Barry N 之后,他会先去把状态保存,那数据源的状态,就会是目前 competition 的位置。

这个状态会写在刚刚做的表格之中,同时下游的 operator won 运算之一,也会开始去运算,这些属于 triple Berry n 的数据。那当 triple Berry n 跟着这些数据慢慢的流动 OPERATOR1 运算之后,就会变成是预算之一,也把属于 checkpoint berry 的所有的资料也都反映在状态里面的跟踪状态。

这时候收到 triple berry 也会去直接对 checkpoint 去做,继续往下游,OPERATOR2 也会收到所有数据,然后直接反映到状态。

image.png

到这一步已经完成了一个完整的表格,其实这个表格叫做 distributed snapshots,完整的表格就可以被做容错

2. 状态维护

image.png

第二个内容是状态维护状态维护刚才讲到就是写一段程式码这段程式码可以去维护本地的一些状态值,如果状态值很大的话,一定要有本地的状后端

image.png

上图重点就是状态可能是非常非常大的,那我这个状态后端要么就是 memory,要么就是 out of course 去处理维护这些状态。

那所以说 Flink 有两种不同的状态值有两种不同的状态后端第一个就是 JPMP 的状态后端,这种状态后端是状态量不会有那么大的。就可以只用 JBNP 的状态后端。

image.png

第二个选择就是 rocksdb 的状态户端,意为在 runtime 的 local 本地状态后端在让 user code 使用者读取这些状态的时候,都是可以经过维护

代价就是每一次需要去读取状态的时候,都需要经过一个序列化反序列化的过程相对来说现下要进行快照的产生的时候,其实就变成只是用东西的序列化,那些序列化好的东西直接就是传输到中央共享 DFS。

3. Event-time 处理

image.png

FLINK 或者一些比较进阶的方式出现之前,都只有 processing time 的处理,所谓的 processing time 处理,假设需要定义一个窗口,预算一个 window 的competition,而且 window competition 需要低于三点到四点,然后也可以说 window 的 operation 定义就是每一个小时进行结算。 

那其实以 processing time 在做这件事情的运算,就会变成是这个数据引擎所在三点到四点收到的资料去做个结算可是,实际上人们在去做一些报表或者做任何一条去产生这些分析的结果的时候,是想要知道真实世界中三点到四点真的发出去的资料

image.png

那如果要做这样的运算的话,就必须用 even time在这个图中,Even time 等于说是这个事件真的在数据最远投产生的时候,用时间进行运算

上图表示最开始的 Q,收到的资料,利用每一个小时去划分一个批次,把对应的时间例如三点到四点的数据,真的把它放到三点到四点的一个 bucket,然后这个bucket 接着去产生结果。

 image.png

假设有一个 window operator 正在做预算每一个小时产生结果,要如何清晰表明这个 window 的运算,只说四点该收的资料都已经收到了,可以产生结果了。

这个问题的回答的背后其实就是 operator 必须要知道四点到了,这里的四点到了,是指 event 事件的四点到了,那这个就是 EVEN TIME 处理的精髓。

image.png

Watermark ,水位线。现在有个预算值,会收到某一个带有时间,water mark代表运算值,它可以预期不会再收到更早的资料。好处在于预期的数据如果真的收到,却与产生出的时间差都是五分钟,这时候就会想这个过程中最慢就是推迟5分钟,这时候可能产生 water mark delay5 分钟。

推迟5分钟之后,接下来里面的所有的 window operator 收到四点的资料了,可是若知道再多等五分钟,等到四点零五分时才可以判定四点的资料全部收集完毕。

4. 状态保存与迁移

流式处理应用是无时无刻在运行运上有几个重要考量,

(1)如何更改 bug 等如何将前一执行的状态转移到新的执行?

(2)如何定义运行的平行化程度

(3)如何升级运算从级的版本号

image.png

上图的保存点可以完美满足以上的需求。Flink 中有另外一个词,若今天是手动产生一个检查点的时候,其实叫做一个保存点,英文是 save point,目前的翻译叫做保存点,这与检查点的差别就是检查点是 Flink,对于一个有动态应用在运行中,会一直周期性的产生,利用 Distribute a snapshot 的方式,周期性的产生这些检查点。保存点就是手动去更新,保存点记录着流逝应用中所有运算元的状态。

在使用过程中,首先在执行停止之前,要新建一个保存点,执行完上述条件后,从保存点恢复新的执行,并且利用 even time 处理赶上最新的数据。如果运算结果包含在单一 window 里,产生的结果就无法保持完全一致。

 

六.总结

1.状态容错: 精确一次保证,分布式快照(Distributed Snapshots)

2. 可应付极大的状态t (TB+ scale): out-of-core 状态后端,asynchronous 快照

3. 状态迁移:在应用重新平行化/更动应用代码的状况下仍能恢复历史状态

4. Event-time 处理:用以定义何时接收完毕所需数据

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
4月前
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
802 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
456 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
6月前
|
SQL 人工智能 数据挖掘
Apache Flink:从实时数据分析到实时AI
Apache Flink 是实时数据处理领域的核心技术,历经十年发展,已从学术项目成长为实时计算的事实标准。它在现代数据架构中发挥着关键作用,支持实时数据分析、湖仓集成及实时 AI 应用。随着 Flink 2.0 的发布,其在流式湖仓、AI 驱动决策等方面展现出强大潜力,正推动企业迈向智能化、实时化的新阶段。
800 9
Apache Flink:从实时数据分析到实时AI
|
6月前
|
SQL 人工智能 API
Apache Flink 2.1.0: 面向实时 Data + AI 全面升级,开启智能流处理新纪元
Apache Flink 2.1.0 正式发布,标志着实时数据处理引擎向统一 Data + AI 平台迈进。新版本强化了实时 AI 能力,支持通过 Flink SQL 和 Table API 创建及调用 AI 模型,新增 Model DDL、ML_PREDICT 表值函数等功能,实现端到端的实时 AI 工作流。同时增强了 Flink SQL 的流处理能力,引入 Process Table Functions(PTFs)、Variant 数据类型,优化流式 Join 及状态管理,显著提升作业稳定性与资源利用率。
715 0
|
5月前
|
人工智能 运维 Java
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
本文基于Apache Flink PMC成员宋辛童在Community Over Code Asia 2025的演讲,深入解析Flink Agents项目的技术背景、架构设计与应用场景。该项目聚焦事件驱动型AI智能体,结合Flink的实时处理能力,推动AI在工业场景中的工程化落地,涵盖智能运维、直播分析等典型应用,展现其在AI发展第四层次——智能体AI中的重要意义。
1919 27
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
|
6月前
|
存储 人工智能 数据处理
对话王峰:Apache Flink 在 AI 时代的“剑锋”所向
Flink 2.0 架构升级实现存算分离,迈向彻底云原生化,支持更大规模状态管理、提升资源效率、增强容灾能力。通过流批一体与 AI 场景融合,推动实时计算向智能化演进。生态项目如 Paimon、Fluss 和 Flink CDC 构建湖流一体架构,实现分钟级时效性与低成本平衡。未来,Flink 将深化 AI Agents 框架,引领事件驱动的智能数据处理新方向。
703 6
|
6月前
|
消息中间件 存储 Kafka
Apache Flink错误处理实战手册:2年生产环境调试经验总结
本文由 Ververica 客户成功经理 Naci Simsek 撰写,基于其在多个行业 Flink 项目中的实战经验,总结了 Apache Flink 生产环境中常见的三大典型问题及其解决方案。内容涵盖 Kafka 连接器迁移导致的状态管理问题、任务槽负载不均问题以及 Kryo 序列化引发的性能陷阱,旨在帮助企业开发者避免常见误区,提升实时流处理系统的稳定性与性能。
590 0
Apache Flink错误处理实战手册:2年生产环境调试经验总结
|
10月前
|
存储 SQL 关系型数据库
拉卡拉 x Apache Doris:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%
拉卡拉早期基于 Lambda 架构构建数据系统面临存储成本高、实时写入性能差、复杂查询耗时久、组件维护复杂等问题。为此,拉卡拉选择使用 Apache Doris 替换 Elasticsearch、Hive、Hbase、TiDB、Oracle / MySQL 等组件,实现了 OLAP 引擎的统一、查询性能提升 15 倍、资源减少 52% 的显著成效。
508 6
拉卡拉 x Apache Doris:统一金融场景 OLAP 引擎,查询提速 15 倍,资源直降 52%
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
900 33
The Past, Present and Future of Apache Flink

热门文章

最新文章

推荐镜像

更多