Flink 1.14 新特性预览

简介: 一文了解 Flink 1.14 版本新特性及最新进展

本文由社区志愿者陈政羽整理,内容源自阿里巴巴技术专家宋辛童 (五藏) 在 8 月 7 日线上 Flink Meetup 分享的《Flink 1.14 新特性预览》。主要内容为:

  1. 简介
  2. 流批一体
  3. Checkpoint 机制
  4. 性能与效率
  5. Table / SQL / Python API
  6. 总结

此文章为 8 月 7 日的分享整理,1.14 版本最新进展采用注释的方式在文末进行说明。

一、简介

1.14 新版本原本规划有 35 个比较重要的新特性以及优化工作,目前已经有 26 个工作完成;5 个任务不确定是否能准时完成;另外 4 个特性由于时间或者本身设计上的原因,会放到后续版本完成。[1]

img

1.14 相对于历届版本来说,囊括的优化和新增功能点其实并不算多。其实通过观察发版的节奏可以发现,通常在 1-2 个大版本后都会发布一个变化稍微少一点的版本,主要目的是把一些特性稳定下来。

1.14 版本就是这样一个定位,我们称之为质量改进和维护的版本。这个版本预计 8 月 16 日停止新特性开发,可能在 9 月份能够和大家正式见面,有兴趣可以关注以下链接去跟踪功能发布进度。

  • Wiki:https://cwiki.apache.org/confluence/display/FLINK/1.14+Release
  • Jira:https://issues.apache.org/jira/projects/FLINK/versions/12349614

二、流批一体

流批一体其实从 Flink 1.9 版本开始就受到持续的关注,它作为社区 RoadMap 的重要组成部分,是大数据实时化必然的趋势。但是另一方面,传统离线的计算需求其实并不会被实时任务完全取代,而是会长期存在。

在实时和离线的需求同时存在的状态下,以往的流批独立技术方案存在着一些痛点,比如:

  • 需要维护两套系统,相应的就需要两组开发人员,人力的投入成本很高;
  • 另外,两套数据链路处理相似内容带来维护的风险性和冗余;
  • 最重要的一点是,如果流批使用的不是同一套数据处理系统,引擎本身差异可能会存在数据口径不一致的问题,从而导致业务数据存在一定的误差。这种误差对于大数据分析会有比较大的影响。

在这样的背景下,Flink 社区认定了实时离线一体化的技术路线是比较重要的技术趋势和方向。

Flink 在过去的几个版本中,在流批一体方面做了很多的工作。可以认为 Flink 在引擎层面,API 层面和算子的执行层面上做到了真正的流与批用同一套机制运行。但是在任务具体的执行模式上会有 2 种不同的模式:

  • 对于无限的数据流,统一采用了流的执行模式。流的执行模式指的是所有计算节点是通过 Pipeline 模式去连接的,Pipeline 是指上游和下游计算任务是同时运行的,随着上游不断产出数据,下游同时在不断消费数据。这种全 Pipeline 的执行方式可以:

    • 通过 eventTime 表示数据是什么时候产生的;
    • 通过 watermark 得知在哪个时间点,数据已经到达了;
    • 通过 state 来维护计算中间状态;
    • 通过 Checkpoint 做容错的处理。

    下图是不同的执行模式:

img

  • 对于有限的数据集有 2 种执行模式,我们可以把它看成一个有限的数据流去做处理,也可以把它看成批的执行模式。批的执行模式虽然也有 eventTime,但是对于 watermark 来说只支持正无穷。对数据和 state 排序后,它在任务的调度和 shuffle 上会有更多的选择。

    流批的执行模式是有区别的,最主要的就是批的执行模式会有落盘的中间过程,只有当前面任务执行完成,下游的任务才会触发,这个容错机制是通过 shuffle 进行容错的。

    这 2 者也各有各的执行优势:

    • 对于流的执行模式来说,它没有落盘的压力,同时容错是基于数据的分段,通过不断对数据进行打点 Checkpoint 去保证断点恢复;
    • 然而在批处理上,因为要经过 shuffle 落盘,所以对磁盘会有压力。但是因为数据是经过排序的,所以对批来说,后续的计算效率可能会有一定的提升。同时,在执行时候是经过分段去执行任务的,无需同时执行。在容错计算方面是根据 stage 进行容错。

    这两种各有优劣,可以根据作业的具体场景来进行选择。

