一般性问题

问:什么是 Amazon Kinesis Data Analytics?
Amazon Kinesis Data Analytics 是使用 Apache Flink 实时转换和分析流数据最简单的方法。Apache Flink 是一种处理数据流的开源框架和引擎。Kinesis Data Analytics 降低了构建、管理 Apache Flink 应用程序以及将其与其他 AWS 服务集成的复杂性。
 
Kinesis Data Analytics 会处理运行流式处理应用程序所需的任何事项,且会自动扩展以匹配传入数据的大小和吞吐量。使用 Kinesis Data Analytics 无需管理服务器,没有最低费用或设置成本,且只需为流式处理应用程序使用的资源付费。
 
问:什么是实时流处理?为什么我需要使用它?
由于实时数据源的爆发式增长,各家公司正以前所未有的速度获取着数据。无论您是需要处理来自移动应用程序和 Web 应用程序的日志数据、来自电子商务平台的购买数据,还是来自 IoT 设备的传感器数据,实时获取数据能够有助于您了解客户、组织和业务的实时动态的消息。
 
问:Kinesis Data Analytics 有何用途?
您可以在许多使用案例中使用 Kinesis Data Analytics 来连续处理数据,并在几秒钟或几分钟内获得洞察,而不需要等待几天甚至几周。Kinesis Data Analytics 让您能够快速构建端到端流处理应用程序,以用于日志分析、点击流分析、物联网(IoT)、广告技术和游戏等等。四种最常见的使用案例流式抽取-转换-加载 (ETL)、持续指标生成、响应实时分析以及数据流的交互式查询。
 
流式 ETL
流式 ETL 应用程序使您能够在加载数据湖或数据仓库之前实时清理、扩充、组织和转换原始数据,减少或消除批处理 ETL 步骤。这些应用程序可以在交付之前将小记录缓冲到更大的文件中,并在各个流和表之间建立复杂的连接。例如,您可以构建一个应用程序,以连续读取存储在 Amazon Managed Streaming for Apache Kafka (Amazon MSK)中的 IoT 传感器数据,按传感器类型组织数据,删除重复数据,按照指定架构规范化数据,然后将数据交付到 Amazon Simple Storage Service(Amazon S3)。
 
持续指标生成
借助持续指标生成应用程序,您可以监控和了解您的数据在一段时间内的趋势。您的应用程序可以将流数据汇总为关键信息,并将其与报表数据库和监控服务无缝集成,从而实时为您的应用程序和用户服务。借助 Kinesis Data Analytics,您可以使用 Apache Flink 代码或 SQL 在一段时间内持续生成时间序列分析。例如,您可以通过计算每分钟排名靠前的玩家并将结果发送至 Amazon DynamoDB,来创建手机游戏的实时排行榜。或者,您可以每五分钟计算一次唯一身份网站访客的数量并将处理结果发送至 Amazon Redshift 来跟踪网站的流量。
 
响应实时分析
响应实时分析应用程序在某些指标达到预定义阈值时(或者更超前的情况是,在您的应用程序使用机器学习(ML)算法检测到异常情况时)发送实时警报或通知。这些应用程序让您能够即刻对业务变化做出响应,例如,预测移动应用的用户弃用趋势,以及识别降级系统。例如,这种应用程序可计算一段时间内面向客户的 API 的可用性或成功率,然后将相应结果发送至 Amazon CloudWatch。您还可以构建另一种应用程序,以查找满足某些条件的事件,然后使用 Amazon Kinesis Data Streams 和 Amazon Simple Notification Service (SNS) 自动通知相应客户。
 
数据流交互式分析
交互式分析能够实时对流数据进行探究。借助专属查询或程序,您可以从 Amazon MSK 或 Amazon Kinesis Data Streams 查看数据流,并将数据在这些流媒体中的活动情况可视化。例如,您可以查看在一段时间内计算平均值的实时指标的行为,并将经过整合的数据发送到您选择的目标。交互式分析还有助于流处理应用程序的迭代开发。您所搭建的查询将随着新数据的到来持续更新。有了 Kinesis Data Analytics Studio,您就可以部署这些查询以使其持续运行,同时启用自动扩展和持久状态备份。
 
问:如何开始使用适用于 Kinesis Data Analytics 的 Apache Flink 应用程序?
登录 Amazon Kinesis Data Analytics 控制台,然后创建一个新的流式处理应用程序。您还可以使用 AWS CLIAWS SDK。 创建应用程序之后,选择您最喜欢的集成开发环境,连接到 AWS,并安装使用您所选语言的开源 Apache Flink 库和 AWS SDK。Apache Flink 是一种处理数据流的开源框架和引擎,也是 AWS SDK。可扩展库包括超过 25 个预构建的流式处理运算符(如窗口和汇总)以及 AWS 服务集成(如 Amazon MSK、Amazon Kinesis Data Streams 和 Amazon Kinesis Data Firehose)。构建完成后,将代码上传至 Kinesis Data Analytics,该服务会处理持续运行实时应用程序所需的任何事项,包括自动扩展以匹配传入数据的大小和吞吐量。
 
问:如何开始使用适用于 Kinesis Data Analytics 的 Apache Beam 应用程序?
使用 Apache Beam 创建 Kinesis Data Analytics 应用程序与开始使用 Apache Flink 非常相似。请遵照上述问题中的说明,并确保按照开发人员指南中的说明安装应用程序在 Apache Beam 上运行所需的任何组件。请注意,Kinesis Data Analytics 只有在 Apache Beam 上运行时才支持 Java SDK。
 
