深入解读 Flink 1.17

这篇具有很好参考价值的文章主要介绍了深入解读 Flink 1.17。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要:本文整理自阿里云技术专家,Apache Flink PMC Member & Committer、Flink CDC Maintainer 徐榜江(雪尽) 在深入解读 Flink 1.17 的分享。内容主要分为四个部分:

  1. Flink 1.17 Overview

  2. Flink 1.17 Overall Story

  3. Flink 1.17 Key Features

  4. Summary

一、Flink 1.17 Overview

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

Flink 1.17 版本完成了 7 个 FLIP,累计贡献者 170+,解决 600+Issue 以及 1100+Commits,整体来看是一个较大的版本。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

从 Issue 分布来看,1.17 版本主要在 Runtime 层面以及 Table 层面做了较多改进,其中 Runtime 层面约170+Issue,Table 层面约 120个。另外,在 Checkpoint & State、API、Connector 层面也做了诸多提升与改进。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

1.17 版本完成的 FLIP 如上图所示,分别为:

  • FLIP-256:扩展了 Rest API 支持提交作业时指定参数,与 Flink CLI 基本对齐。

  • FLIP-265:将 Scala 的 API 支持标记为 deprecated, Flink 里的 API 有 Scala 与 Java 两套, 随着社区的不断发展与演进,Scala API 出现了各种问题,比如Scala版本升级困难,在 Flink 1.15 里,从 Scala 2.12.7 升级到 2.12.15 必须做出兼容性破坏的改造;另一方面,Java API 比 Scala API 在社区演进更快一些,前者的 Feature 会更多; 再加之社区比较缺少熟悉 Scala 技术栈的 Contributor,因此社区决定将 Scala 的 API 慢慢移除,更专注于 Java API。

  • FLIP-266:对 TM 的网络层配置做了很多简化,新增了多个核心特性,提高了 Runtime 层面网络的开箱即用,用户做更少的配置即可获得较好的作业优化效果。

  • FLIP-280:在 SQL 层面引入了 PLAN ADVICE 功能,帮助用户检查 PLAN 的正确性以及对 SQL 做优化,比如聚合是否应该拆分、非确定性的列导致不正确性的问题等,并提示用户改写和优化 SQL。

  • FLIP-281:Sink 对于 Batch 作业支持了预测执行。预测执行主要分为三个 FLIP 来逐步实现,第一个 FLIP 支持作业链路中除 Source、Sink 之外的算子,第二个 FLIP 支持了 Source 算子, FLIP-281是最后一个 FLIP,支持了 Sink 算子。Sink 算子比较特殊,在 Flink 作业的拓扑里,它会 flush 数据到外部系统,需要写入数据,多个 Task 协同外部系统的执行对于数据的一致性会带来较大挑战。而 FLIP-281 支持了 Sink 的预测执行之后,Batch 作业的全链路都支持了预测执行。

  • FLIP-282:引入了 Delete 和 Update API。在 Flink 从 Streaming Processing 到 Streaming Warehouse 的演进中,需要为 Streaming Warehouse 定制一些 API,比如行级数据的 Delete 与 Update API,方便与其他Connector 的对接。

  • FLIP-283:将自适应的 Batch 调度器作为默认调度器。之前的 1.16 版本已经推出 Adaptive Batch Scheduler,但它不是默认调度器,而 1.17 版本将设置为默认调度器。

二、Flink 1.17 Overall Story

Flink 1.17 版本向 Streaming Warehouse 迈进了一大步。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

如图所示,Flink 在从 Streaming Processing 到 Streaming Warehouse 迈进后,我们不再需要批处理的链路,也不用拆分流处理的链路,批处理和流处理链路是统一的、流批一体的。

数据在数仓的每一层之间都通过 Flink 进行实时的流动,并且每一层数据实时可查,可以通过其他引擎查询湖存储里的数据,湖存储可以是 Paimon(从 Flink Table Store 子项目孵化出的 Apache 项目),也可以是 Hudi 等,提供了真正的流式服务。

