Flink 1.17发布后数据开发领域需要关注的一些点

2023-04-07 18:56:48 浏览数 (1)

Flink1.17前几天刚刚发布。我们简单聊一下几个主要的更新:

Batch部分

Batch部分这次有三个比较重要的FLIP:

  1. Streaming Warehouse API: FLIP-282在Flink SQL 中引入了新的 Delete 和 Update API,它们可以在 Batch 模式下工作。在此基础上,外部存储系统比如 Flink Table Store 可以通过这些新的 API 实现行级删除和更新。同时对 ALTER TABLE 语法进行了增强,包括 ADD/MODIFY/DROP 列、主键和 watermark 的能力,这些增强使得用户更容易维护元数据。

  1. Batch 性能优化: 在 Flink 1.17 中,批处理作业的执行在性能、稳定性和可用性方面都得到了显着改进。就性能而言,通过策略优化和算子优化,如新的 join-reorder 算法和自适应的本地哈希聚合优化、Hive 聚合函数改进以及混合 shuffle 模式优化,这些改进带来了 26% 的 TPC-DS 性能提升。就稳定性而言,Flink 1.17 预测执行可以支持所有算子,自适应的批处理调度可以更好的应对数据倾斜场景。就可用性而言,批处理作业所需的调优工作已经大大减少。自适应的批处理调度已经默认开启,混合 shuffle 模式现在可以兼容预测执行和自适应批处理调度,同时所需的各种配置都进行了简化。

  1. SQL Client/Gateway: Apache Flink 1.17 支持了 SQL Client 的 gateway 模式,允许用户将 SQL 提交给远端的 SQL Gateway。同时,用户可以在 SQL Client 中使用 SQL 语句来管理作业,包括查询作业信息和停止正在运行的作业等。这表示 SQL Client/Gateway 已经演进为一个作业管理、提交工具。

第二和第三点是当前对大家开发影响最大的,Flink Batch的能力现在已经比较完善和稳定,很多离线导数的批任务很多大厂已经从原来的类似DataX这样的工具切换到Flink Batch SQL。例如下面的2个场景:

  1. 需要给维表中导入历史数据,Hive->Hbase或者Hive->Redis,Flink Batch SQL可能是比较好的选择,另外Flink Batch任务可以和调度系统配合实现维度表的天级更新;

  1. 你的维度表数据需要比较复杂的关联或者加工逻辑。现在你可以把这个逻辑写在Flink Batch SQL里,然后调度运行。抛弃掉原来需要在离线 任务中处理好,后面挂一个导数任务的场景。

以上2个场景在一些大厂已经开始做强制要求。

至于Streaming Warehouse API,离开发者还暂时较远,可以等功能再继续完善,并且周边的批流一体生态更加完善后在考虑接触。

而且,今天Flink Table Store宣布项目独立运作,并且用Apache Paimon的名字进入到了Apache孵化器,这个后面我们在关注,大家不用着急去跟风。

Streaming部分

这部分涉及到的主要改动如下:

  1. Streaming SQL 语义增强: 非确定性操作可能会导致不正确的结果或异常,这在 Streaming SQL 中是一个极具挑战性的话题。Flink 1.17 修复了不正确的优化计划和功能问题,并且引入了实验性功能 PLAN_ADVICE,PLAN_ADVICE 可以为 SQL 用户提供潜在的正确性风险提示和 SQL 优化建议。

  1. Checkpoint 改进: 通用增量 Checkpoint(GIC)增强了 Checkpoint 的速度和稳定性,Unaligned Checkpoint (UC) 在作业反压时的稳定性也在 Flink 1.17 中提高至生产可用级别。此外,该版本新引入一个 REST API 使得用户可以触发自定义 Checkpoint 类型的 Checkpoint。

  1. Watermark 对齐完善: 高效的 watermark 处理直接影响 event time 作业的执行效率,在 Flink 1.17 中, FLIP-217通过对 Source 算子内部的 split 进行数据对齐发射,完善了 watermark 对齐功能。这一改进使得 Source 中 watermark 进度更加协调,从而减轻了下游算子的缓存过多数据,增强了流作业执行的整体效率。

  1. StateBackend 升级: 此次发布将 FRocksDB的版本升级到了6.20.3-ververica-2.0,对 RocksDBStateBackend 带来了许多改进。例如在 slot 之间共享内存,支持 Apple Silicon 芯片组,如 Mac M1。Flink 1.17 版本还提供了参数扩大 TaskManager 的 slot 之间共享内存的范围,提升了 TaskManager 中 slot 内存使用不均匀时的效率。

这部分没有什么好说的,Flink Streaming的能力现在大家有目共睹,针对高流量,高RPS环境下的如Checkpoint和StateBackend的增强和优化一直是各大公司投入的重点。

可以预见到的是,实时计算和真正实现批流一体的场景(之前的各大公司分享的所谓批流一体就是个噱头)在2023年还会继续大踏步向前,这个对开发者提出了不小的要求,赶紧把已经比较完善的功能掌握掉,数据开发领域是这几年各开发领域中发展最快,成果最多的领域之一。

大家加加油,不要被时代抛弃了。

0 人点赞