1
头图

Apache Flink 社区正在积极准备 Flink 2.0,这是自 Flink 1.0 发布 8 年以来的首次大版本发布。作为一个重要的里程碑,Flink 2.0 将引入许多激动人心的功能和改进,以及一些不兼容的破坏性变更。为了促进用户和上下游项目(例如,连接器)尽早适配这些变更,提前尝试这些令人兴奋的新功能同时收集反馈,我们现在提供了 Flink 2.0 的预览版本。

注意: Flink 2.0 预览版不是稳定版本,请不要应用于生产环境。虽然这个预览版包含了 Flink 2.0 中绝大部分影响兼容性的变更,但 2.0 正式版仍可能引入额外的非兼容改动。

非兼容变更

API

以下 API 已被完全移除:

同时,DataStream API 以及 REST API 中部分废弃的方法和字段也已经被移除。

注意: 您可能会发现一些已移除的 API 仍然存在于代码库中,但被移动到了和原来不同的包路径下。它们现在仅供内部使用,并且可能随时发生更改或移除。请 不要再使用 它们.

连接器适配计划

由于 SourceFunction, SinkFunction 和 SinkV1 API 被移除,依赖这些 API 的现有连接器将无法在 Flink 2.x 版本工作,需要进行针对性适配。以下是具体的适配计划:

  1. Flink 2.0 预览版发布后会尽快发布与之适配的 Kafka 连接器新版本。
  2. JDBC 和 ElasticSearch 连接器将在 Flink 2.0 的正式版本中适配。
  3. 我们计划在接下来的 3 个版本(即截止到 Flink 2.3)中逐步适配剩余的连接器。

配置

符合以下标准的配置项已被移除:

  • 被标注为 @Public 并且已弃用至少2个版本。
  • 被标注为 @PublicEvolving 并且已弃用至少1个版本。

在 Flink 2.x 中,不再支持旧的配置文件 flink-conf.yaml, 请改用符合标准 YAML 格式的 config.yaml。我们提供了一个迁移工具,用于将旧的 flink-conf.yaml 转换为新的 config.yaml。详见 从 flink-conf.yaml 迁移到 config.yaml

在程序中使用硬编码的方式进行配置会带来诸多弊端,因此 StreamExecutionEnvironment 和 ExecutionConfig 中与配置相关的 API 不再允许直接传入 Java 对象作为参数。你现在应该通过 Configuration 和 ConfigOption 来进行相应的配置。

为了避免暴露过多的内部接口,用户自定义函数(UDF) 不再对 ExecutionConfig 具有完整的访问权限。相应地,你现在可以直接从 RuntimeContext 中访问这些必要的函数,例如 createSerializer()getGlobalJobParameters() 和 isObjectReuseEnabled()

其它

  • 1.x 到 2.x 的升级不保证 状态兼容性
  • 不再支持 Java 8: Java 11 是目前支持的最低 Java 版本。
  • 旧的 Hybrid Shuffle 模式 已经被完全移除。

重要新特性

存算分离状态管理

过去十年间 Flink 的部署模式、工作负载和硬件的架构都发生了很大的改变。我们已经从计算-存储紧密耦合的 map-reduce 时代,进入到了以 Kubernetes 容器化部署为标准的云原生世界。为了 Flink 在云原生时代的未来,我们在 Flink 2.0 中引入了基于远程存储的存算分离状态管理。

存算分离架构的引入使得 Flink 向云原生领域更进一步。新架构主要解决了以下问题:

  1. 容器化环境下计算节点受本地磁盘大小限制的问题
  2. 由于RocksDB中LSM结构的周期性 Compaction 导致计算资源尖峰的问题
  3. 大规模状态快速扩缩容的挑战
  4. 原生的轻量级和快速检查点

受限于 Flink 中现有的阻塞式同步执行模型,仅仅将状态存储扩展到从远程 DFS 读写是不够的。在 Flink 2.0 中,我们提出了异步执行模型,并为此引入了 ForStDB,这是一种分离的状态后端解决方案。

在当前预览版本下,我们使用: NexmarkQ20 完成了一个端到端的示例。 其中包括:

  • 异步化执行:完整的状态异步访问的API,以及检查点支持
  • 异步化SQL Join算子:基于异步化状态 API实现
  • 同步/异步混合式执行:基于混合式SQL Plan,支持同步算子与异步算子在一个作业内共存
  • 性能:在直接写入存算分离后的远端存储的场景下,提供了不错的性能

物化表

在 Flink 1.20 中,我们以最简可行产品(Minimum Viable Product) 的形式引入了物化表功能。物化表是 Flink SQL 中的一种创新型表类型,旨在进一步简化流和批作业的数据处理流程,同时提供统一的开发体验。在即将发布的 Flink 2.0 中,我们正在增强物化表所支持的功能,包括与主流的湖格式进行集成以及生产就绪的调度器实现。

批作业的自适应执行

此外,Flink 正在不断提升其自适应批处理能力。即将发布的 Flink 2.0 将具备基于作业已完成的阶段所提供的信息,对逻辑计划和物理计划进行动态优化的能力。初步支持的策略包括动态应用 Broadcast Join 以及对数据倾斜的 Join 进行优化。

流式湖仓

以 Apache Flink 和 Apache Paimon 的集成为代表的流式湖仓架构将湖仓范式中统一的数据存储、开放格式和成本效益扩展到了实时领域。即将发布的 Flink 2.0 在 Flink 和 Paimon 的集成方面迈出了重要一步:Flink 和 Paimon 社区正在密切合作,充分结合彼此的优势以及核心功能,带来了诸多重要改进,包括但不限于:使用 Paimon 丰富的合并引擎进行 SQL 执行计划优化、大幅提升 Lookup-Join 的性能、支持 Flink 物化表、以及对自适应批处理和推测执行的支持。


更多内容


活动推荐

阿里云基于 Apache Flink 构建的企业级产品-实时计算 Flink 版现开启活动:
新用户复制点击下方链接或者扫描二维码即可0元免费试用 Flink + Paimon
实时计算 Flink 版(3000CU*小时,3 个月内)
了解活动详情:https://free.aliyun.com/?utm_content=g_1000395379&productCode=sc


ApacheFlink
936 声望1.1k 粉丝