深入解读 Flink 1.17

news2025/1/11 17:11:17

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

    1. Flink 1.17 Overview

    2. Flink 1.17 Overall Story

    3. Flink 1.17 Key Features

    4. Summary

Tips:点击「阅读原文」查看原文视频


01

Flink 1.17 Overview

63ac232596ebcc8c898b688bbf41d5ea.jpeg

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

2f9b27acfa4aca7998830b75bf926dd7.jpeg

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

66a6366961fd364b448bcd8ec30f5a46.jpeg

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 版本将设置为默认调度器。

02

Flink 1.17 Overall Story

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

4d12c2eb2242acbc6e4cf72637bd7a00.jpeg

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

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

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

4796194776701bf253f6c2b0aeab1fed.jpeg

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

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

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

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

e470c7e80f20e9b9d0b819fbc53805cf.jpeg

Streaming 性能也在不断演进:

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

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

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

03

Flink 1.17 Key Features

e1f2ba4ff87ab1eb0a4a03500b067005.jpeg

我们对 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 聚合时,数据比较稀疏处可以直接跳过聚合,提升性能。同时,在算子上消除了部分虚函数的调用,使得性能进一步提升。

bd54624677e3835e1de0bc933661d35d.jpeg

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

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

a827e89b72fa29822c793117c5cf4029.jpeg

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

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

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

30cb28b9e2011d5c571e14ff0e1c511d.png

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

5cfed7f4e163e3e3a9bc6afd03945ee1.jpeg

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

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

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

860bed331c3576211f0a72e50b187fde.jpeg

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

584ca75c502d7d597959aa10920c6941.jpeg

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

04

Summary

a9e8b9d93f704cde55ed63f0e41be474.jpeg

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

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

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

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

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

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

a54c439265713be98444a7a0d91f951d.jpeg

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

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

  • Streaming Warehouse API 补齐。

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

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

  • 存算分离的 Checkpoint 的架构演进。

Q&A

Q:Flink CDC 支持 Delta Lake 吗?

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

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

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

Q:混合 Shuffle 模式改进对生产环境有什么影响?

A:可以结合自己的业务场景和已有机器资源,提供用户更灵活的选择。

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。

往期精选

b08144a763496d157e14aa9cd9d6a5f4.png

699a15bb0a006ec30a8df64a754eea3e.jpeg

a768f761f38bca25be3027e4d1ce88a4.jpeg

1a2bf1f66f18deb34a4d82c460b2c8d2.png

513c75c972b01ab77888f24ac55644bf.jpeg


▼ 精彩直播回顾▼

6d03b08718cb6701583f04ee9231c49b.png

▼ 关注「Apache Flink」,获取更多技术干货 ▼

1024838bd23dcfbd94ae2cc84afae381.png

 530d952c9bb18845d987c432dc77fe02.gif  点击「阅读原文」,查看原文视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566095.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这可能是最全面的Java学习路线了

大家好,我是大彬~ 我本科学的不是计算机,大四开始自学Java,并且拿到了几个互联网中大厂的offer。在学习Java这方面还是比较有经验的,下面我来分享下我整理的Java自学路线。 在这里也提醒学弟学妹们,要尽早确定以后的…

自动化Jenkins管理?使用python-jenkins管理Jenkins

点击上方蓝字⭐️关注“DevOps云学堂”,接收最新技术实践 今天是「DevOps云学堂」与你共同进步的第 26 天 如果这篇文章对您有帮助,欢迎转发点赞分享。您的关注是我持续分享的动力! 简介 本次我们将要学习JenkinsAPI接口,我们先用…

Scrapy数据爬取,Django+PyEcharts实现可视化大屏(附源码)

大家好,我是小F~ 最近有个小伙伴问我有没有基于Django的可视化大屏,小F就顺手找了一下。 于是便在GitHub上发现了一个不错的实战项目,基于qunaer长沙景点数据。 还是作者最近几天刚更新的,保真~ 项目地址: …

Rust每日一练(Leetday0010) 子串下标、两数相除、串联子串

目录 28. 找出字符串中第一个匹配项的下标 Find-the-index-of-the-first-occurrence-in-a-string 🌟🌟 29. 两数相除 Divide Two Integers 🌟🌟 30. 串联所有单词的子串 Substring-with-concatenation-of-all-words &#x…

FL Studio 21最新中文版本发布!原生插件、UI、操作优化全面更新!

FL Studio 21现已推出,提供更快、更精确的音频编辑,升级后的DAW为用户提供了更多的内容发现和改进的界面。 Image-Line发布了FL Studio 21,称其可以实现更快、更精确的音频编辑,以及对整个DAW的更多控制。 期待已久的DAW升级为用…