问:我要如何开始使用 Amazon Kinesis Data Analytics Studio?
您可以从 Amazon Kinesis Data Analytics 控制台开始,然后创建一个新的 Studio 笔记本。等您开启了笔记本后,便可以在 Apache Zeppelin 中打开,从而迅速以 SQL、Python 或 Scala 语言写代码了。您可以通过使用内置集成的 Amazon Kinesis Data Streams、Amazon MSK 和 Amazon S3 的笔记本界面以及具有自定义连接器的各种其他源,以交互方式开发应用程序。您可以在 Flink SQL 和 Table API 中使用 Apache Flink 支持的所有运算符来执行数据流的临时查询,以及开发您的流处理应用程序。准备就绪后,只需点击几下,您就可以轻松地将代码提升为具有自动扩展和持久状态的流处理应用程序,并可持续运行。
 
问:如何开始使用 Kinesis Data Analytics for SQL?
登录 Amazon Kinesis Data Analytics 控制台,然后创建一个新的流式处理应用程序。您还可以使用 AWS CLIAWS SDK。 您可以按照以下三个简单的步骤构建端到端应用程序:1) 配置传入流数据;2) 编写 SQL 查询;3) 指向要将结果加载到其中的位置。Kinesis Data Analytics 可识别 JSON、CSV 和 TSV 等标准数据格式,并自动创建基准架构。您可以细化该架构,或者,如果您的数据是非结构化数据,您可以使用我们的直观架构编辑器定义新的架构。然后,该服务会将此架构应用于输入流,让其看起来像一个可持续更新的 SQL 表,这样您便可以针对该架构编写标准 SQL 查询。您可以使用我们的 SQL 编辑器构建查询。
 
SQL 编辑器具有所有附属功能,包括针对实时数据的语法检查和测试。此外,我们还为您提供了相关模板。此类模板可提供所有内容(从简单的流筛选器到高级的异常侦测与 Top-K 分析)的 SQL 代码。Kinesis Data Analytics 负责预置所有基础设施并对其进行弹性扩展,以便处理所有数据吞吐量。您无需规划、预置或管理基础设施。
 
问:Kinesis Data Analytics 有哪些限制?
Kinesis Data Analytics 可对应用程序进行弹性扩展,以适应源流的数据吞吐量和大多数情况下的查询复杂性。有关服务限制的详细信息,请查看《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 限制。有关 Apache Flink 应用程序服务 限制的详细信息,请查看《Amazon Kinesis Data Analytics for Apache Flink 开发人员指南》中的“限制”部分。
 
问:Amazon Kinesis Data Analytics 是否支持架构注册?
是,使用 Apache Flink DataStream 连接器,适用于 Apache Flink 应用程序的 Amazon Kinesis Data Analytics 可以使用 AWS Glue 的一项无服务器功能 AWS Glue Schema Registry。您可以将 Apache Kafka/Amazon MSK 和 Amazon Kinesis Data Streams 作为接收器和源与适用于 Apache Flink 的 Amazon Kinesis Data Analytics 工作负载集成。访问架构注册表 用户文档开始使用并了解更多信息。

重要概念

问:什么是 Kinesis Data Analytics 应用程序?
该应用程序就是您使用的 Kinesis Data Analytics 实体。Kinesis Data Analytics 应用程序可以实时持续读取并处理流数据。您可以使用 Apache Flink 支持的语言编写应用程序代码,以处理传入的流数据并生成输出。然后,Kinesis Data Analytics 会将相应输出写入配置好的目的地。
 
每个应用程序包括三个主要的组件:
 
输入 – 应用程序的流源。在输入配置中,您需要将流源映射至应用程序内数据流。数据从数据源流向应用程序内数据流。您可以使用应用程序代码处理来自这些应用程序内数据流的数据,然后将处理后的数据发送到后续的应用程序内数据流或目的地。您可以在应用程序代码内添加适用于 Apache Flink 应用程序和 Studio 笔记本的输入,并通过 API 添加适用于 Kinesis Data Analytics for SQL 应用程序的输入。
 
应用程序代码 – 一系列用于处理输入并生成输出的 Apache Flink 运算符或 SQL 语句。最简单的应用程序代码可以是单个 Apache Flink 运算符或 SQL 语句,它从与流源关联的应用程序内数据流读取数据,并写入与输出关联的应用程序内数据流。对于 Studio 笔记本,这可以是一个简单的 Flink SQL 选择查询,结果将显示在笔记本的上下文中。您可以使用支持的语言编写适用于 Apache Flink 的 Kinesis Data Analytics 应用程序、Studio 笔记本或是 SQL 代码,将初始应用程序内数据流分割为多个流,并为 Kinesis Data Analytics for SQL 应用程序对这些单独的流应用额外的逻辑。
 
输出 – 您可以创建一个或多个应用程序内流以存储中间结果。然后,您可以根据需要配置应用程序输出,以便将来自特定应用程序内流的数据保存到外部目标。您可以在应用程序代码内添加适用于 Apache Flink 应用程序和 Studio 笔记本的输出,以及添加到 Kinesis Data Analytics for SQL 的应用程序。
 
