Apache Flink 1.17

news2024/12/26 12:06:37

Apache Flink 1.17

  • 1. Flink 1.17 Overview
  • 2. Flink 1.17 Overall Story
  • 3. Flink 1.17 Key Features
  • 4. Summary
  • 5. Q&A


1. Flink 1.17 Overview

在这里插入图片描述
Flink 1.17 版本完成了 7 个 FLIP,累计贡献者 170+,解决 600+Issue 以及 1100+Commits,整体来看是一个较大的版本。
在这里插入图片描述
从 Issue 分布来看,1.17 版本主要在 Runtime 层面以及 Table 层面做了较多改进,其中 Runtime 层面约170+Issue,Table 层面约 120个。另外,在 Checkpoint & State、API、Connector 层面也做了诸多提升与改进。
在这里插入图片描述
1.17 版本完成的 FLIP 如上图所示,分别为:

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

  • FLIP-265:将 Scala的 API 支持标记为 deprecated, Flink 里的 API 有 Scala 与 Java 两套,随着社区的不断发展与演进,Scala API 出现了各种问题,比如Scala版本升级困难,在 Flink 1.15 里,从 Scala2.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 BatchScheduler,但它不是默认调度器,而1.17 版本将设置为默认调度器。

2. Flink 1.17 Overall Story

Flink 1.17 版本向 Streaming Warehouse 迈进了一大步。
在这里插入图片描述
如图所示,Flink 在从 Streaming Processing 到 Streaming Warehouse 迈进后,我们不再需要批处理的链路,也不用拆分流处理的链路,批处理和流处理链路是统一的、流批一体的。

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

该架构的优势在于,不再需要两套系统,架构更简洁。同时,将离线与实时整合在一起,只需一份存储,成本更低,通过 Flink SQL 流批一体的引擎做加工,语义和数据均可保持一致。垂直方向上,每一层数据实时可查,架构透明开放。
在这里插入图片描述
为了更好地向流式数仓迈进,我们在 Batch 方面做了很多增强。

  • Streaming Warehouse:引入了 Delete 与 Update API,同时提供了 add/modify/drop列,主键以及Watermark 语法。
  • Batch 性能优化块:预测执行、自适应 Batch 调度器、混合 Shuffle 模式以及 Join-reorder 算法。
  • 提交工具:SQL Client 支持了 Gateway 模式,支持通过 SQL 语句管理 Flink 作业。

在这里插入图片描述
Streaming 性能也在不断演进:

  • Streaming SQL 语义增强:修复了非确定性操作导致的 PLAN 错误,引入了 PLAN ADVICE 提供 SQL的优化建议以及错误的 warning,完善了 Watermark 对齐。
  • Checkpoint 改进:提出通用的增量 Checkpoint,主要实现了速度以及稳定性的提升。同时,Unaligned Checkpoint 实现了生产可用。
  • Statebackend 升级:将 FRocksDB 的版本做了升级,带来了更多 Feature,支持 Apple 的芯片组,比如 Mac M1。

3. Flink 1.17 Key Features

在这里插入图片描述
我们对 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 1.16 的 TPC-DS 性能提升 26%。
Flink 1.16 耗时接近 7000 秒,1.17 降为 5000+秒。上图可见,部分 Query 的性能提升十分明显,比如 Q58 从 150+秒降低至几十秒。
在这里插入图片描述
另外,我们对 Checkpoint 和 State 也做了很多改进。

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

在这里插入图片描述
另外,我们对GIC的稳定性也做了提升。如上图所示,红线代表开启了通用增量 Checkpoint 的耗时,耗时更短,毛刺更少,这说明 WordCount 与 Window 作业的稳定性均有显著提升。而如果不开启通用增量 Checkpoint,Window 的作业耗时可高达 400s,且极不稳定。
在这里插入图片描述
用户写了一个 SQL Query 之后,可能在这个 Query 里有双流 Join,有聚合,有维表关联等等。那么,如何判断一个 Query 是否有问题呢?

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

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

