Apache Flink 1.9.0版本新功能介绍

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 目前,Apache Flink 1.9.0版本已经正式发布,该版本有什么样的里程碑意义,又具有哪些重点改动和新功能呢?本文中,阿里巴巴高级技术专家伍翀就为大家带来了对于Apache Flink 1.9.0版本的介绍。

摘要:Apache Flink是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。目前,Apache Flink 1.9.0版本已经正式发布,该版本有什么样的里程碑意义,又具有哪些重点改动和新功能呢?本文中,阿里巴巴高级技术专家伍翀就为大家带来了对于Apache Flink 1.9.0版本的介绍。
演讲嘉宾介绍:

image.png
本次分享主要分为以下三个方面:

  1. Flink 1.9.0的里程碑意义
  2. Flink 1.9.0的重点改动和新功能
  3. 总结

一、Flink 1.9.0的里程碑意义

下图展示的是在2019年中阿里技术微信公众号发表的两篇新闻,一篇为“阿里正式向Apache Flink贡献Blink代码”介绍的是在2019年1月Blink开源并且贡献给Apache Flink,另外一篇为“修改代码150万行!Apache Flink 1.9.0做了这些重大修改!”介绍的是2019年8月Bink合并入Flink之后首次发版。之所以将这两篇新闻放在一起,是因为无论是对于Blink还是Flink而言,Flink 1.9.0的发版都是具有里程碑意义的。

image.png

在2019年年初,Blink开源贡献给Apache Flink的时候,一个要点就是Blink会以Flink的一个分支的形式开源,Blink会将其主要的优化点都Merge到Flink里面,一起将Flink做的更好。当我们结合这两篇报道来看的时候,能够发现当初Blink的一些新功能如今已经能够在Flink1.9.0版本里面看到了,也能看出Flink社区的效率和执行力都是非常高的。

二、Flink 1.9.0的重点改动和新功能

这部分将为大家介绍Flink 1.9.0的重点改动和新功能。

架构升级

整体而言,如果一个软件系统引入了较大的改动,那基本上是架构升级带来的,对于Flink而言也不例外。想必熟悉Flink的同学对于下图中左侧的架构图一定不会陌生,在Flink的分布式流式执行引擎之上有一整套相对独立的DataStream API和DataSet API,它们分别负责流计算作业和批处理作业。在此基础之上Flink还提供了一个流批统一的Table API和SQL,用户可以使用相同的Table API或者SQL来描述流计算作业和批处理作业,只需要在运行时告诉Flink引擎以流模式运行还是以批模式运行即可,Table层将会把作业优化成为DataStream作业或者DataSet作业。但是Flink 1.8版本的架构存在一些弊端,那就是DataStream和DataSet在底层共享的代码并不多。其次,两者的API也不同,因此就会导致上层重复开发的工作量比较大,长期来看就会使得Flink的开发和维护成本越来越大。

image.png

基于上述问题,Blink在架构上进行了一些先行的探索,经过和社区密切的讨论之后确定了Flink未来的架构路线。也就是在Flink未来的版本中,DataSet的API会被完全移除掉,SteamTransformation会作为底层的API来描述批作业和流作业,Table API和SQL会将流作业和批作业都翻译到SteamTransformation上。除此之外在Flink 1.9中为了不影响之前版本用户的体验,还需要一种能够让新旧架构并存的方案。基于这个目的,Flink的社区开发人员也做了一系列努力,提出了上图中右侧的Flink 1.9架构设计,将API和实现部分做了模块的拆分,并且提出了一个Planner接口,能够支持不同的Planner具体实现。 Planner的具体工作就是优化和翻译成物理执行图等,也就是架构图中间Query Processor所做的工作。Flink将原本的实现全部移动到了Flink Query Processor中,将对接新架构的从Blink Merge过来的功能都放到了Blink Query Processor。这样就能够实现一举两得,不仅能够使得Table模块拆分之后变得更加清晰,更重要的是也不会影响老版本用户的体验,同时能够使得用户享受到Blink的新功能和优化。

Table API & SQL 重构和新功能

在Table API & SQL 重构和新功能部分,Flink在1.9.0版本中也Merge了大量从Blink中增加的SQL功能。这些新功能都是在阿里巴巴内部经过千锤百炼而沉淀出来的,相信能够使得Flink更上一层台阶。这里挑选了一些比较重要的成果为大家介绍,比如对于SQL DDL的支持,重构了类型系统,高效流式的TopN,高效流式去重,社区关注已久的维表关联,对于MinBatch以及多种解热点手段的支持,完整的批处理支持,Python Table API以及Hive的集成。接下来也会简单介绍下这些新功能。

image.png