网络安全的学习路线是怎么样的?

在众多高大上的学习路线指导中,尝试做一股清流,把要讲清楚的都讲清楚,该学些什么,学到哪个程度进入到下一阶段的学习这些才是最重要的。 在学习之前首先要做好学习的系统规划: 1.目前市场需求主流的岗位里&#xff0…

苏州狮山广场能耗管理系统

摘要:随着社会生活水平的提高,经济的繁荣发展,人们对能源的需求逐渐增长,由此带来的能源危机日益严重。商场如何实时的了解、分析和控制商场的能源消耗已成为需要解决的迫在眉睫的难题。传统的能源消耗智能以月/季度/年为周期进行…

springboot+jsp+java高校实验室设备管理系统

本次程序软件的开发的目的就是让使用者可以通过使用该软件提高信息数据的管理效率,同时该程序软件也需要针对不同的操作用户设置对应的功能,因此,此程序的操作流程应该尽量与用户日常操作软件的行为习惯相贴合,另外,程…

国内开源的中文Docker管理工具,界面清爽,赞!

文章目录 一、docker.ui1、简介2、docker.ui安装3、启动效果 一、docker.ui 1、简介 一个用于docker容器和docker集群的可视化管理工具,您可以浏览和维护docker单节点或集群节点worker和Manager。 2、docker.ui安装 安装命令如下: docker run --name…

Selinux 安全上下文与端口控制

Selinux Selinux 的全称是Security Enhance Linux,就是安全加强的Linux。在Selinux之前root账号能够任意的访问所有文档和服务在selinux中,访问控制属性叫做安全上下文,所有客体(文件、进程间通讯通道、套接字、网络主机等&#…

创客匠人CEO蒋洪波:抓住抓住市场需求发展

拍手访谈创客匠人CEO蒋洪波:创客匠人是如何开始的?未来又将如何发展? 一、创客匠人知识付费是如何开始的? 1.从爱好出发 我本人喜欢做产品,或者说是喜欢研究产品。 得益于在研发产品上的一些天赋,我们产品…

第五十一天学习记录:C语言进阶:枚举和联合(共用体)

枚举顾名思义就是一一列举。 枚举的优点 我们可以使用#define定义常量,为什么非要使用枚举? 1、增加代码的可读性和可维护性 2、和#define定义的标识符比较枚举有类型检查,更加严谨 3、防止了命名污染(封装) 4、便于…

【Simulink】示波器图形数据导入Matlab重新绘图(论文)

版本:Matlab2019b 效果 示波器波形图片: 黑色背景,而且坐标轴字体较小,不方便修改,不能直接用在论文上面 对比 Matlab 绘图: 接下来介绍如何设置~ Simulink 设置 选择需要导入的示波器数据 点击 Vi…

termux-x11教程

小粉丝已经求稿两个星期了,不写是不行了。 termux-x11 是Termux的一个图形化项目,官方是这么介绍的。 A Termux add-on app providing Android frontend for Xwayland.安装工具 我们需要在Termux和安卓系统上安装工具以成功的运行程序。 x11-repo&am…

实现图片懒加载的5种方式

目录 1、懒加载介绍 2、实现懒加载技术的方案 3、具体实现代码 1、懒加载介绍 当页面需要展示大量图片时,如果一次性渲染所有图片,会向服务器发出大量请求,导致服务器响应慢,出现页面卡顿或崩溃等问题。采用懒加载技术只预先加…

渗透测试 | 指纹识别

0x00 免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担…

LC-3中断实验

一、实验目的 学会分析和理解给定的编程问题;掌握中断驱动的基本原理;掌握键盘数据寄存器(KBDR)及键盘状态寄存器(KBSR)工作基本原理;掌握输出数据寄存器(DDR)及输出状态寄存器(DSR…

Splunk安装配置

前言 Splunk 社区 ,包括白皮书,各类手册,资源下载,社区问答等 入门:Splunk 入门指南 | Splunk 手册:Splunk Enterprise - Splunk Documentation 资源下载:数据可视化工具Splunk Enterprise免费下载 | S…

chatgpt赋能python:Python对Word文档的支持——打造高效办公新选择

Python对Word文档的支持——打造高效办公新选择 在现代社会,文档处理和管理已成为各行各业不可或缺的一部分。在这个领域中,Word文档一直占据主导地位,成为了几乎所有企业和机构必备的工具。而Python作为一门众所周知的高效编程语言&#xf…

雅思口语话题准备(一)

目录 where are you from? 3.Will you live in the countryside in the future? 4.Have you learned the history of your hometown at school? Does your name have any particular(or special)meaning? 作为一个英语音标大师,请问ɒ和ɔ他们之间有…