云计算·大数据 频道

Flink:下一代实时计算的新进展、新挑战、新未来

  在大数据领域,Flink是中国开源技术的典范,引领实时计算走向不断创新的前沿!

  如果从2015年阿里巴巴成为第一批使用Flink框架的忠实用户开始算起,中国实时计算已走过八年成长历程。从最初的应用者到贡献者,再到把Flink作为企业级核心能力放到阿里云平台上服务给更多用户,Flink已经成为实时计算的事实标准,把中国开源技术推向一个新的顶峰。

  在今年ACM SIGMOD峰会上,Flink获得了本年度的系统奖(Systems Award),这份来自国际数据管理领域的荣誉,体现了学术界对Flink技术先进性与业界影响力的高度认可,是对开源社区过去工作的肯定,也是对未来的期许。目前,Flink2.0版本正在积极筹备,预计2024年正式发布,新版本不仅是新功能迭代,更代表实时计算将迎来下一个十年变革!

  实时计算技术革新

  几天前,Flink Forward Asia中国峰会在北京召开,这是本年度继西雅图召开Flink Forward国际会议之后的第二次会议,也是国内的第六届峰会。作为实时计算领域的“风向标”,本次会议的几个关键字代表了开源社区的最新进展以及未来发展方向。比如:流式湖仓、Flink CDC、Flink Batch、Flink SQL等。

  Flink之所以能够成为一款真正在对有限数据集和无限数据集都能够统一处理的一款优秀的计算引擎,其核心能力是在场景上的不断创新。为了能够处理更多数据,让数据流动起来,Flink社区在过去一年的时间里做了大量工作,比如:让Flink和Lakehouse架构可以相互协作、相互融合。

  我们可以看到,越来越多的企业正在把传统的基于Hive的数仓体系转移到Lakehouse架构之上,这已经成为数据分析领域的主流技术趋势。如果我们把Flink和Lakehouse结合在一起,会加速数据流动过程,取得更好的数据分析效果,而云是连接一切的桥梁。不管是大数据、AI,还是各种数据库、计算系统,云都是支撑一切应用的“底座”,所以为了让Flink运行在云上,让用户获得更好的体验,Flink做了很多云原生工作。

  以前说湖仓架构,底层的湖存储格式不外乎是Delta Lake、Hudi 与 Iceberg,Flink为了融入湖仓架构,实现流批一体目标,做了诸多改进。以Iceberg为例,虽然Iceberg在设计上非常简单,生态也比较开放,和Flink结合能够获得比较流畅的流读流写能力,但整体架构更偏向于离线设计,无法全面满足数据实时处理目标,在内核改进上遇到了阻碍。同样,Flink+ Hudi的计算能力也无法达到预期,至少需要十分钟以上级别的响应时间。所以,Flink重新设计了数据湖工具,叫做Apache Paimon,前身是Flink Table Store,提供的是面向流更新以及湖存储的原生设计,可以给用户带来1-5分钟的延迟。

  Paimon是流批一体的湖存储格式,可以与Flink CDC无缝集成,实现一键入湖目标,同时也能通过Flink 或者Spark的SQL来流写批写,Paimon支持一切主流开源引擎,真正实现了从离线到实时数据湖仓的变革。

  而Flink CDC像是一系列数据库的连接器。由于Flink是一个流计算引擎,不只消费日志流这样的数据源,也覆盖来自业务端数据库里的数据,Flink CDC可以弥补Flink读取不同数据的缺陷,以流的方式去读取数据库里一些增量的变更的日志。Flink CDC支持的数据库包括MySQL、PostgreSQL、PolarDB、OceanBase、TiDB、MongoDB等等,有十多种的数据源。

  目前,Flink CDC已经和Flink SQL进行了无缝打通,用户通过SQL就可以构建丰富应用。比如:可以基于SQL就能够做到数据库里面数据的一些实时同步,实现实时入仓入湖,进行流式数据分析。甚至可以用SQL对数据库的一些变更的日志做复杂事件处理,进行日志的审计等等。

  2023年,Flink CDC不仅实现了技术上的跨越,在生态层面也有新的进展,IBM DB2 和Vitess成为两个新的connector。同时,在增量快照读取能力上面,扩展到更多的数据源,包括Oracle、SQL Server、MongoDB、PostgreSQL,用户再去读取这些数据库的数据的时候,就可以并行、无锁地去读取数据,同时可以获得更好的性能和更高的稳定性。而在引擎的能力方面,Flink CDC提供了非常多的高级特性,比如动态加表,它可以让你在已有的数据同步作业中,动态地去加上你想同步的新表。而已有的这些同步的表,会继续同步,不会断流。然后新增的表会以并行、全增量一体化的模式再帮你去同步,达到了实时同步的效果。

  除此外,Flink CDC还支持了自动缩容、异步分片等能力,包括在引擎上面的全面增强。而诸多更新背后,离不开社区的贡献。过去一年,Flink CDC的贡献者数量大幅提升,有一半的贡献来自阿里巴巴以外的企业,包括腾讯、字节跳动、滴滴等。Flink CDC覆盖的场景也越来越广泛,横跨了金融、物流、游戏、互联网等多个场景,甚至云厂商、云服务商也都在大量使用。

  整体来看,Flink的2023年经历了两个大的版本迭代(Flink 1.17、Flink 1.18),目前正在走向精益求精的状态。除了Paimon和Flink CDC,Flink Streaming已经成为全球领先、相对标准的一个技术,正在根据用户的诉求和业务场景不断打磨。而在流批一体计算领域,Flink正在针对批处理模式下的一些性能、功能等进行持续完善。针对直面用户体感的Flink SQL,也做了诸多更新,比如:今年推出了一个叫做PLAN_ADVICE的新特性,该功能可以检测用户SQL潜在的正确性风险,并提供优化建议。另外,Flink SQL在简化开发的同时,也可以拥有系统的灵活性。比如,通过Benchmark可以进行更灵活的管理,可以基于算子级别进行一些配置等。

  Flink CDC的下一站

  Flink CDC虽然已经足够好,但不应该只是一个数据库不同数据源的连接器,所以经过三年的发展过后,Flink CDC迎来了3.0时代,具备了实时数据集成框架能力。

  数据集成是一个重要场景,但是之前,如果把Flink CDC当成一个数据集成解决方案来用,还需要做更多额外的拼装工作,会受到一些限制,所以Flink CDC 3.0版本做了重大调整,发布了实时数据集成框架,这是在Flink内核基础上去构建的应用,同时添加了一系列更高级的特性,比如实时同步、整库同步、分库分表合并同步、schema变更的同步,schema自动推导,还有动态加表、自动缩容等等。

  在第一期,Flink CDC已经支持了Mysql到StarRocks和Doris的同步链路。下一期会打通更多链路,包括Paimon、kafka、MongoDB等。同时,在接入层会尽量简化数据集成链路的开发成本。比如:用户想要去开发一个从Mysql到Doris的一个同步链路,只需要在YAML配置文件里去定义Mysql数据源的连接信息,以及Doris结果表的连接信息,以及需要知道同步哪些表,然后使用flink-cdc-sh脚本去提交YAML文件,就可以实现数据同步,整个作业会自动把上千张表同步到Doris里。

  Flink CDC的蓬勃发展源于开源,也会回馈给开源,阿里巴巴已正式宣布,把Flink CDC捐赠给Apache Flink和Apache软件基金会,未来会有更多用户体验到Flink CDC强大之处。

  攀登下一个十年顶峰

  Flink社区正在蓬勃发展,解决了用户在实际生产场景中遇到的很多问题,但还不够尽善尽美,实时计算创新永无止境。

  首先,Flink会在流处理方向上追求极致的优化与技术演进,以保持项目在业界具备持续的技术领先性,带动流处理技术向前发展。

  其次,流批一体架构的演进也是社区的关注重点。从2018、2019年左右,业界就在以Flink为核心推动流批一体架构演进。到现在的Streaming Lakehouse架构,流批一体已经成为Flink引擎非常重要的一个特色,也是越来越多的用户选择Flink的一个重要的原因。

  第三,用户体验的提升。Flink起源于柏林工业大学的一个科研性项目,在流技术架构上拥有先进性,但因为受限于设计的复杂性,所以易用性上有不尽人意之处,需要持续改进,不断提升用户体验。

  在流计算方面,会持续完善一些重要的算子语义和功能。以Window和Join为例,Window是流计算中最常用的计算方式之一,主要用于一些聚合的操作。在Flink SQL中,通常推荐用户使用基于表值函数(Table-Valued Functions)的方式对Window进行定义。接下来,Flink社区会持续完善这种基于表值函数的窗口能力,包括支持更多的窗口类型,以及支持Change Input和Window提早或者延迟的触发等。另外,Join算子操作在数据分析当中扮演着重要角色。实际生产环境中,Join算子非常容易成为大规模数据处理的计算瓶颈。所以,Flink社区也在探索多种用于Join性能优化的一些技术,包括Mini-batch Join、Multi -way Join等等。

  流批一体的优势在于,采用统一的API进行流任务和批任务的开发,采用统一的引擎去做执行,同时通过统一的算子实现大数据的高效处理和分析,确保数据口径能够具备天然的一致性。目前,不管是SQL的API,还是DataStream的API,Flink都可以做到用同一套API支持流批任务的开发,但还没有做到一次开发满足两种运行模式的任意切换。那么,如何让用户真正做到只开发一次,就能支持流和批两条链路的运行?这是Flink社区在演进的方向,比如:通过物化视图的思路来实现!

  当然,有了统一的API,还不能够真正做到流批一体,还需要具备优良的引擎能力。Flink在流处理能力上,无疑是业界最优。现在,社区在大力打造的是Flink的批处理能力,包括在容错、动态执行、流批融合、全增量一体等方面进行持续优化。

  在用户体验层面,会关注很多细节,包括SQL作业的升级、序列化、重新梳理配置机制、淘汰一部分比较陈旧的API等。

  Flink社区在流计算、流批一体以及用户体验提升方面的最新进展,让我们看到开源生态力量正在逐渐壮大,实时计算的未来大有可为。目前,Flink2.0版已经有了明确的时间规划,新版本带来了很多令人期待的功能和改进,为开发者和用户带来了更强劲的数据处理和分析能力。相信,随着Flink社区的持续演进,下一个十年会再攀顶峰,占据全球科技创新的霸主地位!

0
相关文章