SQL DDL:在以前如果要注册一个Source或者Table Sink,必须要通过Java、Scala等代码或者配置文件进行注册,而在Flink 1.9版本中则支持了SQL DDL的语法直接去注册或者删除表。

image.png

重构类型系统:在Flink 1.9版本中实现了一套全新的数据类型系统,这套全新的类型系统与SQL标准进行了完全对齐,能够支持更加丰富的类型。这套全新的类型系统也为未来Flink SQL能够支持更加完备和完善的功能打下了坚实的基础。

image.png

TopN:在Flink 1.9版本提供强大的流处理能力以及社区期待已久的TopN来实时计算排行榜,比如能够实时计算销量前十的店铺。

image.png

高效流式去重:在现实的生产系统中,很多ETL作业或者任务没有做到端到端的一致性,这就导致明细层可能存在重复数据,这些数据交给汇总层做汇总时就会造成指标偏大,进而多计算了一些值,因此在进入汇总层之前往往都会做一个去重,这里引入了一个流计算中比较高效的去重功能,能够以比较低的代价来过滤重复的数据。

维表关联:能够实时地关联MySQL、HBase、Hive表中数据。

MinBatch&多种解热点手段:在性能优化方面,Flink 1.9版本也提供了一些性能优化的手段,比如提升吞吐的MinBatch的优化以及多种解热点手段。

image.png

完整的批处理支持:Flink 1.9版本具有完整的批处理支持,目前支持 TPC-H 所有的 query。在下一个版本中也会继续投入力量来支持TPC-DS达到开箱即用的高性能。

image.png

Python Table API:在Flink 1.9版本中也引入了Python Table API,这也是Flink在多语言方向的有一个重大进步。能够让Python用户也能轻松地玩转Table API 和Flink SQL。

image.png

Hive集成:Hive是Hadoop生态圈中不可忽视的重要力量,为了更好地推广Flink批处理的功能,与Hive进行集成也是必不可少的。很高兴,在Flink 1.9版本中迎来了两位Hive的PMC来推动集成工作。而首先需要解决的就是Flink如何读取Hive数据的问题,目前Flink已经完整打通了对于Hive MetaStore的访问,Flink可以直接去访问Hive MetaStore中的数据,同时反过来Flink也可以将其表的元信息直接存储到Hive MetaStore里面,同时我们也增加了Hive的Connector支持CSV、Parquet、ORC等格式,用户只需要配置Hive MetaStore就能够在Flink中直接读取。在此基础之上,Flink 1.9版本还增加了Hive自定义函数的兼容,Hive的自定义函数都能够在Flink SQL里面直接运行。

image.png

批处理改进:细粒度批作业恢复(FLIP-1)
Flink 1.9版本在批处理部分也做了较多的改进,首要的就是细粒度批作业的恢复。这个优化点在很早之前就被提出来了,而在1.9版本里终于将未完成的功能实现了收尾。在Flink 1.9版本中,如果批处理的作业有错误发生,Flink会首先计算这个错误影响的范围,这称为Failover Region,因为在批处理作业中有一些节点需要通过Pipeline的形式进行数据传输,而其他的节点可以通过Blocking的方式先把数据存储下来,下游再去读取存储下来的数据,如果算子的输出已经进行了完整的保存,那就没有必要将这个算子重新拉起来运行了,这样就使得错误恢复被控制在一个相对较小的范围里面。如果再极端一点,在每个数据Shuffle的地方都进行数据落盘,这就和MapReduce和 Spark 的行为比较类似了,不过Flink支持更加高级的用法,用户可以自行控制每个Shuffle的地方通过网络进行直连还是通过文件落盘的方式进行传输,这也是Flink的一个核心不同点。

image.png

有了文件Shuffle之后,大家也会想是否能够将这个功能插件化,使其能够将文件Shuffle到其他地方,目前社区也在针对于这个方向做相应的努力,比如可以用Yarn做Shuffle的实现或者做一个分布式服务对于文件进行Shuffle。在阿里内部已经实现了这种架构,实现了单作业处理百TB级别的作业。当Flink具备这种插件化机制以后,就能够轻松地对接更加高效和灵活的Shuffle,让Shuffle这个批处理里面老大难的问题得到较好的解决。

流处理改进:State Processor API(FLIP-43)
流处理一直都是Flink的核心,所以在Flink 1.9版本里面也在流处理方面提出了很多改进,增加了一个非常实用的功能叫做Sate Processor API,其能够帮助用户直接访问Flink中存储的State,API能够帮助用户非常方便地读取、修改甚至重建整个State。这个功能的强大之处在于几个方面,第一个就是灵活地读取外部的数据,比如从一个数据库中读取自主地构建Savepoint,解决作业冷启动问题,这样就不用从N天前开始重跑整个数据。