Flink 1.14 的优化点主要是针对在流的执行模式下,如何去处理有限数据集。之前处理无限数据集,和现在处理有限数据集最大的区别在于引入了 "任务可能会结束" 的概念。在这种情况下带来一些新的问题,如下图:

img

  • 在流的执行模式下的 Checkpoint 机制

    • 对于无限流,它的 Checkpoint 是由所有的 source 节点进行触发的,由 source 节点发送 Checkpoint Barrier ,当 Checkpoint Barrier 流过整个作业时候,同时会存储当前作业所有的 state 状态。
    • 而在有限流的 Checkpoint 机制中,Task 是有可能提早结束的。上游的 Task 有可能先处理完任务提早退出了,但下游的 Task 却还在执行中。在同一个 stage 不同并发下,有可能因为数据量不一致导致部分任务提早完成了。这种情况下,在后续的执行作业中,如何进行 Checkpoint?

      在 1.14 中,JobManager 动态根据当前任务的执行情况,去明确 Checkpoint Barrier 是从哪里开始触发。同时在部分任务结束后,后续的 Checkpoint 只会保存仍在运行 Task 所对应的 stage,通过这种方式能够让任务执行完成后,还可以继续做 Checkpoint ,在有限流执行中提供更好的容错保障。

img

  • Task 结束后的两阶段提交

我们在部分 Sink 使用上,例如下图的 Kafka Sink 上,涉及到 Task 需要依靠 Checkpoint 机制,进行二阶段提交,从而保证数据的 Exactly-once 一致性。

img

具体可以这样说:在 Checkpoint 过程中,每个算子只会进行准备提交的操作。比如数据会提交到外部的临时存储目录下,所有任务都完成这次 Checkpoint 后会收到一个信号,之后才会执行正式的 commit,把所有分布式的临时文件一次性以事务的方式提交到外部系统。

这种算法在当前有限流的情况下,作业结束后并不能保证有 Checkpoint,那么最后一部分数据如何提交?

在 1.14 中,这个问题得到了解决。Task 处理完所有数据之后,必须等待 Checkpoint 完成后才可以正式的退出,这是流批一体方面针对有限流任务结束的一些改进。

三、Checkpoint 机制

1. 现有 Checkpoint 机制痛点

目前 Flink 触发 Checkpoint 是依靠 barrier 在算子间进行流通,barrier 随着算子一直往下游进行发送,当算子下游遇到 barrier 的时候就会进行快照操作,然后再把 barrier 往下游继续发送。对于多路的情况我们会把 barrier 进行对齐,把先到 barrier 的这一路数据暂时性的 block,等到两路 barrier 都到了之后再做快照,最后才会去继续往下发送 barrier。

img

现有的 Checkpoint 机制存在以下问题:

  • 反压时无法做出 Checkpoint :在反压时候 barrier 无法随着数据往下游流动,造成反压的时候无法做出 Checkpoint。但是其实在发生反压情况的时候,我们更加需要去做出对数据的 Checkpoint,因为这个时候性能遇到了瓶颈,是更加容易出问题的阶段;
  • Barrier 对齐阻塞数据处理 :阻塞对齐对于性能上存在一定的影响;
  • 恢复性能受限于 Checkpoint 间隔 :在做恢复的时候,延迟受到多大的影响很多时候是取决于 Checkpoint 的间隔,间隔越大,需要 replay 的数据就会越多,从而造成中断的影响也就会越大。但是目前 Checkpoint 间隔受制于持久化操作的时间,所以没办法做的很快。

