链载Ai

标题: Apache Flink 2.0:实战数据湖与 AI 实时化 [打印本页]

作者: 链载Ai    时间: 昨天 21:48
标题: Apache Flink 2.0:实战数据湖与 AI 实时化

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;color: rgb(0, 0, 0);font-size: 14px;text-align: justify;visibility: visible;line-height: 2em;">导读本次分享题目为 Apache Flink 2.0:助力数据湖 & AI 实时化。

主要介绍:


ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;visibility: visible;">1.Flink 2.0 概述

2.存算分离状态管理

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;visibility: visible;">3.Streaming Lakehouse

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;">4.AI 实时化探索

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1.5px;line-height: 2em;">5. 问答环节

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75em;">分享嘉宾|宋辛童 阿里云 Flink Java 引擎负责人

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75em;">编辑整理|张静瑜

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75em;">内容校对|李瑶

ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;font-weight: 400;letter-spacing: normal;orphans: 2;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;text-align: left;line-height: 1.75em;">出品社区|DataFun


01



Flink 2.0概述



1. Apache Flink发展历程



Flink的发展历程可以分为三个阶段:



(1)起源阶段(2009-2016年)



(2)发展阶段(2016-2019年)



(3)全球化与创新阶段(2019年至今)



2. Flink 1.0的核心能力与挑战



(1)Flink 1.0解决了什么问题



Flink 1.0在流计算领域解决了许多关键问题,其中最为核心的是有效解决了有状态流计算的问题。在此之前,尽管存在如Storm等流计算系统,但这些系统往往难以实现精确的实时计算,通常需要依赖后续的离线处理来校正计算结果。这主要是因为早期的流计算系统未能妥善解决有状态流计算的问题。



(2)实时计算面临的挑战



尽管Flink 1.0已经具备了强大的功能,并且在性能层面能够支持秒级甚至亚秒级的时效性,规模上也足以应对数千并发乃至上万并发的生产环境,但在实际应用中仍面临一些关键挑战:



这些问题限制了实时数据处理技术在更广泛场景和行业的推广使用,尤其是对于那些时效性要求较低的应用场景,用户可能会选择更加经济的离线计算方案。



3. Flink 2.0致力于解决什么问题



Flink 2.0的核心目标是使实时计算更加普适和普惠,旨在将Flink 1.0中已成熟的功能扩展到更多行业场景。为此,Flink 2.0主要聚焦于两个方面的工作:



02



存算分离状态管理



1.分布式有状态流处理



有状态的计算是指对于给定输入数据和系统的当前状态,通过计算产生输出数据并更新系统状态的过程。在Flink中,这意味着算子会持续接收输入数据,并基于数据中的键值查找对应的状态数据,结合输入数据和当前状态完成运算,然后将结果发送到下游,并更新状态存储。



在分布式环境下,Flink将数据根据其键值分发至不同的Task Manager (TM)节点上处理,确保每个节点仅处理一部分键值对应的数据及其状态信息,从而实现高效实时处理。这种方式确保了在执行计算时可以高效地访问本地存储的状态数据,从而保证了更好的实时性和性能表现。



为了满足容错需求,Flink会定期对本地状态数据创建快照,并将其持久化存储到远程存储系统中,如OSS、HDFS或S3等。由于算子与其对应的状态数据位于相同的TM节点上,这种架构被称为存算一体的状态管理架构。



2.云原生场景下的挑战



在当前的存算一体架构下,特别是在云原生环境中,面临如下一些需求和挑战:



3.存算分离的状态管理——ForSt



Flink 2.0引入了一种全新的存算分离状态后端,名为ForSt(“For Streaming”的缩写)。与传统的存算一体架构相比,ForSt不仅涵盖了本地存储,还将远程存储纳入其中,实现了计算与存储的解耦。



核心区别



在存算一体架构中,本地状态被视为Ground Truth,而远程存储仅用于快照的持久化。而在ForSt架构下,远程存储成为Ground Truth,这意味着状态更新将更积极地写入远程存储系统,而本地存储则主要用于缓存加速。



主要优势



4.性能



在采用存算分离架构时,一个常见的担忧是性能是否会因从本地磁盘改为远程存储而下降。实际上,如果不做任何优化直接将状态存储从本地迁移到远程,确实会导致性能显著下降。然而,Flink 2.0通过一系列优化措施解决了这一挑战,并实现了性能的显著提升。



性能优化措施



性能结果