在这里插入图片描述
除了 PLAN 正确性建议,PLAN_ADVIC 也会提供 SQL 优化建议。如上图所示,PLAN_ADVIC 建议开启 local global 两阶段聚合来提升 SQL 的性能。
在这里插入图片描述
作业监控方面,Flink 1.17 将火焰图细化至 Task 级别,这对线上作业调优、问题定位提供了更多帮助,比如可以查看每个 Task 线程的耗时分布明细等。

4. Summary

在这里插入图片描述
总体来说,Flink 1.17 的工作主要包含以下五个方面:

  • 为了更好地迈向 Streaming Warehouse,陆续提出了相关 Streaming Warehouse API。
  • 对 Batch重点优化了性能以及提升稳定性。
  • 对 Streaming SQL 的语义做了增强与完善。
  • Checkpoint的速度与稳定性都有了进一步提升。
  • 对 SQL Client 以及 Gateway 工具做了进一步扩展。

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

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

  • Streaming Warehouse API 补齐。
  • Batch 性能的优化以及生态的扩展。
  • Streaming SQL的语义以及易用性改进。
  • 存算分离的 Checkpoint 的架构演进。

5. 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。

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

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

相关文章

ppt如何录屏?电脑怎么录制ppt文稿?

案例:在电脑上怎么录制PPT文稿,具体怎么操作? 【我工作的时候经常需要用到ppt文稿,有时还需要对PPT文稿进行录制,但我不知道如何操作。有小伙伴知道在电脑上如何录制ppt文稿吗?需要用到什么工具&#xff1…

热水器语音芯片,带有温度检测算法、数码管显示语音ic,WTV380

在现代科技不断进步的时代,智能家居产品成为越来越多消费者的选择,在热水器行业为了提供更智能、便捷的用户交互体验,一款带有数码管显示语音提示二合一,多功能语音芯片方案 —— WTV380 WTV380能够实现语音播报热水器的各种信息…

学PCB设计要精通模电吗?

PCB设计是电子工程师在电路设计领域中的重要一环,而模拟电路设计(简称:模电)是其中的核心内容之一,很多小白在初学PCB设计都会困惑,学PCB设计是否要精通模电?这篇文或许能解惑,本文将…

【LeetCode热题100】打卡第16天:组合总和

文章目录 组合总和⛅前言🔒题目🔑题解 组合总和 ⛅前言 大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数…

Vue.js 中的 $router 和 $route

Vue.js 中的 $router 和 $route 在 Vue.js 中,$router 和 $route 是两个常用的对象,用于处理路由相关的操作。在本文中,我们将介绍 $router 和 $route 的区别,并且演示如何使用它们。 $router 和 $route 的区别 在 Vue.js 中&am…

Windows 下挂载使用 CephFS

一、Ceph集群搭建和CephFS创建 参考上期文章 Centos stream 8 使用 cephadm 安装 Ceph (17.2.6 quincy)集群_阿波罗.2012的博客-CSDN博客 二、将CephFS挂载到Windows Server 2019下 1、准备Dokany 下载地址:Release 1.5.1.1000 dokan-dev/dokany GitHub 下载…