问:什么是应用程序内数据流?
应用程序内数据流是一种可在应用程序中持续存储数据以供处理的实体。您的应用程序持续向应用程序内数据流写入,并从中读取数据。对于 Apache Flink 和 Studio 应用程序,可以通过流运算符来处理数据,借此与应用程序内流交互。运算符将一个或多个数据流转换为新的数据流。对于 SQL 应用程序,您可以使用 SQL 语句,采用与 SQL 表交互的方式与应用程序内部流交互。将 SQL 语句应用于一个或多个数据流,并将结果插入新的数据流。
 
问:支持何种应用程序代码?
Kinesis Data Analytics 支持通过 Java、Scala 和 Python、使用开源 Apache Flink 库和您自己的自定义代码构建的应用程序。Kinesis Data Analytics 还支持通过 Java、使用开源 Apache Beam 库和您自己的客户代码构建的应用程序。Kinesis Data Analytics Studio 支持使用兼容 Apache Flink 的 SQL、Python 和 Scala 代码写作。

管理应用程序

问:我如何监控 Kinesis Data Analytics 应用程序的运行和性能?
AWS 提供各种工具供您监控 Kinesis Data Analytics 应用程序,包括至适用于 Apache Flink 应用程序的 Flink 控制面板的访问。您可以配置其中的一些工具以便进行监控。有关如何监控应用程序的更多信息,请参阅:

问:我如何管理和控制对 Kinesis Data Analytics 应用程序的访问权限?
Kinesis Data Analytics 需要获取相应权限,才能从您在应用程序中指定的流数据源中读取记录。此外,Kinesis Data Analytics 还需要获取相应权限,才能将应用程序输出写入您在应用程序输出配置中指定的目标位置。您可以通过创建 Kinesis Data Analytics 可以担任的 AWS Identity and Access Management(IAM)角色来授予这些权限。您授予该角色的权限决定着 Kinesis Data Analytics 服务在担任相应角色时可执行的操作。有关更多信息,请参阅:

  • 《Amazon Kinesis Data Analytics for Apache Flink 开发人员指南》中的授予权限
  • 《Amazon Kinesis Data Analytics Studio 开发人员指南》中的授予权限
  • 《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的授予权限

问:Kinesis Data Analytics 如何扩展应用程序?
Kinesis Data Analytics 可对应用程序进行弹性扩展,以适应源流的数据吞吐量和大多数情况下的查询复杂性。Kinesis Data Analytics 以 Amazon Kinesis 处理单元(KPU)的形式预置容量。一个 KPU 为您提供 1 个 vCPU 和 4GB 内存。
 
对于 Apache Flink 应用程序以及 Studio 笔记本,Kinesis Data Analytics 每 KPU 分配 50GB 的运行应用程序存储空间,您的应用程序将这些存储空间用于检查点,也可以通过临时磁盘使用它们。检查点是正在运行的应用程序的最新备份,应用程序中断时可立即使用检查点来恢复。您还可以使用 API 中的 Parallelism 和 ParallelismPerKPU 参数,控制 Kinesis Data Analytics for Apache Flink 应用程序任务(例如从源中读取或执行运算符)的并行执行。Parallelism 定义任务并发实例的数量。所有运算符、源和接收器都按定义的并行数量执行,默认情况下是 1。Parallelism per KPU 定义应用程序每 KPU(Kinesis 处理单元)可以调度的并行任务数量,默认情况下是 1。有关更多信息,请参阅《Amazon Kinesis Data Analytics for Apache Flink 开发人员指南》中的 扩展
 
对于 SQL 应用程序,每个流源均会映射到相应的应用程序内流中。尽管这对许多客户来说并非是必须的,但您可以指定输入并行机制参数,来增加您的源映射到的应用程序内部流的数量,从而以更高效的方式使用 KPU。Kinesis Data Analytics 可按照您指定的应用程序内部流的数量均匀地分配流数据源的分区(例如 Amazon Kinesis 数据流的分区)。例如,如果您使用一个拥有 10 个分区的 Amazon Kinesis 数据流作为流数据源,并且指定了两个输入并行机制,则 Kinesis Data Analytics 会将 5 个 Amazon Kinesis 分区分配给两个名称分别为“SOURCE_SQL_STREAM_001”和“SOURCE_SQL_STREAM_002”的应用程序内部流。有关更多信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 配置应用程序输入
 
问:与构建和管理 Kinesis Data Analytics 应用程序相关的最佳实践有哪些?
有关 Apache Flink 最佳实践的信息,请参阅《Amazon Kinesis Data Analytics for Apache Flink 开发人员指南》中的 最佳实践部分。这部分将讨论容错能力、性能、日志记录、编码等方面的最佳实践。
 
有关 Amazon Kinesis Data Analytics Studio 最佳实践的信息,请参阅《Amazon Kinesis Data Analytics Studio 开发人员指南》中的“最佳实践”部分。这部分包含了 SQL、Python 和 Scala 应用程序的最佳实践、将您的代码部署为持续运行流处理应用程序的要求、性能、日志记录等更多信息。
 
有关 SQL 最佳实践的信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 最佳实践部分。这部分将介绍如何管理应用程序、定义输入模式、连接到输出以及编写应用程序代码。
 
