适用于 Apache Flink 2.2 的亚马逊托管服务 - Managed Service for Apache Flink

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

适用于 Apache Flink 2.2 的亚马逊托管服务

适用于 Apache Flink 的亚马逊托管服务现在支持 Apache Flink 版本 2.2。这是该服务的首次主要版本升级。本页介绍了 Flink 2.2 中引入的功能,以及从 Flink 1.x 升级的重要注意事项。

注意

Flink 2.2 引入了需要仔细规划的重大更改。请查看下方以及从 1.x 升级Flink 2.2 升级的状态兼容性指南之前的重大更改和弃用完整列表。

适用于 Apache 的 Apache Flink 2.2 版的亚马逊托管服务引入了行为变化,这些变化可能会在升级后破坏现有应用程序。在下一节中,请仔细查看这些内容以及 Flink API 的更改。

编程配置处理

  • 现在,当客户尝试通过或类似方式修改 MSF 不支持的配置时,MSF Flink 2.2 会报告异常。env.getConfig().set() APIs请参阅编程 Flink 配置属性

  • 客户仍然可以通过支持票证请求更改某些配置(请参阅可修改的设置)

指标移除

  • fullRestarts指标已在 Flink 2.2 中删除。改用该numRestarts指标。

  • 在 Flink 连接器版本 6.0.0(仅与 Flink 2.2 兼容的 AWS 连接器版本)中,KDS 连接器的bytesRequestedPerFetch指标已被删除。

  • 在 Flink 2.2 中,uptimedowntime指标都被标记为已弃用,并将很快被删除。uptime替换为新的指标runningTimedowntime替换为restartingTimecancellingTime、和中的一个或多个failingTime

  • 有关支持的指标的完整列表,请参阅指标和维度页面

已屏蔽非凭证 IMDS 呼叫

  • AWS SDK DefaultCredentialsProvider(/latest/meta-data/iam/security-credentials/) 和 DefaultAwsRegionProviderChain(/latest/dynamic/instance-identity/document) 使用这些允许的终端节点来自动为您的应用程序配置凭证和区域。

  • 使用依赖非凭证 IMDS 调用(例如EC2MetadataUtils.getInstanceId()、、或EC2MetadataUtils.getAvailabilityZone())的 AWS 开发工具包函数的应用程序在EC2MetadataUtils.getInstanceType()尝试EC2MetadataUtils.getLocalHostName()这些调用时将收到 HTTP 4xx 错误。

  • 如果您的应用程序使用 IMDS 来存储元数据或允许路径之外的其他信息,请重构您的代码以改用环境变量或应用程序配置。

只读根文件系统

  • 为了提高安全性,任何依赖项之外是默认/tmp的 flink 工作目录,都将导致:java.io.FileNotFoundException: /{path}/{filename} (Read-only file system).

  • 文件系统依赖关系可以直接源自您的代码,也可以间接源于依赖项中包含的库。重写代码/tmp/中的直接文件系统依赖关系。对于来自库的间接文件系统依赖关系,请使用库配置覆盖将文件系统操作重定向到。/tmp/

以下是 Apache Flink 2.2 托管服务中引入的重大更改和弃用内容的摘要。有关引入这些重大更改的 Apache Flink 2.0 的完整发行说明,请参阅 Apache Flink 2.0 发行说明。

Flink API 和语言移除

DataSet API 已移除

  • Flink 2.0+ 版本中已完全删除了用于批处理的旧版 DataSet API。现在,所有批处理都必须使用统一的 DataStream API。

  • 在升级之前,必须将使用 DataSet API 的应用程序迁移到 DataStream API。要进行转换,请参阅 Apache Flink 迁移指南 DataSet DataStream

Java 11 和 Python 3.8 已移除

  • Java 11 支持已完全移除;Java 17 是默认运行时和推荐运行时。

  • 已移除 Python 3.8 支持;Python 3.12 现在是默认设置。