基于Nextmark测试集的结果显示,在Flink 2.0中,存算分离模式下的吞吐量达到了存算一体模式的75%到120%,具体数值取决于不同的查询(query)。值得注意的是,某些查询下存算分离模式的性能甚至优于存算一体模式。这些测试使用了1GB的本地磁盘空间作为缓存,而查询的状态大小范围为1.2GB至4.8GB,表明缓存无法存放全部状态数据,但在这种情况下仍实现了较好的性能表现。



此外,如果增加本地磁盘的空间用于缓存,预计性能将进一步提高。当前版本只是存算分离状态管理的第一个版本,未来版本将继续针对性能瓶颈进行优化,持续改进用户体验和系统性能。



03



Streaming Lakehouse



1. Lambda架构



在处理既有实时又有离线数据需求的场景中,传统上采用Lambda架构。该架构需要构建两条独立的数据处理链路:一条用于实时处理(如Flink结合Kafka),另一条用于离线处理(如Spark结合Iceberg或Hive)。然而,这种架构存在一些问题:



2. Streaming Lakehouse架构



为解决上述问题,Flink推出了Streaming Lakehouse架构,旨在合并实时和离线数据处理链路。这一架构主要依赖于Flink的流批一体计算能力和Paimon的存储能力(支持流读写及批读写),实现了一体化的数据处理方案。主要优势包括:



开发效率方面的改进与挑战



尽管Streaming Lakehouse架构在许多方面提供了改进,但在开发效率上仍有提升空间。目前,通过统一使用Flink SQL进行开发,避免了针对不同引擎编写代码的需求,这是一个进步。然而,该架构尚未完全达到理想的“流批一体”状态——即使用一份代码、一套引擎、一份数据就能同时支持实时和离线处理。



3.什么是真正的流批一体



真正的流批一体意味着通过一份代码、一套引擎以及一份数据,即可同时满足实时和离线的数据处理需求。



在当前的实践中,已经实现了部分流批一体的目标:



然而,在实现完全的流批一体方面仍存在一些挑战,尤其是在代码层面:



4. Materialized Table



为了解决流批一体中存在的编程模型差异问题,Flink SQL引入了物化表(Materialized Table)的概念。通过定义数据新鲜度,自动选择合适的执行模式(流或批),使得用户无需关心底层执行细节,仅需关注业务层面的数据更新时效性要求。



(1)如何使用物化表



这部分逻辑更接近于传统的批处理方式,但增加了数据新鲜度的概念。



(2)物化表的运维便利性



物化表不仅简化了开发过程,还在运维方面提供了极大的便利性:



5. Flink X Paimon深度集成



除物化表外,Flink 2.0在Flink与Paimon集成方面还做了大量工作,包括场景拓展(如针对宽表拼接、维表查询等常见场景的功能和性能定制优化)以及引擎能力提升(优化Flink读写Paimon表的性能,改进使用Flink进行Paimon表管理操作的易用性)等。



04



AI实时化探索



1. AI技术趋势



近年来,AI技术的发展可以大致分为四个层次的应用:



随着技术的发展,越接近实际应用层面,对于实时性的需求就越强烈。正如一句流行的话所说:“AI is only as good as the data it operates on.”,数据质量决定了AI能力的上限。



2. Retrieval-Augmented Generation(RAG)



在这一背景下,Flink在实时数据处理中的作用显得尤为重要。一个典型的使用Flink实现RAG架构的例子包括两条链路:



3. Flink需要的关键能力



为了支持上述架构,Flink需要以下关键能力:



目前,Flink社区的工作主要集中在模型调用部分,而向量数据库对接及半/非结构化数据类型的处理正在规划之中。



4. Flink CDC和Flink SQL对模型调用的支持



05



问答环节



Q1:物化视图在Flink 2.0中是否仅支持Paimon,未来是否会支持其他数据存储表?



A1:Flink中的物化表与物化视图稍有差异,核心在于将底层生成表的数据逻辑或方式对用户屏蔽。目前Flink的物化表仅支持Paimon。但从技术架构设计上,未来可以支持更多数据存储系统。要支持物化表,需具备两方面能力:



Q2:离线SQL改造成实时化时,如全表聚合等复杂操作,物化表能否解决底层状态问题?



A2:



Q3:Flink处理速度在什么量级,与其他流批引擎(如Storm、Spark)相比有何优缺点?



A3:



Q4:Flink的row by row处理模式与基于文件存储的数据湖匹配度低,是否适合数据湖,未来Flink是否会向增量计算方向发展?



A4:确实,Flink的row by row处理模式与数据湖基于文件存储的特性存在不匹配。如果底层存储是数据湖,使用Flink这种实时处理模式,会付出计算成本,但数据更新频率低,没有获得相应收益。









欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5