问:我可以通过 Kinesis Data Analytics Apache Flink 应用程序访问 Amazon VPC 后端的资源吗?
可以。您可以访问 Amazon VPC 后端的资源。您可以在《Amazon Kinesis Data Analytics 开发人员指南》的 使用 Amazon VPC 部分了解如何针对 VPC 访问配置应用程序。
 
问:单个 Kinesis Data Analytics Apache Flink 应用程序可以访问多个 VPC 吗?
不可以。如果指定多个子网,则所有子网都必须位于同一个 VPC 中。您可以通过在 VPC 之间建立对等连接来连接到其他 VPC。
 
问:连接到 VPC 的 Kinesis Data Analytics Apache Flink 应用程序也可以访问互联网和 AWS 服务终端节点吗?
在默认配置下,配置为可访问特定 VPC 中资源的 适用于 Apache Flink 的 Kinesis Data Analytics 应用程序和 Kinesis Data Analytics Studio 笔记本无法访问互联网。您可以在《Amazon Kinesis Data Analytics 开发人员指南》的 互联网和服务访问部分了解如何为您的应用程序配置互联网访问权限。

定价与计费

问:Kinesis Data Analytics 如何收费?
使用 Amazon Kinesis Data Analytics,您只需按实际用量付费。使用 Amazon Kinesis Data Analytics 无需预置资源,也没有前期成本。

我们根据用于运行流应用程序的 Amazon Kinesis 处理单元 (KPU) 的数量,按小时收取费用。一个 KPU 表示一个流处理容量单元,由 1 个 vCPU 计算和 4GB 内存组成。Amazon Kinesis Data Analytics 会自动调整流式处理应用程序所需的 KPU 数量,因为内存和计算需求会因处理复杂性和处理流数据的吞吐量而异。

对于 Apache Flink 和 Apache Beam 应用程序,每个应用程序要为应用程序编排收取一个额外的 KPU 费用。Apache Flink 和 Apache Beam 应用程序会被收取运行应用程序存储和持久应用程序备份的费用。运行应用程序存储会应用于 Amazon Kinesis Data Analytics 中的状态处理功能,并按每月每 GB 收费。持久应用程序备份是可选项,按每月每 GB 收费,并为应用程序提供基于时间点恢复功能。

对于 Amazon Kinesis Data Analytics,在开发或交互模式下,您需要为应用程序编排所用的额外 KPU 付费,交互式开发也需要使用一个 KPU。您还需要为运营应用程序存储空间付费。对于持久应用程序备份,您无需承担费用。
 
有关定价的更多信息,请参阅 Amazon Kinesis Data Analytics 定价页面
 
问:Kinesis Data Analytics 是否包含在 AWS 免费套餐中?
不。Kinesis Data Analytics 目前不包含在 AWS 免费套餐中。AWS 免费套餐是一项提供了免费试用一系列 AWS 服务的计划。
 
问:我是否需要为处于运行状态但未处理来自源的任何数据的 Kinesis Data Analytics 应用程序付费?
 
对于 Apache Flink 和 Apache Beam 应用程序,如果您的 Kinesis Data Analytics 应用程序处于运行状态,则您最低需要支付两个 KPU 和 50GB 运行应用程序存储的费用。
 
对于 Kinesis Data Analytics Studio 笔记本,如果您的应用程序处于运行状态,则您最低需要支付三个 KPU 和 50GB 运行应用程序存储的费用。
 
对于 SQL 应用程序,如果您的 Kinesis Data Analytics 应用程序处于运行状态,则您最低需要支付一个 KPU 的费用。
 
问:除了 Kinesis Data Analytics 费用之外,我是否还需要支付任何其他费用?
Kinesis Data Analytics 是一个完全托管的流处理解决方案,独立于其从中读取数据的流源和向其中写入处理数据的目标。对于在应用程序中读取和写入的服务,将另行收费。
问:什么是 Apache Flink?
Apache Flink 是一种开源框架和引擎,用于流和批量数据处理。因为它提供功能强大的运算符,解决了核心流问题,例如准确复制处理过程,所以让流应用程序的构建变得简单。Apache Flink 为数据流上的分布式计算提供了数据分发、通信和容错能力。
 
问:如何开发应用程序?
首先下载开源库,包括 AWS SDK、Apache Flink 和 AWS 服务连接器。请参阅《Amazon Kinesis Data Analytics for 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"));
问:如何使用运算符?
运算符以应用程序数据流作为输入,将处理过的数据作为输出发送至应用程序数据流。运算符可以连接在一起,通过多个步骤构建应用程序,并且不需要具备丰富的分布式系统知识即可实现和运算。
 
问:支持哪些运算符?
Kinesis Data Analytics for Apache Flink 包含来自 Apache Flink 的超过 25 个运算符,这些运算符可用于解决各种各样的使用案例问题,包括映射、KeyBy、汇总、Window Join 和 Window。映射允许您执行任意处理,从传入的数据流中获取一个元素并生成另一个元素。KeyBy 使用指定的键有逻辑地组织数据,让您能够同时处理类似的数据点。聚合跨多个键(如 sum、min 和 max)进行处理。Window Join 在给定的键和窗口上将两个数据流连接在一起。Window 使用键和通常基于时间的运算来分组日期,例如计算五分钟内唯一项的数量。
 
如果这些运算符不能满足您的需求,您可以构建自定义运算符。您可以在《Amazon Kinesis Data Analytics Apache Flink 开发人员指南》的“运算符”部分查看更多示例。您可以在 Apache Flink 文档的 运算符部分查看完整的 Apache Flink 运算符列表。
 