2. Unaligned Checkpoint

针对这些痛点,Flink 在最近几个版本一直在持续的优化,Unaligned Checkpoint 就是其中一个机制。barrier 算子在到达 input buffer 最前面的时候,就会开始触发 Checkpoint 操作。它会立刻把 barrier 传到算子的 OutPut Buffer 的最前面,相当于它会立刻被下游的算子所读取到。通过这种方式可以使得 barrier 不受到数据阻塞,解决反压时候无法进行 Checkpoint 的问题。

当我们把 barrier 发下去后,需要做一个短暂的暂停,暂停的时候会把算子的 State 和 input output buffer 中的数据进行一个标记,以方便后续随时准备上传。对于多路情况会一直等到另外一路 barrier 到达之前数据,全部进行标注。

通过这种方式整个在做 Checkpoint 的时候,也不需要对 barrier 进行对齐,唯一需要做的停顿就是在整个过程中对所有 buffer 和 state 标注。这种方式可以很好的解决反压时无法做出 Checkpoint ,和 Barrier 对齐阻塞数据影响性能处理的问题。

img

3. Generalized Incremental Checkpoint [2]

Generalized Incremental Checkpoint 主要是用于减少 Checkpoint 间隔,如左图 1 所示,在 Incremental Checkpoint 当中,先让算子写入 state 的 changelog。写完后才把变化真正的数据写入到 StateTable 上。state 的 changelog 不断向外部进行持久的存储化。在这个过程中我们其实无需等待整个 StateTable 去做一个持久化操作,我们只需要保证对应的 Checkpoint 这一部分的 changelog 能够持久化完成,就可以开始做下一次 Checkpoint。StateTable 是以一个周期性的方式,独立的去对外做持续化的一个过程。

img

这两个过程进行拆分后,就有了从之前的需要做全量持久化 (Per Checkpoint) 变成 增量持久化 (Per Checkpoint) + 后台周期性全量持久化,从而达到同样容错的效果。在这个过程中,每一次 Checkpoint 需要做持久化的数据量减少了,从而使得做 Checkpoint 的间隔能够大幅度减少。

其实在 RocksDB 也是能支持 Incremental Checkpoint 。但是有两个问题:

  • 第一个问题是 RocksDB 的 Incremental Checkpoint 是依赖它自己本身的一些实现,当中会存在一些数据压缩,压缩所消耗的时间以及压缩效果具有不确定性,这个是和数据是相关的;
  • 第二个问题是只能针对特定的 StateBackend 来使用,目前在做的 Generalized Incremental Checkpoint 实际上能够保证的是,它与 StateBackend 是无关的,从运行时的机制来保证了一个比较稳定、更小的 Checkpoint 间隔。

目前 Unaligned Checkpoint 是在 Flink 1.13 就已经发布了,在 1.14 版本主要是针对 bug 的修复和补充,针对 Generalized Incremental Checkpoint,目前社区还在做最后的冲刺,比较有希望在 1.14 中和大家见面。[2]

四、性能与效率

1. 大规模作业调度的优化

  • 构建 Pipeline Region 的性能提升:所有由 pipline 边所连接构成的子图 。在 Flink 任务调度中需要通过识别 Pipeline Region 来保证由同一个 Pipline 边所连接的任务能够同时进行调度。否则有可能上游的任务开始调度,但是下游的任务并没有运行。从而导致上游运行完的数据无法给下游的节点进行消费,可能会造成死锁的情况
  • 任务部署阶段:每个任务都要从哪些上游读取数据,这些信息会生成 Result Partition Deployment Descriptor。

这两个构建过程在之前的版本都有 O (n^2) 的时间复杂度,主要问题需要对于每个下游节点去遍历每一个上游节点的情况。例如去遍历每一个上游是不是一个 Pipeline 边连接的关系,或者去遍历它的每一个上游生成对应的 Result Partition 信息。