该架构的优势在于,不再需要两套系统,架构更简洁。同时,将离线与实时整合在一起,只需一份存储,成本更低,通过 Flink SQL 流批一体的引擎做加工,语义和数据均可保持一致。垂直方向上,每一层数据实时可查,架构透明开放。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

为了更好地向流式数仓迈进,我们在 Batch 方面做了很多增强。

  • Streaming Warehouse:引入了 Delete 与 Update API,同时提供了 add/modify/drop 列,主键以及Watermark 语法。

  • Batch 性能优化块:预测执行、自适应 Batch 调度器、混合 Shuffle 模式以及 Join-reorder 算法。

  • 提交工具:SQL Client 支持了 Gateway 模式,支持通过 SQL 语句管理 Flink 作业。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

Streaming 性能也在不断演进。

  • Streaming SQL 语义增强:修复了非确定性操作导致的 PLAN 错误,引入了 PLAN ADVICE 提供 SQL 的优化建议以及错误的 warning,完善了 Watermark 对齐。

  • Checkpoint 改进:提出通用的增量 Checkpoint,主要实现了速度以及稳定性的提升。同时,Unaligned Checkpoint 实现了生产可用。

  • Statebackend 升级:将 FRocksDB 的版本做了升级,带来了更多 Feature,支持 Apple 的芯片组,比如 Mac M1。

三、Flink 1.17 Key Features

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

我们对 Batch 做了端到端的性能优化,涵盖了 SQL 的 PLAN、Runtime 算子、调度全流程。

  • Runtime 的预测执行:支持了 Sink 算子,同时改进了慢任务的检测,之前只考虑慢任务的执行时间,现在还考虑数据量。

  • 自适应 Batch 调度器:将自适应调度器作为默认调度器。调度器可以根据每个 Job 和节点处理的数据量自动设置并发,更智能。另外,做了配置简化,提升整体的易用性。

  • 混合 Shuffle:混合 Shuffle 是一种结合了 blocking 与 pipeline 优点提出的新的 Shuffle 模式。在 1.17 版本里支持了自定义 Batch 调度器、预测执行,同时支持重用中间数据,提升性能。另外,混合 Shuffle 模式在大规模生产环境下的稳定性得到进一步提升。

  • SQL 层面的优化:Planner 引入了动态规划的的 Join-reorder 算法,之前的 Join-reorder 算法优化出的 PLAN 树相当于是一棵偏左树,并发处理往往只有两路;而动态规划的 Join-reorder 算会使得 PLAN 树更平衡,并发也更高。在算子层面做了动态 local hash 聚合优化,通过 code 键实现,比如 count 聚合时,数据比较稀疏处可以直接跳过聚合,提升性能。同时,在算子上消除了部分虚函数的调用,使得性能进一步提升。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

经过上述各层的优化,Flink 1.17 整体相比 Flink 1.16 的 TPC-DS 性能提升 26%。

Flink 1.16 耗时接近 7000 秒,1.17 降为 5000+秒。上图可见,部分 Query 的性能提升十分明显,比如 Q58 从 150+秒降低至几十秒。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

另外,我们对 Checkpoint 和 State 也做了很多改进。

比如通用增量 Checkpoint(GIC)速度方面有了很大提升,在开启通用增量 Checkpoint 后,WordCount 与 Window 作业性能提升了 4.23 倍与 38.39 倍,WordCount 完成时间有接近 90%的减少,Window 作业的 Checkpoint 耗时从 130s 降至 1.58s。

对于流作业而言,开启通用增量 Checkpoint 后,速度和稳定性都得到了质的提升。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

另外,我们对GIC的稳定性也做了提升。如上图所示,红线代表开启了通用增量 Checkpoint 的耗时,耗时更短,毛刺更少,这说明 WordCount 与 Window 作业的稳定性均有显著提升。而如果不开启通用增量 Checkpoint,Window 的作业耗时可高达 400s,且极不稳定。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

用户写了一个 SQL Query 之后,可能在这个 Query 里有双流 Join,有聚合,有维表关联等等。那么,如何判断一个 Query 是否有问题呢?