问:适用于 Apache Flink 应用程序的 Kinesis Data Analytics 支持哪些集成?
您可以使用最少的代码设置预先构建的集成,或者构建您自己的集成来连接几乎任何数据源。基于 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 Kafka、Apache Casssandra 和 Elasticsearch 等。
 
问:适用于 Apache Flink 应用程序的 Kinesis Data Analytics 能跨数据流和/或主题复制数据吗?
可以。您可以使用 Kinesis Data Analytics Apache Flink 应用程序在 Amazon Kinesis Data Streams、Amazon MSK 和其他系统之间复制数据。我们的文档中提供的 示例说明了如何从一个 Amazon MSK 主题读取数据,然后写入另一个主题。
 
问:是否支持自定义集成?
您可以通过构建一组原语向应用程序添加源或目标,这些原语使您能够从文件、目录、套接字或通过网络访问的任何对象进行读写。Apache Flink 为 数据源 数据接收器提供这些原语。这些原语自带一些配置,例如,能够连续或一次、异步或同步读取和写入数据。例如,您可以通过扩展基于现有文件的源集成来设置一个应用程序,以连续从 Amazon S3 读取数据。
 
问:Kinesis Data Analytics for Apache Flink 应用程序提供何种交付模式?
如果应用程序是使用幂等运算符(包括源和 sink)构建的,那么 Kinesis Data Analytics 中的 Apache Flink 应用程序将使用“仅一次”交付模型。这意味着处理后的数据只会对下游结果产生一次影响。检查点保存当前应用程序状态,并使适用于 Apache Flink 应用程序的 Kinesis Data Analytics 能够恢复应用程序的状态,从而提供与无故障执行相同的语义。适用于 Apache Flink 应用程序的检查点通过 Apache Flink 的 检查点功能提供。默认情况下,适用于 Apache Flink 应用程序的 Kinesis Data Analytics 使用 Apache Flink 的“仅一次”语义。如果您使用采用 Apache Flink 的仅一次语义的源、运算符和 sink 来设计应用程序,那么您的应用程序将支持仅一次处理语义。
 
问:我能够从应用程序存储访问本地存储吗?
可以。适用于 Apache Flink 应用程序的 Kinesis Data Analytics 为您的应用程序提供了每 Kinesis 处理单元 (KPU) 50GB 的运行应用程序存储空间。Kinesis Data Analytics 为您的应用程序扩展存储。运行应用程序存储使用检查点保存应用程序状态。也可以供您的应用程序代码访问以用作临时磁盘,用于缓存数据或用于任何其他目的。Kinesis Data Analytics 可以随时从运行应用程序存储中删除不是通过检查点保存的数据(例如:运算符、源、sink)。所有存储在运行应用程序存储中的数据都会在闲置时加密。
 
问题:适用于 Apache Flink 的 Kinesis Data Analytics 如何自动备份我的应用程序?
Kinesis Data Analytics 使用检查点和快照,自动备份您的运行应用程序的状态。检查点保存当前应用程序状态,并使 Kinesis Data Analytics for Apache Flink 应用程序能够恢复应用程序的状态,从而提供与无故障执行相同的语义。检查点使用正在运行的应用程序存储。快照保存应用程序的时间点恢复点。快照采用持久的应用程序备份。
 
问:何为应用程序快照?
快照让您能够创建并将应用程序恢复到先前某个时间点的状态。这让您能够保留之前的应用程序状态并随时回滚应用程序。您可以在 0 到数千个快照的范围内控制拥有的快照数量。快照使用持久的应用程序备份,而 Kinesis Data Analytics 根据它们的大小收费。Kinesis Data Analytics 默认对快照中保存的数据加密。您可以通过 API 删除单个快照,通过删除应用程序删除所有快照。
 
问:支持哪些版本的 Apache Flink?
Amazon Kinesis Data Analytics for Apache Flink 应用程序支持 Apache Flink 1.6、1.8
和 1.11(推荐)。Kinesis Data Analytics 中的 Apache Flink 1.11 支持 Java SDK 版本 11、Python 3.7 和 Scala 2.1.2。您可以在《AWS 开发人员指南》中的 创建应用程序部分中找到详细信息。
 
问:Kinesis Data Analytics for Flink 1.13 支持哪些组件版本?
Kinesis Data Analytics 中的 Apache Flink 1.13 支持 Java 开发工具包版本 11、Python 3.8 和 Scala 2.12。您可以在《AWS 开发人员指南》中的 创建应用程序部分中找到详细信息。
 
问:Kinesis Data Analytics for Apache Flink 应用程序能否在 Apache Beam 上运行?
是,支持使用 Apache Beam Java SDK 版本 2.23 构建的流式处理应用程序。您可以用 Java 构建 Apache Beam 流式处理应用程序,并使用 Amazon Kinesis Data Analytics 上的 Apache Flink 1.8、本地运行的 Apache Spark 和 Apache 支持的其他执行引擎运行。
 
问:Kinesis Data Analytics for Apache Flink 应用程序能否在 Apache Beam 上运行?
Apache Beam 是开源统一模型,用于定义可以跨多个执行引擎执行的流和批数据处理应用程序。

构建 Amazon Kinesis Analytics Studio 应用程序