【数据分享】1929-2022年全球站点的逐年平均降水量(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,说到常用的降水数据,最详细的降水数据是具体到气象监测站点的降水数据! 之前我们分享过1929-2022年全球气象站点的逐年平均气温数据、逐年最高…

实用工具篇(三):一款 IntelliJ IDEA 神级插件Bito

目录 1、什么是Bito 2、为什么要使用Bito 3、如何安装Bito插件 4、如何使用Bito插件 1、什么是Bito Bito是一款在IntelliJ IDEA编辑器中的插件,Bito插件是由ChatGPT团队开发的,它是ChatGPT团队为了提高开发效率而开发的一款工具。 Bito插件的强大…

Clion开发STM32之ESP8266系列(一)

系列开篇说明 结合个人的开发经验以及实际情况,分享stm32结合esp8266的一个开发项目。从0开始构建项目程序。为了方便记录项目开发记录,此系列的每个篇章都在git上做一个节点。此系列也是作为一个个人的开发思路和经验本次开发选用的芯片为stm32f103vet…

GIT安装教程(入门)

目录 前言 Git作者 官网 GIT优点 GIT缺点 为什么要使用 Git 下载以及安装步骤 一、官网下载 二、GIT安装步骤 GIT习题 习题一 总结 前言 Git 是一个分布式版本控制及源代码管理工具;Git 可以为你的项目保存若干快照,以此来对整个项目进行版本管理 Git作…

lan区段

LAN区段相当于说模拟出一个交换机或者集线器出来,把不同虚拟机连接起来,与物理机不进行数据交流,与外网也不进行数据交流,构建一个独立的网络。没有DHCP功能,需要手工配置IP或者单独配置DHCP服务器。

AG-Grid JavaScript 29.3.5 企业版 注册版

世界上最好的 JavaScript 网格 开发人员构建企业应用程序的专业选择 开始吧 Javascript 数据网格 Javascript 反应数据网格 反应 角度数据网格 有角的 Vue 数据网格 视图 实体数据网格 坚硬的 有很多基于组件的表库,但我相信 AG Grid 是黄金标准,也是我最…

抖音账号矩阵系统开发源码

技术自研框架开发背景: 抖音账号矩阵系统是一种基于数据分析和管理的全新平台,能够帮助用户更好地管理、扩展和营销抖音账号。 部分源码分享: //计算分页$active_list_all $Video_model->getCount($where);$page_libs new Libs_Pagin…

Mysql5.7.x镜像开启log-bin失效及解决

文章目录 [toc] 1.问题2.mysql5.7.16的部署及开启log-bin2.1 准备挂载目录2.2 启动容器命令2.3 开启log-bin配置文件内容 3.原因及解决办法4.了解binlog和redolog有什么区别?5.总结 1.问题 由于在本地搭建了一个数据同步的环境用到了mysql,所以用Docker的…

肠道健康从核心菌属开始:肠道菌群的关键

谷禾健康 5月29日,是世界肠道健康日。肠道是人体最重要的消化系统之一,与人体健康紧密相关。而肠道菌群作为肠道重要组成部分,在肠道健康中发挥着重要的作用。 编辑​ 由于基因、环境、饮食、药物等因素的影响,每个人的肠道菌群都…

前端VUE3+Vite +UniAPP-- 框架搭建

除了HBuilderX可视化界面,也可以使用 cli 脚手架,可以通过 vue-cli 创建 uni-app 项目。 全局安装 vue-cli 官网 npm install -g vue/cli npx degit dcloudio/uni-preset-vue#vite-ts vue3-uniapp配置tailwindcss插件 官网 npm install tailwindcss np…

揭秘阿里云Flink智能诊断利器——Fllink Job Advisor

引言 阿里云实时计算Flink作为一款专业级别的高性能实时大数据处理系统,它在各种业务场景中都发挥了关键的作用。丰富而复杂的上下游系统让它能够支撑实时数仓、实时风控、实时机器学习等多样化的应用场景。然而,随着系统的复杂性增加,用户在…

判断数的奇偶性

1 问题 如何用一个简单的程序判断一个数的奇偶性。 2 方法 import java.util.Scanner; public class HOMEWORK{ public static void main(String[] args){ System.out.println("请输入一个数"); int input new Scanner(System.in).nextInt(); if(input % 2 0){ Sys…

wsl下安装centenos7以及遇到问题报错解决

安装 ①CentenOs7-WSL 下载地址 https://github.com/yuk7/CentWSL ②解压下载的CentenOs7到自己想要安装的位置,解压的目录就是CentenOs的安装目录。刚开始是没有ext4.vhdx的,安装完成就出现了 ③安装完成,再次运行CentenOs.exe就可以使用了…

软件测试工程师如何从功能测试转成自动化测试

功能测试转成自动化测试,答案就三个字:“靠学习”。 学习自动化的方法无非是三种: 一、靠培训(下方有如何选择培训机构) 在相对有氛围的学习环境中来学习自动化测试,这是一个较快学习的方法。二、靠自学自…