已移除旧版连接器类

  • 旧版SourceFunctionSinkFunction接口已被新的统一 Source (FLIP-27) 和 Sink (FLIP-143) 所取代 APIs,它们为 bounded/unbounded 二元性提供了更好的支持、改进的检查点协调和更简洁的编程模型。

  • 对于 Kinesis Data Streams,KinesisStreamsSource请使用KinesisStreamsSink和来自。flink-connector-aws-kinesis-streams:6.0.0-2.0

已移除 Scala API

  • Flink Scala API 已被移除。Flink 的 Java API 现在是基于 JVM 的应用程序支持的单一 API。

  • 如果你的应用程序是用 Scala 编写的,你仍然可以使用 Scala 代码中的 Flink 的 Java API ——主要的变化是 Scala 特有的包装器和隐式转换不再可用。有关更新 Scala 应用程序的详细信息,请参阅升级应用程序和 Flink 版本

状态兼容性注意事项

  • 从版本 2.24 升级到 5.6 的 Kryo 序列化器可能会导致状态兼容性问题。

  • POJOs with 集合 (HashMapArrayList、、HashSet) 可能存在状态兼容性问题。

  • Avro 和 Protobuf 的序列化不受影响。

  • 有关Flink 2.2 升级的状态兼容性指南对应用程序风险级别进行分类的详细评估,请参阅。

运行时和语言支持

功能 说明 文档
Java 17 运行时 Java 17 现在是默认运行时和推荐运行时;已移除 Java 11 支持。 Java 兼容性
Python 3.12 Support 现在支持 Python 3.12;已移除 Python 3.8 支持。 PyFlink 文档

状态管理和绩效

功能 说明 文档
RocksDB 8.10.0 通过 RocksDB 升级提高了 I/O 性能。 状态后端
序列化改进 地图、列表、套装的专用序列化器;Kryo 从 2.24 升级到 5.6。 类型序列化

SQL 和表 API 功能

功能 说明 文档
变体数据类型 原生支持半结构化数据 (JSON),无需重复字符串解析。 数据类型
达美加入 通过仅维护每个密钥的最新版本来降低流式联接的状态要求;需要客户管理的基础架构(例如 Apache Fluss)。 加入
StreamingMultiJoinOperator 以单个运算符的身份执行多路连接,从而省去中间实现化。 FLIP-516
ProcessTableFunction (PTF) 直接在 SQL 中启用有状态的、事件驱动的逻辑,包括按键状态和计时器。 用户定义的函数
ML_PREDICT 功能 直接从 SQL 调用 streaming/batch 表上注册的 ML 模型。要求客户捆绑 ModelProvider 实施(例如flink-model-openai)。 ModelProvider Apache Flink 的托管服务不提供库。 机器学习预测
型号 DDL 使用 CREATE MODEL 语句将机器学习模型定义为第一类目录对象。 创建语句
向量搜索 Flink SQL API 支持搜索向量数据库。目前没有可用的开源VectorSearchTableSource实现;客户必须提供自己的实现。 Flink SQL

DataStream API 功能

功能 说明 文档
FLIP-27 来源 API 新的统一源接口取代了传统接口 SourceFunction。
FLIP-143 Sink API 新的统一接收器接口取代了传统接口 SinkFunction。 水槽
异步 Python DataStream 在 Python DataStream API 中使用 AsyncFunction非阻塞 I/O 操作。 异步 I/O

升级到 Flink 2.2 时,您还需要将连接器依赖项更新为与 Flink 2.2 运行时兼容的版本。Flink 连接器是独立于 Flink 运行时发布的,而且并非所有连接器都有兼容 Flink 2.2 的版本。下表汇总了适用于 Apache Flink 的亚马逊托管服务中常用连接器的可用性:

Flink 2.2 的连接器可用性
Connector Flink 1.20 版本 Flink 2.0+ 版本 注意
Apache Kafka flink-connector-kafka 3.4.0-1.20 flink-connector-kafka 4.0.0-2.0 推荐用于 Flink 2.2
Kinesis Data Streams(来源) flink-connector-kinesis 5.0.0-1.20 flink-connector-aws-kinesis-streams 6.0.0-2.0 推荐用于 Flink 2.2
Kinesis Data Streams(接收器) flink-connector-aws-kinesis-streams 5.1.0-1.20 flink-connector-aws-kinesis-streams 6.0.0-2.0 推荐用于 Flink 2.2
Amazon Data Firehose flink-connector-aws-kinesis-firehose 5.1.0-1.20 flink-connector-aws-kinesis-firehose 6.0.0-2.0 兼容 Flink 2.0
Amazon DynamoDB flink-connector-dynamodb 5.1.0-1.20 flink-connector-dynamodb 6.0.0-2.0 兼容 Flink 2.0
Amazon SQS flink-connector-sqs 5.1.0-1.20 flink-connector-sqs 6.0.0-2.0 兼容 Flink 2.0
FileSystem (S3、HDFS) 与 Flink 捆绑在一起 与 Flink 捆绑在一起 内置于 Flink 发行版中 — 始终可用
JDBC flink-connector-jdbc 3.3.0-1.20 2.x 版尚未发布 没有兼容 Flink 2.x 的版本可用
OpenSearch flink-connector-opensearch 1.2.0-1.19 2.x 版尚未发布 没有兼容 Flink 2.x 的版本可用
Elasticsearch 仅限旧版连接器 2.x 版尚未发布 考虑迁移到 OpenSearch 连接器
Amazon Managed Service for Prometheus flink-connector-prometheus 1.0.0-1.20 2.x 版尚未发布 没有兼容 Flink 2.x 的版本可用
  • 如果您的应用程序依赖的连接器还没有 Flink 2.x 版本,则有两种选择:等待连接器发布兼容版本,或者评估是否可以将其替换为替代版本(例如,使用 JDBC 目录或自定义接收器)。

  • 更新连接器版本时,请注意工件名称的更改——某些连接器在主要版本之间已重命名(例如,flink-connector-aws-firehose在某些中间版本中,Firehose 连接器从flink-connector-aws-kinesis-firehose变为)。

  • 请务必查看 A pache Flink 连接器的亚马逊托管服务文档,了解目标运行时支持的确切工件名称和版本。

适用于 Apache Flink 2.2 的亚马逊托管服务不支持以下功能:

  • 物化表:持续维护、可查询的表快照。

  • 自定义遥测更改:自定义指标报告器和遥测配置。

  • ForSt 状态后端:分解状态存储(开源实验版)。

  • Java 21:开源中的实验性支持,Apache Flink 托管服务不支持。

Amazon Managed Service for Apache Flink Studio

适用于 Apache Flink 的亚马逊托管服务中的 Flink 2.2 不支持 Studio 应用程序。有关更多信息,请参阅创建 Studio 笔记本

Kinesis 连接器 EFO

  • 当 Kinesis KinesisStreamsSource 直播进行重新分片时,使用连接器 v5.0.0 和 v6.0.0 中引入的 with EFO(增强型扇出/ SubscribeToShard)路径的应用程序可能会失败。这是社区中的一个已知问题。有关更多信息,请参阅 FLINK-37648

  • 如果 Flink 应用程序处于背压之下,则使用连接器 v5.0.0 和 v6.0.0 中引入的 with EFO(增强型扇出/ SubscribeToShard)路径的应用程序KinesisStreamsSink可能会遇到死锁,从而导致一个或多个应用程序的数据处理完全停止。KinesisStreamsSource TaskManagers恢复应用程序需要强制停止操作和启动应用程序操作。这是社区中已知问题的一个子案例。有关更多信息,请参阅 FLINK-34071

适用于 Apache 的 Amazon 托管服务 Flink 支持就地版本升级,从而保留您的应用程序配置、日志、指标、标签,以及您的应用程序状态(如果状态和二进制文件兼容)。有关 step-by-step说明,请参阅升级到 Flink 2.2:完整指南

有关评估状态兼容性风险和处理升级期间不兼容状态的指南,请参阅Flink 2.2 升级的状态兼容性指南

如有疑问或问题,请参阅Managed Service for Apache Flink 的故障排除或联系 Supp AWS ort。