问:如何开发应用程序?
您可以从 Amazon Kinesis Data Analytics Studio、Amazon Kinesis Data Streams 或 Amazon MSK 控制台开始,只需轻点几下鼠标启动一个无服务器笔记本,迅速查询数据流并开展交互式数据分析。

交互式数据分析:您可以使用 SQL、Python 或 Scala 等语言在笔记本中编写代码,以同您的流式数据交互,查询将在数秒内响应。您可以使用内置的可视化功能在您的笔记本内部探索数据并查看流式数据的实时见解,同时还能轻易地开发出由 Apache Flink 提供支持的流处理应用程序。

当您的代码已准备好作为生产应用程序运营时,只需轻轻一点,就能转化成流处理应用程序,每秒可处理数 GB 的数据,并且无需服务器。

流处理应用程序:当您准备好将代码推广进行生产时,只需点击几下鼠标即可构建您的代码。您可以在笔记本界面点击“作为流处理应用程序部署”或在 CLI 中发布一个单一指令,Studio 即会接手所有必要的基础设施管理活动,为您大规模运行流处理应用程序。您无需启用自动伸缩及持久性状态,就像 Amazon Kinesis Data Analytics for Apache Flink 应用程序一样。

问:应用程序代码是怎样的?
您可以借助 Apache Flink 的 Table API,利用您偏好的语言(如 SQL、Python 或 Scala)在笔记本中编写代码。Table API 是一种高度抽象化、关系化的 API,能够支持 SQL 能力的超集。它将提供诸多熟悉的运营功能,例如选择、筛选、加入、按条件分组、整合等,此外还有窗口化等流式特定概念。您可以使用 %<interpreter> 来指定需要在笔记本部分中使用的语言,在不同语言之间切换也十分简便。编译程序是 Apache Zeppelin 的插件功能,可以帮助开发人员为笔记本的各个部分指定语言或数据处理引擎。您还可以打造由用户定义的功能,并引用这些功能来提升代码的功能。

问:服务支持哪些 SQL 操作?
您可以执行 SQL 运营操作,例如扫描与筛选(SELECT、WHERE)、整合(GROUP BY、GROUP BY WINDOW、HAVING)、设置(UNION、UNIONALL、INTERSECT、IN、EXISTS)、排序(ORDER BY、LIMIT)、Joins(INNER、OUTER、Timed Window –BETWEEN、AND、加入时态表 – 一种随时跟踪变化的表格)、前 N 个、去重以及模式识别。其中某些查询功能,诸如 GROUP BY、OUTER JOIN 和 前 N 个均为流式数据的“结果更新”,意味着在处理流式数据时,这些结果将持续更新。此外,还支持 CREATE、ALTER 和 DROP 等其他 DDL 语句。如需了解有关查询和示例的完整列表,请参阅 https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sql/queries.html

问:服务能为 Python 和 Scala 提供哪些支持?

Apache Flink 的 Table API 能够采用 Python 语句和 Scala 表达通过语言整合为 Python 和 Scala 提供支持。其所支持的操作与 SQL 操作十分类似,包括选择、排序、分组、加入、筛选和窗口化。关于运营操作和示例的完整列表请参阅:https://ci.apache.org/projects/flink/flink-docs- release-1.11/dev/table/tableApi.html

问:支持哪些版本的 Apache Flink 和 Apache Zepplin?

Kinesis Data Analytics Studio 支持 Apache Flink 1.11 和 Apache Zepplin 0.9。

问:Kinesis Data Analytics 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 代码(Python、Scala 或 Java)来配置额外的整合功能,以借助包括目标位置在内的 Apache Flink 支持整合功能定义连接,这些功能包括 Amazon OpenSearch Service、Amazon ElastiCache for Redis、Amazon Aurora、Amazon Redshift、Amazon DynamoDB 和 Amazon Keyspaces 等等。当您创建或配置您的 Studio 应用程序时,您可以为这些自定义的连接器附加可执行文件。

问:我是该使用 Kinesis Data Analytics Studio 还是 Kinesis Data Analytics SQL 进行开发?
我们推荐您首先使用 Kinesis Data Analytics Studio,因为它能够提供更为完善的流处理体验,并且只需确切一次处理。Kinesis Data Analytics Studio 能够根据您所选择的语言(SQL、Python 及 Scala)提供流处理应用程序开发支持,扩展至 GB 每秒的处理规模,支持按小时甚至按天计算的长时间运行计算,在数秒内执行代码更新,处理多个输入流,并与包括 Amazon Kinesis Data Streams 和 Amazon MSK 在内的多种输入流共同工作。

打造 Kinesis Data Analytics SQL 应用程序

对于新项目,我们更推荐您使用全新的 Kinesis Data Analytics Studio,而不是适用于 SQL 应用程序的 Kinesis Data Analytics。Kinesis Data Analytics Studio 结合了各种易用的高级分析功能,助您在几分钟内打造出成熟而完善的流处理应用程序。

为 SQL 应用程序配置输入

问:Kinesis Data Analytics SQL 应用程序支持哪些输入?
Kinesis Data Analytics 中的 SQL 应用程序支持两种类型的输入:流数据源和参考数据源。流数据源是一种持续生成的数据,可供应用程序读取以便进行处理。参考数据源是一种静态数据,应用程序可使用这类数据来丰富来自流源的数据。每个应用程序最多可拥有一个流数据源和一个参考数据源。应用程序会持续读取来自流数据源(包括 Amazon Kinesis Data Streams 或 Amazon Kinesis Data Firehose)的新数据并对其进行处理。应用程序会读取完整的参考数据源(包括 Amazon S3),以便通过 SQL JOIN 丰富流数据源。
 