为此,我们提供了 PLAN ADVICE 功能,在执行 Explain 语句时候支持 PLAN_ADVICE 选项。比如,在执行 Query 之前可以先做一次 Explain,得到一些建议。

如上图,告警信息提示 current_timestamp 是一个非确定性函数,源表的数据是 Changelog 流,因为源表和结果表的主键不一致,会生成一个 SinkUpsertMaterializer 算子来在 state 中物化输入并输出正确的结果给 Sink,但 SinkUpsertMaterializer 节点要求输入不能有非确定性更新,用户使用 PLAN_ADVIC 就会获得对应的建议,避免这类正确性问题。此外,社区也在计划让 SinkUpsertMaterializer 支持 upsertKey 模式,在后续的版本中可以在框架侧解决这个问题。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

除了 PLAN 正确性建议,PLAN_ADVIC 也会提供 SQL 优化建议。 如上图所示,PLAN_ADVIC 建议开启 local global 两阶段聚合来提升 SQL 的性能。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

作业监控方面,Flink 1.17 将火焰图细化至 Task 级别,这对线上作业调优、问题定位提供了更多帮助,比如可以查看每个 Task 线程的耗时分布明细等。

四、Summary

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

总体来说,Flink 1.17 的工作主要包含以下五个方面:

  1. 为了更好地迈向 Streaming Warehouse,陆续提出了相关 Streaming Warehouse API。

  2. 对 Batch 重点优化了性能以及提升稳定性。

  3. 对 Streaming SQL 的语义做了增强与完善。

  4. Checkpoint 的速度与稳定性都有了进一步提升。

  5. 对 SQL Client 以及 Gateway 工具做了进一步扩展。

深入解读 Flink 1.17,Flink,大数据,实时计算,flink,大数据,scala,java,开发语言

Flink 1.18 的工作已经开启,Feature Freeze 预计在 7 月 11 号,Release 预计在 9 月底。用户可以点击此处,关注具体的 Feature 与 FLIP 进展。

Flink 1.18 的重点工作将会从以下四个方向展开:

  1. Streaming Warehouse API 补齐。

  2. Batch 性能的优化以及生态的扩展。

  3. Streaming SQL 的语义以及易用性改进。

  4. 存算分离的 Checkpoint 的架构演进。

Q&A

Q:Flink CDC 支持 Delta Lake 吗?

A:Flink CDC 主要是 Source,Delta Lake 是 Sink 写入,CDC 捕获的数据可以写入到 Flink 支持的下游,Delta Lake 也是可以的。

Q:新版本在批处理性能上的优化,场景应用上可以有哪些提升?

A:都是普适的性能优化,能够提升 Batch 作业的性能和稳定性。

Q:实时大宽表实现有方法吗?比如十个流的 Join,无时间窗口。

A:可以做多流 Join 配合各个流的更新策略配置不同的 State TTL。

Q:Flink 支持 es 跟 clickhouse 嘛?

A:支持这两种数据源的。

Q:事实表 Left Join 多个维度表的时候,有没有什么有效的优化可以减少 State 大小和降低 Latency?

A:SQL 优化比如过滤前移,设置算子级别的 State TTL(1.18 会支持)。

Q:codegen 都用在哪些场景的优化上了?

A:一些 SQL 算子,UDF,SQL 表达式都用到了 codegen 技术

Q:Flink 资源动态扩缩可以用嘛?比如高峰多用资源,低峰自动把资源还 yarn。

A:可以了解下 Flink 的 K8s operator。

查看直播回放文章来源地址https://www.toymoban.com/news/detail-582214.html