目前通过引入 group 概念,假设已知上下游 2 个任务的连接方式是 all-to-all,那相当于把所有 Pipeline Region 信息或者 Result Partition 信息以 Group 的形式进行组合,这样只需知道下游对应的是上游的哪一个 group,就可以把一个 O (n^2) 的复杂度优化到了 O (n)。我们用 wordcount 任务做了一下测试,对比优化前后的性能。

img

从表格中可以看到构建速度具有大幅度提升,构建 Pipeline Region 的性能从秒级提升至毫秒级别。任务部署我们是从第一个任务开始部署到所有任务开始运行的状态,这边只统计了流,因为批需要上游结束后才能结束调度。从整体时间来看,整个任务初始化,调度以及部署的阶段,大概能够减少分钟级的时间消耗。

2. 细粒度资源管理

细粒度资源管理在过去很多的版本都一直在做,在 Flink1.14 终于可以把这一部分 API 开放出来在 DataSteam 提供给用户使用了。用户可以在 DataStream 中自定义 SlotSharingGroup 的划分情况,如下图所示的方式去定义 Slot 的资源划分,实现了支持 DataStream API,自定义 SSG 划分方式以及资源配置 TaskManager 动态资源扣减。

img

对于每一个 Slot 可以通过比较细粒度的配置,我们在 Runtime 上会自动根据用户资源配置进行动态的资源切割。

这样做的好处是不会像之前那样有固定资源的 Slot,而是做资源的动态扣减,通过这样的方式希望能够达到更加精细的资源管理和资源的使用率。

五、Table / SQL / Python API

1. Table API / SQL

Window Table-Valued Function 支持更多算子与窗口类型 ,可以看如下表格的对比:

img

从表格中可以看出对于原有的三个窗口类型进行加强,同时新增 Session 窗口类型,目前支持 Aggregate 的操作。

1.1 支持声明式注册 Source/Sink

  • Table API 支持使用声明式的方式注册 Source / Sink 功能对齐 SQL DDL;
  • 同时支持 FLIP-27 新的 Source 接口;
  • new Source 替代旧的 connect() 接口。

img

1.2 全新代码生成器

解决了大家在生成代码超过 Java 最长代码限制,新的代码生成器会对代码进行拆解,彻底解决代码超长的问题。

1.3 移除 Flink Planner

新版本中,Blink Planner 将成为 Flink Planner 的唯一实现。

2. Python API

在之前的版本中,如果有先后执行的两个 UDF,它的执行过程如下图左方。在 JVM 上面有 Java 的 Operator,先把数据发给 Python 下面的 UDF 去执行,执行后又发回给 Java,然后传送给下游的 Operator,最后再进行一次 Python 的这种跨进程的传输去处理,会导致存在很多次冗余的数据传输。

img

在 1.14 版本中,改进如右图,可以把它们连接在一起,只需要一个来回的 Java 和 Python 进行数据通信,通过减少传输数据次数就能够达到比较好的性能上的提升。

3. 支持 LoopBack 模式

在以往本地执行实际是在 Python 的进程中去运行客户端程序,提交 Java 进程启动一个迷你集群去执行 Java 部分代码。Java 部分代码也会和生产环境部分的一样,去启动一个新的 Python 进程去执行对应的 Python UDF,从图下可以看出新的进程其实在本地调试中是没有必要存在的。

img

所以支持 lookback 模式后可以让 Java 的 opt 直接把 UDF 运行在之前 Python client 所运行的相同的进程内,通过这种方式:

  • 首先是避免了启动额外进程所带来的开销;
  • 最重要的是在本地调试中,我们可以在同一个进程内能够更好利用一些工具进行 debug,这个是对开发者体验上的一个提升。

六、总结

本文主要讲解了 Flink1.14 的主要新特性介绍。

  • 首先介绍了目前社区在批流一体上的工作,通过介绍批流不同的执行模式和 JM 节点任务触发的优化改进更好的去兼容批作业;
  • 然后通过分析现有的 Checkpoint 机制痛点,在新版本中如何改进,以及在大规模作业调度优化和细粒度的资源管理上面如何做到对性能优化;
  • 最后介绍了 TableSQL API 和 Pyhton上相关的性能优化。