问:什么是参考数据源?
参考数据源是一种静态数据,应用程序可使用这类数据来丰富来自流源的数据。您将参考数据作为对象存储在 S3 存储桶中。SQL 应用程序启动后,Kinesis Data Analytics 可读取 S3 对象并创建应用程序内 SQL 表以存储参考数据。随后,您的应用程序代码可以将它与应用程序内部流连接起来。您可以通过调用 UpdateApplication API 来更新 SQL 表中的数据。
 
问:如何在 SQL 应用程序中设置流数据源?
流数据源可以是 Amazon Kinesis 数据流或 Amazon Kinesis Data Firehose 交付流。在来自流数据源的新数据到达后,Kinesis Data Analytics SQL 应用程序会以实时方式持续读取这些数据。通过应用程序内部流可在 SQL 代码中访问这些数据。应用程序内部流的行为类似于 SQL 表,因为您可以创建、插入和从中选择。但是不同之处在于,应用程序内部流会通过来自流数据源的新数据持续地更新。
 
您可以使用 AWS 管理控制台来添加流数据源。您可以在《Kinesis Data Analytics for SQL 开发人员指南》中的 配置应用程序输入部分了解更多有关源的信息。
 
问:如何在 SQL 应用程序中设置参考数据源?
参考数据源可以是 Amazon S3 对象。Kinesis Data Analytics SQL 应用程序在开始运行后可读取完整的 S3 对象。通过表可在 SQL 代码中访问这些数据。参考数据源的一个最常用案例是通过 SQL JOIN 丰富来自流数据源的数据。 
 
借助 AWS CLI,您可以通过指定 S3 存储桶、对象、IAM 角色和关联的架构来添加参考数据源。当您启动 Kinesis Data Analytics 后,该应用程序会加载此数据,并会在您每次发出任何更新 API 调用时重新加载。
 
问:支持 SQL 应用程序哪些数据格式?
Kinesis Data Analytics 中的 SQL 应用程序可使用 DiscoverInputSchema API 检测架构并自动解析 UTF-8 编码的 JSON 和 CSV 记录。在将记录插入应用程序内部流的过程中,此架构会应用于从流中读取的数据。 
 
对于其他 UTF-8 编码的数据(未使用分隔符或使用 CSV 之外的其他分隔符)或者在发现 API 未完全发现该架构的情况下,您可以通过交互式架构编辑器定义架构或使用字符串处理函数来构建数据。有关更多信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 使用架构发现功能和相关编辑功能
 
问:输入流如何向 SQL 代码公开?
面向 SQL 的 Kinesis Data Analytics 可应用您指定的架构并将您的数据插入流源的一个或多个应用程序内部流和参考源的一个 SQL 表。应用程序内部流的默认数量即可满足您的大多数使用案例需求的数量。按照 CloudWatch 指标 MillisBehindLatest 的定义,如果您发现应用程序未与源流中的最新数据保持一致,则应增加该数量。所需的应用程序内部流的数量会受到源流的吞吐量以及查询复杂性的影响。用于指定映射到源流的应用程序内部流数量的参数称为“输入并行机制”。
 

编写 SQL 应用程序代码

问:SQL 应用程序代码是怎样的?
应用程序代码是一系列用于处理输入并生成输出的 SQL 语句。SQL 语句对应用程序内部流和参考表进行操作。应用程序内部流类似于一个持续更新的表,您可以对其执行“SELECT”和“INSERT SQL”操作。您配置的源和目标通过应用程序内部流向 SQL 代码公开。您还可以创建更多应用程序内部流以存储中间查询结果。
 
您可以通过以下模式来使用应用程序内部流。

  • 在 INSERT 语句环境中,应始终使用 SELECT 语句。在选择行时,您可将结果插入另一应用程序内部流中。
  • 在 Pump 环境中使用 INSERT 语句。
  • 您可以使用 Pump 来使 INSERT 语句连贯并写入应用程序内部流中。

以下 SQL 代码可提供简单且可正常运行的应用程序:
CREATE OR REPLACE STREAM "DESTINATION_SQL_STREAM" (
    ticker_symbol VARCHAR(4),
    change DOUBLE,
    price DOUBLE);

CREATE OR REPLACE PUMP "STREAM_PUMP" AS 
  INSERT INTO "DESTINATION_SQL_STREAM"    
    SELECT STREAM ticker_symbol, change, price    
    FROM "SOURCE_SQL_STREAM_001";
有关应用程序代码的更多信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 应用程序代码
 
问:Kinesis Data Analytics 如何帮助我编写 SQL 代码?
Kinesis Data Analytics 包括一个适用于常用案例(包括流筛选器、滚动时间窗口和异常检测)的分析模板库。您可以通过 AWS 管理控制台中的 SQL 编辑器访问这些模板。创建应用程序并导航至 SQL 编辑器之后,您便可在控制台的左上角看到这些模板。
 