image.png

此外,借助State Processor API,用户可以直接分析State中的数据,因为这部分数据在之前一直属于黑盒,这里面存储的数据是对是错,是否存在异常用户都无从得知,当有了State Processor API之后,用户就可以像分析普通数据一样来分析State数据,进而检测异常和分析故障。第三点就是对于脏数据的订正,比如有一条脏数据污染了State,就可以用State Processor API对于状态进行修复和订正。最后一点就是状态迁移,但用户修改了作业逻辑,还想要复用原来作业中大部分的State,或者想要升级这个State的结构就可以用这个API来完成相应的工作。在流处理面很多常见的工作和问题都可以通过Flink 1.9版本里面提供的State Processor API解决,因此也可以看出这个API的应用前景是非常广泛的。

重构的Web UI
除了上述功能的改进之外,Flink 1.9.0还提供了如下图所示的焕然一新的Web UI。这个最新的前端UI由专业Web前端工程师操刀,采用了最新的AngularJS进行重构。可以看出最新的Web UI非常的清新和现代化,也算是Apache开源软件里面自带UI的一股清流。

image.png

三、总结

Flink 1.9.0回顾

经过紧锣密鼓的开发,Flink 1.9.0不仅迎来了众多的中国开发者,贡献了海量的代码,也带来了很多的用户。从下图可以看出,无论是从解决issue数量还是从代码commit数量上来看,Flink 1.9.0版本超过了之前两个版本的总和。从代码修改行数来看,Flink 1.9.0达到了150万行,是之前版本的代码修改行数的大约6倍,可以说Flink 1.9.0是Flink开源以来开发者最为活跃的一个版本。从Contributor数量上也可以看出,Flink也吸引了越来越多的贡献者,并且其中很多的贡献者都来自于中国。此外,根据Apache官方所发布的开源项目活跃指标来看,Flink的各项指标也都名列前茅。

image.png

从这一切都能够看出,Flink 1.9.0是一个良好的开端,在未来无论是Flink的功能还是生态都会变得越来越好。我们也由衷地希望更多的开发者能够加入Flink开发社区,一起将Flink做的越来越好。

另外预告一下在今年11月28日到30日将会在北京召开全球最大的Apache Flink官方会议,届时将会有两千余名开发人员参加,希望大家可以关注一下。

image.png

此外,Apache Flink极客挑战赛正在举办中,感兴趣的同学可以关注。

image.png

阿里云开发者社区整理

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
4月前
|
SQL 运维 关系型数据库
|
SQL 数据处理 Apache
[1.2.0新功能系列:一] Apache Doris 1.2.0 版本 Light Schema Change
[1.2.0新功能系列:一] Apache Doris 1.2.0 版本 Light Schema Change
197 0
|
SQL Java Apache
[1.2.0新功能系列:三]Apache doris 1.2.0 Java UDF 函数开发及使用
[1.2.0新功能系列:三]Apache doris 1.2.0 Java UDF 函数开发及使用
188 0
|
Java 关系型数据库 MySQL
[1.2.0新功能系列:二] Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog
[1.2.0新功能系列:二] Apache Doris 1.2.0 JDBC外表 及 Mutil Catalog
169 0
|
存储 消息中间件 SQL
|
SQL 消息中间件 关系型数据库
Flink SQL 1.11 新功能与最佳实践
旨在帮助用户快速了解新版本 Table & SQL 在 Connectivity 和 Simplicity 等方面的优化及实际开发使用的最佳实践。
Flink SQL 1.11 新功能与最佳实践
|
存储 SQL API
【对话科技】Flink技术介绍和新功能展望
2017年6月22号,由“京城学堂”和阿里巴巴集团技术发展部主办的“对话科技”系列讲座邀请到了Apache Flink项目的PMC成员,来自德国DataArtisans公司的Till Rohrmann,在北京阿里中心为关注实时计算技术的阿里同学做了一场关于Apache Flink技术发展的精彩分享。
|
2月前
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。
|
4天前
|
存储 分布式计算 流计算
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
本文介绍了阿里云开源大数据团队在实时计算领域的最新成果——向量化流计算引擎Flash。文章主要内容包括:Apache Flink 成为业界流计算标准、Flash 核心技术解读、性能测试数据以及在阿里巴巴集团的落地效果。Flash 是一款完全兼容 Apache Flink 的新一代流计算引擎,通过向量化技术和 C++ 实现,大幅提升了性能和成本效益。
469 8
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
|
3月前
|
SQL 消息中间件 Kafka
实时计算 Flink版产品使用问题之如何在EMR-Flink的Flink SOL中针对source表单独设置并行度
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多