欢迎继续关注发版的一些最新动态以及我们在后续的 Release 过程中的一些其他技术分享和专题。

注释

[1] 截至到 8 月 31 日,确定进入新版本的是 33 个,已全部完成。 

[2] Generalized Incremental Checkpoint 最终在 1.14 中没有完成。

原文链接
本文为阿里云原创内容,未经允许不得转载。 

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

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

相关文章

2021 年云原生技术发展现状及未来趋势

简介: 作者于雨担任了 2021 年 GIAC 会议云原生专场的出品人兼讲师,组织了前后四个场子的演讲,在这个过程中作者同时作为听众从这些同行的演讲中学到了很多非常有用的知识。本文算是对 2021 GIAC 云原生专场的侧记,管中窥豹&#…

像搭“乐高”一样实现整合式网络安全体系

部署多种防护产品,却无法形成防御合力,是当前很多企业网络安全建设都面临的挑战。网络安全能力整合是企业的刚需,也是行业发展的大势所趋。虽然Gartner 提出的网络安全网格架构(CSMA,Cybersecurity Mesh Architecture …

合规安全大考核:移动应用安全策略全盘点

简介: 移动应用涵盖用户大量个人数据,一旦发生泄漏可能对个人、社会造成重大影响,同时对移动应用产业长远的发展来说也是毁灭性打击。移动应用开发者,也应注意开发过程中的规范性、安全性,敬畏安全问题,防范…

禁用计算机f1-f12,win10禁用F1至F12热键转为功能键的技巧

win10禁用F1至F12热键转为功能键的技巧介绍。有网友询问:Win10系统笔记本电脑上的F1-F12键上都变成了开关系统功能开关的快捷键,而失去了F1-F12键本身的快捷键的功能。因为编写程序运行的许多软件都需要使用Fn快捷功能键运行,还有制作Word文档…

Quick BI电子表格: 新手亦可表格自由

简介: 随着企业业务快速增长,单纯的表或交叉表展现的数据模式相对固定,已不能满足企业中不同角色用户、不同业务场景数据可视化分析展现的诉求。在满足业务人员可视化需求层面,Quick BI不仅提供了丰富的图表组件,也提供…

CSDN 十大技术主题盘点-云原生篇

关于2021,我们能看到的技术变化有很多。当云原生向下而生,当分布式数据库席卷而至,当低代码平台扩展了开发的边界,当万物互联蔚然成风……我们看到了太多在2021年形成的变化,但也能看到这些趋势非但没有结束&#xff0…

基于MaxCompute+PAI的用户增长方案实践

简介: 如何通过PAIMaxCompute完成用户增长模型AARRR全链路,包含拉新、促活、留存、创收、分享。 本文作者 李博 阿里云智能 高级产品专家 在过去一年阿里云PAI机器学习团队做了很多偏业务的实践,其中有一条就是基于 MaxComputePAI的产品方案…

Atmosic发布搭载能量收集技术的超低功耗蓝牙5.3 片上系统(SoC)高级产品系列

物联网(IoT)能量收集无线技术的全球领导者Atmosic今日宣布推出ATM33系列蓝牙5.3高性能片上系统(SoC)产品,该产品系列将Atmosic已获专利的先进能量收集及超低功耗技术推进到更高的水平。 为减少各种物联网产品高昂的电池…

基于 MaxCompute 的实时数据处理实践

简介: MaxCompute 通过流式数据高性能写入和秒级别查询能力(查询加速),提供EB级云原生数仓近实时分析能力;高效的实现对变化中的数据进行快速分析及决策辅助。当前Demo基于近实时交互式BI分析/决策辅助场景,实现指标卡近实时BI分析…

如何使用计算机来线性拟合,Excel2019使用教程:绘制线性回归图

Excel的功能很强大,可以做各种数据处理和分析。想要检测两组数据是否具有线性关系,就可以使用excel2019来做一元线性回归分析图表,进行数据分析,从而根据结果来测试两组数据的关系。在excel2019中制作一元线性回归分析图表的方法很…

技术干货| 阿里云基于Hudi构建Lakehouse实践探索「内附干货PPT下载渠道」

简介: 阿里云高级技术专家王烨(萌豆)在Apache Hudi 与 Apache Pulsar 联合 Meetup 杭州站上的演讲整理稿件,本议题介绍了阿里云如何使用 Hudi 和 OSS 对象存储构建 Lakehouse,为大家分享了什么是 Lakehouse,阿里云数据库 OLAP 团队…

将 k8s 制作成 3D 射击游戏,好玩到停不下来 | 文末福利

作者 | 小碗汤来源 | 我的小碗汤今天演示一个项目,利用Unity做场景、用C#做交互逻辑,将k8s制作成一个3D射击游戏。正好最近在学习Unity,所以利用这个项目开始上手挺合适的。源码、可执行文件可以自行下载,也可在文末获取&#xff…

Alibaba FFI -- 跨语言编程的探索

简介: 跨语言编程时现代程序语言中非常重要的一个方向,也被广泛应用于复杂的设计与实现中。 跨语言编程是现代程序语言中非常重要的一个方向,也被广泛应用于复杂系统的设计与实现中。本文是 GIAC 2021(全球互联网架构大会) 中关于 Alibaba …

世界通信简史

作者 | 小枣君来源 | 鲜枣课堂█ 萌芽期:现代通信的诞生公元前600年左右,古希腊哲学家泰勒斯闲着没事,拿家里的琥珀棒蹭一只小猫。 蹭着蹭着,他发现,琥珀棒把小猫的毛都吸起来了。 现在我们都知道,这是因为…

如何避免出现SQL注入漏洞

简介: 本文将针对开发过程中依旧经常出现的SQL编码缺陷,讲解其背后原理及形成原因。并以几个常见漏洞存在形式,提醒技术同学注意相关问题。最后会根据原理,提供解决或缓解方案。 作者 | 阿里云安全团队 来源 | 阿里技术公众号 ‍‍…

「CSDN 2021年度 IT 技术影响力之星评选」活动报名倒计时!

“CSDN 2021年度IT技术影响力之星评选”活动自2021年12月6日启动以来受到了行业各界的关注以及企业和个人的积极响应,截止目前,已收到上千份参评报名。本次评选活动的第一阶段——企业/个人参与提名将于2022年1月30日结束,以真实数据为基础&a…

技术人员的一点产品思维思考

简介: 作为一线的开发人员,大家是不是都经历过和产品吵得不可开焦,甚至最后谁也无法说服谁,最后只能由老板出面解决的经历。而大多数情况老板还真能以某种方法去解决,并且是一个双方都能接受的方案。然而这不全是因为老…

chrome插件上传csv_Chrome插件推荐

从 IE 到 Chrome ,期间使用了很多浏览器,搜狗、360、2345、傲游等等,最后选择了 Chrome ,一直到现在,在使用的过程中发现一些好用的插件(扩展程序),在此推荐给大家。PS:使…

极验创始人吴渊:恶意流量威胁新趋势,洞察网络黑产3大核心本质

天下没有免费的午餐,更没有免费的流量。以电商为例,最疯狂的时候,某电商平台单个获客成本接近400元。作为互联网的稀缺资源,流量的成本不断冲击着企业运营红线。 而就当企业盯着成本、守着转化时,网络黑产已完成对平台…

来啊,来魔改啊,人生重开模拟器一键托管上线

简介: 云开发平台将“人生重开模拟器”fork到了云开发的仓库了,用户只需要直接fork到自己的仓库以后就可以在云开发平台上进行快速魔改和一键部署,绑定自己的域名就能够让小伙伴们一起来感受你的魔改创意哦。 人生无法重来,游戏可…