问:如何在 Kinesis Data Analytics 中执行实时异常检测?
Kinesis Data Analytics 包括预先构建的 SQL 函数,可用于进行多种高级分析,其中一个可用于异常检测。您只需从 SQL 代码调用这个函数,即可实时检测异常状况。Kinesis Data Analytics 使用 Random Cut Forest 算法来实施异常检测。有关 Random Cut Forest 的更多信息,请参阅 流数据异常检测白皮书。

在 SQL 应用程序中配置目标

问:支持哪些目标?
Kinesis Data Analytics for SQL 最多支持每个应用程序拥有三个目标。您可以将 SQL 结果保存到 Amazon S3、Amazon Redshift、Amazon OpenSearch Service(通过 Amazon Kinesis Data Firehose 实现)和 Amazon Kinesis Data Streams。您可以写入未由 Kinesis Data Analytics 提供直接支持的目标,具体方法是将 SQL 结果发送到 Amazon Kinesis Data Streams,然后利用其与 AWS Lambda 的集成将该结果发送至您选择的目标。
 
问:如何设置目标?
在您的应用程序代码中,您可将 SQL 语句的输出写入一个或多个应用程序内部流中。或者,您也可以将输出配置添加到应用程序中,以便将写入特定应用程序内部流的所有内容保存到最多四个外部目标中。这些外部目标可以是 Amazon S3 存储桶、Amazon Redshift 表、Amazon OpenSearch Service 域(通过 Amazon Kinesis Data Firehose 实现)和 Amazon Kinesis 数据流。每个应用程序最多支持四个目标,且这四个目标可以是上述目标的任意组合。有关更多信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 配置输出流
 
问:如果我的首选目标不受直接支持,我该如何将 SQL 结果发送到此目标?
您可以使用 AWS Lambda 来写入使用 Kinesis Data Analytics for SQL 不直接支持的目标。我们建议您将结果写入 Amazon Kinesis 数据流,然后使用 AWS Lambda 来读取经处理的结果并将其发送到您选择的目标。有关更多信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 示例:AWS Lambda 集成。或者,您还可以使用 Kinesis Data Firehose 交付流将数据加载至 Amazon S3 中,然后触发 AWS Lambda 函数以读取这些数据并将其发送到您选择的目标。有关更多信息,请参阅《AWS Lambda 开发人员指南》中的 将 AWS Lambda 与 Amazon S3 搭配使用
 
问:Kinesis Data Analytics 提供何种交付模式?
Kinesis Data Analytics 中的 SQL 应用程序使用“至少一次”交付模式,以便将应用程序输出传输到配置的目标。Kinesis Data Analytics 应用程序采用内部检查点(即当输出记录交付至目标时的时间点),并且不会丢失数据。该服务可根据需要使用检查点,以确保您的应用程序输出至少有一次被传输到配置的目标。有关交付模型的更多信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 配置应用程序输出

与其他流处理解决方案进行比较

问:Amazon Kinesis Data Analytics 与使用 Amazon Kinesis 客户端库运行自己的应用程序有何不同?
Amazon Kinesis 客户端库 (KCL) 是一个预建的库,可帮助您构建使用者应用程序,用以读取和处理来自 Amazon Kinesis 数据流的数据。KCL 可以处理各种复杂的问题,如适应数据流量的变化、负载均衡流数据、协调分布式服务以及以容错方式处理数据。KCL 使您能够在专注于业务逻辑的同时构建应用程序。 
 
借助 Kinesis Data Analytics,您可以处理和查询实时流数据。您可以使用标准 SQL 来处理数据流,这样您便无需学习任何新的编程语言。您只需将 Kinesis Data Analytics 指向传入数据流、编写 SQL 查询,然后指定结果加载到的位置即可。Kinesis Data Analytics 可将 KCL 作为底层应用程序的一部分来使用,以读取来自流数据源的数据。该服务将 KCL 以及很多与使用 KCL(例如检查点操作)相关的更复杂的概念抽象化了。 
 
如果您需要一个完全托管的解决方案且想要使用 SQL 处理数据流中的数据,则应使用 Kinesis Data Analytics。如果您需要构建 Kinesis Data Analytics 无法满足其要求的自定义处理解决方案,请使用 KCL,这样您便可以管理得到的使用者应用程序。

服务等级协议

问:Amazon Kinesis Data Analytics SLA 提供什么保障?

我们的 Amazon Kinesis Data Analytics SLA 保证 Amazon Kinesis Data Analytics 的月度正常运行时间百分比至少达到 99.9%。

问:怎样确定我是否有资格获得 SLA 服务抵扣?

对于您运行任务所在的可用区,如果同一个区域内有一个以上的可用区在任何月度账单周期内的月度正常运行时间百分比没有达到 99.9%,那么您就有资格获得 Amazon Kinesis Data Analytics SLA 规定的 Amazon Kinesis Data Analytics 服务抵扣。如需 SLA 的所有条款与条件的完整详细信息,以及如何提交索赔的详细信息,请参阅Amazon Kinesis SLA 详细信息页面

Amazon Kinesis Data Analytics 入门

访问 Kinesis Data Analytics 定价页面
计算成本

访问 Amazon Kinesis Data Analytics 定价页面

查看入门指南
查看入门指南

通过分步指南了解如何使用 Amazon Kinesis Data Analytics for SQL 或 Amazon Kinesis Data Analytics for Apache Flink

开始在控制台中构建
开始构建流式处理应用程序

从 Amazon Kinesis Data Analytics 控制台构建第一个流应用程序。