到了这里,关于深入解读 Flink 1.17的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Flink-1.17-教程】-【四】Flink DataStream API(5)转换算子(Transformation)【分流】

    所谓 “分流” ,就是将一条数据流拆分成完全独立的两条、甚至多条流。也就是基于一个 DataStream ,定义一些筛选条件,将符合条件的数据拣选出来放到对应的流里。 其实根据条件筛选数据的需求,本身非常容易实现:只要针对同一条流多次独立调用 .filter() 方法进行筛选

    2024年01月24日
    浏览(46)
  • 【Flink-1.17-教程】-【四】Flink DataStream API(2)转换算子(Transformation)【基本转换算子、聚合算子】

    数据源读入数据之后,我们就可以使用各种转换算子,将一个或多个 DataStream 转换为新的 DataStream。 map 是大家非常熟悉的大数据操作算子,主要用于将数据流中的数据进行转换,形成新的数据流。简单来说,就是一个 “一 一映射”,消费一个元素就产出一个元素 。 我们只

    2024年01月23日
    浏览(48)
  • 【Flink-1.17-教程】-【四】Flink DataStream API(3)转换算子(Transformation)【用户自定义函数(UDF)】

    用户自定义函数( user-defined function , UDF ),即用户可以根据自身需求,重新实现算子的逻辑。 用户自定义函数分为: 函数类 、 匿名函数 、 富函数类 。 Flink 暴露了所有 UDF 函数的接口,具体实现方式为接口或者抽象类,例如 MapFunction 、 FilterFunction 、 ReduceFunction 等。所

    2024年01月23日
    浏览(46)
  • Flink CDC 3.0 正式发布,详细解读新一代实时数据集成框架

    Flink CDC 是基于数据库日志 CDC(Change Data Capture)技术的实时数据集成框架,支持了全增量一体化、无锁读取、并行读取、表结构变更自动同步、分布式架构等高级特性。配合 Flink 优秀的管道能力和丰富的上下游生态,Flink CDC 可以高效实现海量数据的实时集成。Flink CDC 社区发

    2024年02月04日
    浏览(51)
  • 大数据Flink实时计算技术

    1、架构 2、应用场景 Flink 功能强大,支持开发和运行多种不同种类的应用程序。它的主要特性包括:批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。在启用高可用选项的情况下,它不存在单点失效问题。事实证明,Flink 已经可以扩展到数千核

    2024年02月10日
    浏览(53)
  • 【大数据-实时流计算】图文详解 Apache Flink 架构原理

    目录 Apache Flink架构介绍 一、Flink组件栈 二、Flink运行时架构 在Flink的整个

    2024年02月02日
    浏览(41)
  • 流批一体计算引擎-4-[Flink]消费kafka实时数据

    Python3.6.9 Flink 1.15.2消费Kafaka Topic PyFlink基础应用之kafka 通过PyFlink作业处理Kafka数据 PyFlink需要特定的Python版本,Python 3.6, 3.7, 3.8 or 3.9。 1.3.1 python3和pip3的配置 一、系统中安装了多个版本的python3 。 二、环境变量path作用顺序 三、安装Pyflink 1.3.2 配置Flink Kafka连接 (1)在https://mvnr

    2024年02月06日
    浏览(41)
  • 【天衍系列 04】深入理解Flink的ElasticsearchSink组件:实时数据流如何无缝地流向Elasticsearch

    Flink的Elasticsearch Sink是用于将Flink数据流(DataStream)中的数据发送到Elasticsearch的组件。它是Flink的一个连接器(Connector),用于实现将实时处理的结果或数据持续地写入Elasticsearch集群中的索引中。 下面是一些关于Flink的Elasticsearch Sink的基础概念: 数据源(Source) :Flink数据流

    2024年02月20日
    浏览(50)
  • 大数据职业技能大赛样题(数据采集与实时计算:使用Flink处理Kafka中的数据)

           编写Scala代码,使用Flink消费Kafka中Topic为order的数据并进行相应的数据统计计算(订单信息对应表结构order_info,订单详细信息对应表结构order_detail(来源类型和来源编号这两个字段不考虑,所以在实时数据中不会出现),同时计算中使用order_info或order_detail表中create_ti

    2024年03月24日
    浏览(52)
  • OceanBase X Flink 基于原生分布式数据库构建实时计算解决方案

    摘要:本文整理自 OceanBase 架构师周跃跃,在 Flink Forward Asia 2022 实时湖仓专场的分享。本篇内容主要分为四个部分: 分布式数据库 OceanBase 关键技术解读 生态对接以及典型应用场景 OceanBase X Flink 在游戏行业实践 未来展望 点击查看原文视频 演讲PPT 作为一款历经 12 年的纯自研

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包