- 分析›
- 适用于 Apache Flink 的亚马逊托管服务›
- 常见问题
适用于 Apache Flink 的亚马逊托管服务的常见问题
一般性问题
什么是适用于 Apache Flink 的亚马逊托管服务?
借助适用于 Apache Flink 的亚马逊托管服务,您可以使用 Apache Flink 实时转换和分析串流数据。Apache Flink 是一种处理数据流的开源框架和引擎。适用于 Apache Flink 的亚马逊托管服务降低了构建、管理 Apache Flink 应用程序以及与其他 AWS 服务集成的复杂性。
适用于 Apache Flink 的亚马逊托管服务会处理持续运行串流应用程序所需的任何事项,且会自动扩展以匹配传入数据的数量和吞吐量。使用适用于 Apache Flink 的亚马逊托管服务无需管理服务器,没有最低费用或设置成本,且只需为串流应用程序使用的资源付费。
什么是实时流处理?为什么我需要使用它?
我可以使用适用于 Apache Flink 的亚马逊托管服务做什么?
您可以在许多使用案例中使用适用于 Apache Flink 的亚马逊托管服务来连续处理数据,并在几秒钟或几分钟内获得洞察,而不需要等待几天甚至几周。 适用于 Apache Flink 的亚马逊托管服务让您能够快速构建端到端流处理应用程序,以用于日志分析、点击流分析、物联网(IoT)、广告技术和游戏等等。四种最常见的使用案例流式抽取-转换-加载(ETL)、持续指标生成、响应实时分析以及数据流的交互式查询。
流式 ETL
借助流式 ETL 应用程序,您能够在加载数据湖或数据仓库之前实时清理、扩充、组织和转换原始数据,减少或消除批处理 ETL 步骤。这些应用程序可以在交付之前将小记录缓冲到更大的文件中,并在各个流和表之间建立复杂的连接。例如,您可以构建一个应用程序,以连续读取存储在 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 中的 IoT 传感器数据,按传感器类型组织数据,删除重复数据,按照指定架构规范化数据,然后将数据交付到 Amazon Simple Storage Service (Amazon S3)。
持续指标生成
借助持续指标生成应用程序,您可以监控和了解您的数据在一段时间内的趋势。您的应用程序可以将串流数据汇总为关键信息,并将其与报表数据库和监控服务无缝集成,从而实时为您的应用程序和用户服务。借助适用于 Apache Flink 的亚马逊托管服务,您可以使用 Apache Flink 代码(采用 Java、Scala、Python 或 SQL 语言)在时间窗口内持续生成时间序列分析。例如,您可以通过计算每分钟排名靠前的玩家并将结果发送至 Amazon DynamoDB,来创建手机游戏的实时排行榜。您还可以通过每五分钟计算一次唯一身份网站访客的数量并将处理结果发送至 Amazon Redshift 来跟踪网站的流量。
响应实时分析
响应实时分析应用程序在某些指标达到预定义阈值时(或者更超前的情况是,在您的应用程序使用机器学习(ML)算法检测到异常情况时)发送实时警报或通知。借助这些应用程序,您可以即刻对业务变化做出响应,例如,预测移动应用的用户弃用趋势,以及识别降级系统。例如,这种应用程序可计算一段时间内面向客户的 API 的可用性或成功率,然后将相应结果发送至 Amazon CloudWatch。您还可以构建另一种应用程序,以查找满足某些条件的事件,然后使用 Amazon Kinesis Data Streams 和 Amazon Simple Notification Service(Amazon SNS)自动通知相应客户。
数据流交互式分析
交互式分析可帮助您实时探索流数据。借助专属查询或程序,您可以从 Amazon MSK 或 Amazon Kinesis Data Streams 查看数据流,并将数据在这些流中的活动情况可视化。例如,您可以查看在一个时间窗口内计算平均值的实时指标的行为,并将经过整合的数据发送到您选择的目标。交互式分析还有助于流处理应用程序的迭代开发。您所搭建的查询将随着新数据的到来持续更新。借助适用于 Apache Flink 的亚马逊托管服务,您可以部署这些查询以使其持续运行,同时启用自动扩缩和持久状态备份。
入门
如何开始使用适用于 Apache Flink 的亚马逊托管服务的 Apache Flink 应用程序?
如何开始将 Apache Beam 应用程序与适用于 Apache Flink 的亚马逊托管服务结合使用?
如何开始使用适用于 Apache Flink Studio 的亚马逊托管服务?
适用于 Apache Flink 的亚马逊托管服务有什么限制?
适用于 Apache Flink 的亚马逊托管服务是否支持架构注册?
是,通过使用 Apache Flink DataStream 连接器,适用于 Apache Flink 应用程序的亚马逊托管服务可以使用 AWS Glue Schema Registry,这是 AWS Glue 的一项无服务器功能。您可以将 Apache Kafka/Amazon MSK 和 Amazon Kinesis Data Streams 作为接收器和源与适用于 Apache Flink 的亚马逊托管服务工作负载集成。请访问《AWS Glue Schema Registry 开发人员指南》以开始使用并了解更多信息。
重要概念
什么是适用于 Apache Flink 应用程序的亚马逊托管服务?
应用程序是您使用的适用于 Apache Flink 的亚马逊托管服务实体。适用于 Apache Flink 应用程序的亚马逊托管服务可以持续实时读取和处理串流数据。您可以使用 Apache Flink 支持的语言编写应用程序代码,以处理传入的串流数据并生成输出。然后,适用于 Apache Flink 的亚马逊托管服务将输出写入配置的目的地。
每个应用程序包括三个主要的组件:
- 输入:输入是应用程序的串流源。在输入配置中,您需要将串流源映射到数据流。数据从您的数据来源流入您的数据流。您可以使用应用程序代码处理来自这些数据流的数据,然后将处理后的数据发送到后续的数据流或目的地。您可以在 Apache Flink 应用程序和 Studio 笔记本的应用程序代码中添加输入,也可以通过适用于 Apache Flink 的亚马逊托管服务应用程序的 API 添加输入。
- 应用程序代码:应用程序代码是一系列用于处理输入并生成输出的 Apache Flink 运算符。最简单的的应用程序代码可以是单个 Apache Flink 运算符,它从与串流源关联的数据流中读取数据,然后写入与输出关联的另一个数据流。对于 Studio 笔记本,这可以是一个简单的 Flink SQL 选择查询,结果将显示在笔记本的上下文中。您可以使用适用于 Apache Flink 的亚马逊托管服务应用程序或 Studio 笔记本支持的语言为其编写 Apache Flink 代码。
- 输出:然后,您可以选择配置应用程序输出以将数据保存到外部目标。您可以将这些输出添加到适用于 Apache Flink 的亚马逊托管服务应用程序和 Studio 笔记本的应用程序代码中。
支持何种应用程序代码?
管理应用程序
如何监控适用于 Apache Flink 应用程序的亚马逊托管服务的运行和性能?
AWS 提供各种工具供您监控适用于 Apache Flink 应用程序的亚马逊托管服务,包括对适用于 Apache Flink 应用程序的 Flink 控制面板的访问。您可以配置其中的一些工具以便进行监控。有关如何监控应用程序的更多信息,请浏览以下开发人员指南:
- 《适用于 Apache Flink 的亚马逊托管服务开发人员指南》中的监控适用于 Apache Flink 的亚马逊托管服务。
- 《适用于 Apache Flink Studio 的亚马逊托管服务开发人员指南》中的监控适用于 Apache Flink 的亚马逊托管服务。
如何管理和控制对我的适用于 Apache Flink 应用程序的亚马逊托管服务的访问权限?
适用于 Apache Flink 的亚马逊托管服务需要获取相应权限,才能从您在应用程序中指定的串流数据来源中读取记录。此外,适用于 Apache Flink 的亚马逊托管服务还需要获取相应权限,才能将应用程序输出写入您在应用程序输出配置中指定的目标位置。您可以通过创建适用于 Apache Flink 的亚马逊托管服务可以担任的 AWS Identity and Access Management(IAM)角色来授予这些权限。您授予该角色的权限决定了适用于 Apache Flink 的亚马逊托管服务在担任该角色时可以执行的操作。有关更多信息,请参阅以下开发人员指南:
适用于 Apache Flink 的亚马逊托管服务如何扩展我的应用程序?
适用于 Apache Flink 的亚马逊托管服务可对应用程序进行弹性扩展,以适应源流的数据吞吐量和大多数情况下的查询复杂性。适用于 Apache Flink 的亚马逊托管服务以 Amazon KPU 的形式配置容量。一个 KPU 为您提供 1 个 vCPU 和 4GB 内存。
对于 Apache Flink 应用程序以及 Studio 笔记本,适用于 Apache Flink 的亚马逊托管服务每 KPU 分配 50GB 的运行应用程序存储空间,您的应用程序将这些存储空间用于检查点,也可以通过临时磁盘使用它们。检查点是正在运行的应用程序的最新备份,应用程序中断时可立即使用检查点来恢复。您还可以使用 API 中的 Parallelism 和 ParallelismPerKPU 参数,控制适用于 Apache Flink 应用程序的亚马逊托管服务任务(例如从源中读取或执行运算符)的并行执行。Parallelism 定义任务并发实例的数量。所有运算符、源和接收器都按定义的并行数量运行,默认情况下是 1。Parallelism per KPU 定义应用程序每 KPU 可以调度的并行任务数量,默认情况下是 1。有关更多信息,请参阅《适用于 Apache Flink 的亚马逊托管服务开发人员指南》中的“扩展”。
与构建和管理适用于 Apache Flink 的亚马逊托管服务应用程序相关的最佳实践有哪些?
有关 Apache Flink 最佳实践的信息,请参阅《适用于 Apache Flink 的亚马逊托管服务开发人员指南》中的最佳实践部分。这部分将讨论容错能力、性能、日志记录、编码等方面的最佳实践。
有关适用于 Apache Flink Studio 的亚马逊托管服务的最佳实践的信息,请参阅《适用于 Apache Flink Studio 的亚马逊托管服务开发人员指南》的“最佳实践”部分。除最佳实践外,该部分还包含 SQL、Python 和 Scala 应用程序的最佳实践、将您的代码部署为持续运行流处理应用程序的要求、性能、日志记录等更多信息。
我可以通过适用于 Apache Flink 应用程序的亚马逊托管服务访问 Amazon VPC 后端的资源吗?
符合。您可以访问 Amazon VPC 后端的资源。您可以在《Amazon Kinesis Data Analytics 开发人员指南》的使用 Amazon VPC 部分了解如何针对 VPC 访问配置应用程序。
单个适用于 Apache Flink 的亚马逊托管服务应用程序可以访问多个 VPC 吗?
连接到 VPC 的适用于 Apache Flink 应用程序的亚马逊托管服务能否访问互联网和 AWS 服务端点?
在默认配置下,配置为可访问特定 VPC 中资源的适用于 Apache Flink 应用程序的亚马逊托管服务和适用于 Apache Flink Studio 笔记本的亚马逊托管服务无法访问互联网。您可以在《适用于 Apache Flink 的亚马逊托管服务开发人员指南》的互联网和服务访问部分了解如何为您的应用程序配置互联网访问权限。
定价与计费
适用于 Apache Flink 的亚马逊托管服务如何收费?
使用适用于 Apache Flink 的亚马逊托管服务,您只需为实际使用量付费。使用适用于 Apache Flink 的亚马逊托管服务无需预置资源,也没有前期成本。
我们根据用于运行串流应用程序的 Amazon KPU 的数量,按小时收取费用。一个 KPU 表示一个流处理容量单元,由 1 个 vCPU 计算和 4GB 内存组成。适用于 Apache Flink 的亚马逊托管服务会自动调整串流应用程序所需的 KPU 数量,因为内存和计算需求会因处理复杂性和处理串流数据的吞吐量而异。
对于 Apache Flink 和 Apache Beam 应用程序,每个应用程序要为应用程序编排收取一个额外的 KPU 费用。Apache Flink 和 Apache Beam 应用程序会被收取运行应用程序存储和持久应用程序备份的费用。运行应用程序存储用于适用于 Apache Flink 的亚马逊托管服务中的有状态处理功能,并按每月每 GB 收费。持久应用程序备份是可选项,按每月每 GB 收费,并为应用程序提供基于时间点恢复功能。
对于适用于 Apache Flink Studio 的亚马逊托管服务,在开发或交互模式下,您需要为应用程序编排所用的额外 KPU 付费,交互式开发也需要使用 1 个 KPU。您还需要为运营应用程序存储空间付费。对于持久应用程序备份,您无需承担费用。
有关更多定价信息,请参阅适用于 Apache Flink 的亚马逊托管服务的定价页面。
我是否需要为处于运行状态但未处理来自源的任何数据的适用于 Apache Flink 应用程序的亚马逊托管服务付费?
对于 Apache Flink 和 Apache Beam 应用程序,如果您的适用于 Apache Flink 应用程序的亚马逊托管服务处于运行状态,则您最低需要支付 2 个 KPU 和 50GB 运行应用程序存储的费用。
对于适用于 Apache Flink Studio 笔记本的亚马逊托管服务,如果您的应用程序处于运行状态,则您最低需要支付 3 个 KPU 和 50GB 运行应用程序存储的费用。
除了适用于 Apache Flink 的亚马逊托管服务费用之外,我还可能产生其他费用吗?
适用于 Apache Flink 的亚马逊托管服务是否在 AWS Free Tier 中提供?
构建 Apache Flink 应用程序
什么是 Apache Flink?
Apache Flink 是一种开源框架和引擎,用于流和批量数据处理。由于它提供了功能强大的运算符,解决了核心串流问题,例如复制处理过程,因此能轻松构建串流应用程序。Apache Flink 为数据流上的分布式计算提供了数据分发、通信和容错能力。
如何开发应用程序?
首先下载开源库,包括 AWS SDK、Apache Flink 和 AWS 服务连接器。请参阅《适用于 Apache Flink 的亚马逊托管服务开发人员指南》,获取关于如何下载库并创建您的首个应用程序的说明。
应用程序代码是怎样的?
使用数据流和流运算符编写 Apache Flink 代码。应用程序数据流是您使用代码执行处理所依据的数据结构。数据不断地从源流向应用程序数据流。一个或多个流运算符用于定义对应用程序数据流的处理,包括转换、分区、聚合、连接和输出。数据流和运算符可在串行和并行链中中连接。请参考下方所示的使用伪代码的简短示例。
DataStream <GameEvent> rawEvents = env.addSource(
New KinesisStreamSource(“input_events”));
DataStream <UserPerLevel> gameStream =
rawEvents.map(event - > new UserPerLevel(event.gameMetadata.gameId,
event.gameMetadata.levelId,event.userId));
gameStream.keyBy(event -> event.gameId)
.keyBy(1)
.window(TumblingProcessingTimeWindows.of(Time.minutes(1)))
.apply(...) - > {...};
gameStream.addSink(new KinesisStreamSink("myGameStateStream"));
如何使用 Apache Flink 运算符?
运算符以应用程序数据流作为输入,将处理过的数据作为输出发送至应用程序数据流。运算符可以连接在一起,通过多个步骤构建应用程序,并且不需要具备丰富的分布式系统知识即可实现和运算。
支持哪些运算符?
适用于 Apache Flink 的亚马逊托管服务支持 Apache Flink 中的所有运算符,这些运算符可用于解决各种各样的使用案例问题,包括映射、KeyBy、聚合、Window Join 等。例如,映射运算符允许您执行任意处理,从传入的数据流中获取一个元素并生成另一个元素。KeyBy 使用指定的键有逻辑地组织数据,让您能够同时处理类似的数据点。聚合跨多个键(如 sum、min 和 max)进行处理。Window Join 在给定的键和窗口上将两个数据流连接在一起。
如果这些运算符不能满足您的需求,您可以构建自定义运算符。更多示例请参阅《适用于 Apache Flink 的亚马逊托管服务开发人员指南》的“运算符”部分。您可以在 Apache Flink 文档中查看完整的 Apache Flink 运算符列表。
适用于 Apache Flink 应用程序的亚马逊托管服务支持哪些集成?
您可以使用最少的代码设置 Apache Flink 提供的预构建集成,或者构建您自己的集成来连接几乎任何数据来源。基于 Apache Flink 的开源库支持流源和目标(或接收器)来处理数据交付。还包括通过异步 I/O 连接器来支持数据扩充。其中一些连接器包括:
- 串流数据来源:Amazon Managed Streaming for Apache Kafka(Amazon MSK)、Amazon Kinesis Data Streams 目标位置或接收器:Amazon Kinesis Data Streams
- Amazon Kinesis Data Firehose、Amazon DynamoDB、Amazon Elasticsearch Service 和 Amazon S3(通过文件接收器集成)
适用于 Apache Flink 应用程序的亚马逊托管服务能否跨流和主题复制数据?
符合。您可以使用适用于 Apache Flink 应用程序的亚马逊托管服务在 Amazon Kinesis Data Streams、Amazon MSK 和其他系统之间复制数据。 我们的文档中提供的示例说明了如何从一个 Amazon MSK 主题读取数据,然后写入另一个主题。
是否支持自定义集成?
适用于 Apache Flink 应用程序的亚马逊托管服务提供哪种交付和处理模型?
如果应用程序是使用幂等运算符(包括源和 sink)构建的,那么适用于 Apache Flink 的亚马逊托管服务中的 Apache Flink 应用程序将使用“仅一次”交付模型。这意味着处理后的数据只会对下游结果产生一次影响。
默认情况下,适用于 Apache Flink 应用程序的亚马逊托管服务使用 Apache Flink 的“仅一次”语义。如果您使用采用 Apache Flink 的仅一次语义的源、运算符和接收器来设计应用程序,那么您的应用程序将支持“仅一次”处理语义。
我能够从应用程序存储访问本地存储吗?
适用于 Apache Flink 的亚马逊托管服务如何自动备份我的应用程序?
适用于 Apache Flink 的亚马逊托管服务使用检查点和快照自动备份正在运行的应用程序的状态。检查点保存当前应用程序状态,并使适用于 Apache Flink 应用程序的亚马逊托管服务能够恢复应用程序的状态,从而提供与无故障执行相同的语义。检查点使用正在运行的应用程序存储。适用于 Apache Flink 应用程序的检查点通过 Apache Flink 的设置检查点功能提供。快照可以保存应用程序的时间点恢复点,并使用持久应用程序备份。快照与 Flink 保存点类似。
何为应用程序快照?
支持哪些版本的 Apache Flink?
要了解有关支持的 Apache Flink 版本的更多信息,请访问适用于 Apache Flink 的亚马逊托管服务发行说明页面。本页还包括适用于 Apache Flink 的亚马逊托管服务支持的 Apache Beam、Java、Scala、Python 和 AWS SDK 的版本。
适用于 Apache Flink 应用程序的亚马逊托管服务能否运行 Apache Beam?
能,适用于 Apache Flink 的亚马逊托管服务支持使用 Apache Beam 构建的串流应用程序。您可以使用 Java 构建 Apache Beam 串流应用程序并在不同的引擎和服务中运行它们,包括在适用于 Apache Flink 的亚马逊托管服务上使用 Apache Flink。您可以在《适用于 Apache Flink 的亚马逊托管服务开发人员指南》中找到有关支持的 Apache Flink 和 Apache Beam 版本的信息。
在托管笔记本电脑中构建适用于 Apache Flink Studio 应用程序的亚马逊托管服务
如何开发 Studio 应用程序?
您可以从适用于 Apache Flink Studio 的亚马逊托管服务、Amazon Kinesis Data Streams 或 Amazon MSK 控制台开始,只需几步即可启动一个无服务器笔记本,从而迅速查询数据流并开展交互式数据分析。
交互式数据分析:您可以使用 SQL、Python 或 Scala 等语言在笔记本中编写代码,以同您的流式数据交互,查询将在数秒内响应。您可以使用内置的可视化功能在您的笔记本内部探索数据、查看流式数据的实时见解,并开发出由 Apache Flink 提供支持的流处理应用程序。
当您的代码已准备好作为生产应用程序运营时,只需一步,就能转化成流处理应用程序,每秒可处理数 GB 的数据,并且无需服务器。
流处理应用程序:准备好将代码推广到生产环境后,您可以通过单击笔记本界面中的“作为流处理应用程序部署”,或者在 CLI 中发出单个命令来构建代码。Studio 会处理大规模运行流处理应用程序所需的所有基础设施管理,并启用自动扩缩功能和持久状态,就像在适用于 Apache Flink 应用程序的亚马逊托管服务中一样。
应用程序代码是怎样的?
服务支持哪些 SQL 操作?
您可以执行如下所示的 SQL 操作:
- 扫描和筛选(SELECT、WHERE)
- 聚合(GROUP BY、GROUP BY WINDOW、HAVING)
- 设置(UNION、UNIONALL、INTERSECT、IN、EXISTS)
- 排序(ORDER BY、LIMIT)
- 联接(INNER、OUTER、Timed Window — BETWEEN、AND、与暂存表联接 — 跟踪一段时间内的变化的表)
- 前 N 个
- 去重复
- 模式识别
其中某些查询功能,诸如 GROUP BY、OUTER JOIN 和 前 N 个均为串流数据的“结果更新”,意味着在处理串流数据时,这些结果将持续更新。此外,还支持 CREATE、ALTER 和 DROP 等其他 DDL 语句。有关查询和示例的完整列表,请参阅 Apache Flink 查询文档。
服务能为 Python 和 Scala 提供哪些支持?
Apache Flink 的 Table API 能够采用 Python 语句和 Scala 表达通过语言整合为 Python 和 Scala 提供支持。其所支持的操作与 SQL 操作十分类似,包括选择、排序、分组、加入、筛选和窗口化。我们的开发人员指南中包含操作和示例的完整列表。
支持哪些版本的 Apache Flink 和 Apache Zepplin?
要了解有关支持的 Apache Flink 版本的更多信息,请访问适用于 Apache Flink 的亚马逊托管服务发行说明页面。本页还包括适用于 Apache Flink 的亚马逊托管服务支持的 Apache Zeppelin、Apache Beam、Java、Scala、Python 和 AWS SDK 的版本。
适用于 Apache Flink Studio 应用程序的亚马逊托管服务默认支持哪些集成?
- 数据来源:Amazon Managed Streaming for Apache Kafka (Amazon MSK)、Amazon Kinesis Data Streams、Amazon S3
- 目标位置,或 sink:Amazon MSK、Amazon Kinesis Data Streams 和 Amazon S3
是否支持自定义集成?
服务水平协议
适用于 Apache Flink 的亚马逊托管服务 SLA 提供哪些保证?
怎样确定我是否有资格获得 SLA 服务抵扣?
对于您运行任务所在的可用区,如果同一个 AWS 区域内有一个以上的可用区在任何月度账单周期内的月度正常运行时间百分比没有达到 99.9%,那么您就有资格获得适用于 Apache Flink 的亚马逊托管服务 SLA 规定的适用于 Apache Flink 的亚马逊托管服务的 SLA 服务抵扣金。如需所有 SLA 条款与条件的完整详细信息,以及如何提交索赔的详细信息,请访问适用于 Apache Flink 的亚马逊托管服务 SLA 详细信息页面。