一般性问题

问:什么是 Amazon Kinesis Data Analytics?
使用 Amazon Kinesis Data Analytics,可以非常简便地分析数据流、获得可付诸行动的见解,并实时响应业务和客户的需求。Amazon Kinesis Data Analytics 降低了构建、管理和集成流应用程序与其他 AWS 服务的复杂性。您可以使用内置模板和运算符快速构建 SQL 查询和复杂的 Java 应用程序,以实现任意规模的数据组织、转换、汇总和分析等常见处理功能。
 
Amazon Kinesis Data Analytics 会处理持续运行实时应用程序所需的任何事项,且会自动扩展以匹配传入数据的大小和吞吐量。使用 Amazon Kinesis Data Analytics 时,您只需要支付流应用程序消耗的资源的费用。没有最低费用和准备成本。
 
问:什么是实时流处理?为什么我需要使用它?
由于实时数据源呈爆炸式增长,数据正在以闪电般的速度向我们涌来。无论是来自移动应用程序和 Web 应用程序的日志数据、来自电子商务网站的购买数据,还是来自物联网设备的传感器数据,均可提供能够有助于各个公司了解其客户、组织和业务的实时动态的消息。能够在数据到达时查看这些数据,您就可以实时监测您的业务,迅速利用新的商业机会。例如,根据客户在特定时间的可能位置向客户提供促销活动,或者监测社交情绪和改变客户态度,以识别和利用新的机会。
 
要充分利用这些机会,您需要一套不同的分析工具来收集和分析实时流数据,而不是以往用于静态存储数据的传统分析工具。在传统分析方法中,您需要收集信息,将其存入数据库,然后在数小时、数天或者数周后对其进行分析。而分析实时数据需要不同的方法、不同的工具、不同的服务。流分析服务会在存储数据之前不断地对数据进行处理,而不是对存储数据运行数据库查询。流数据的流动速度惊人,而且不断变化。流分析服务需要能够在数据出现时对其进行处理,通常每小时处理数百万个事件。
 
问:Kinesis Data Analytics 有何用途?
您可以在许多使用案例中使用 Kinesis Data Analytics 来连续处理数据,并在几秒钟或几分钟内获得洞察,而不需要等待几天甚至几周。Kinesis Data Analytics 让您能够快速构建端到端流处理应用程序,以用于日志分析、点击流分析、物联网 (IoT)、广告技术和游戏等等。三种最常见的使用案例流式抽取-转换-加载 (ETL)、持续指标生成和响应分析。
 
流式 ETL
流式 ETL 应用程序使您能够在加载数据湖或数据仓库之前实时清理、扩充、组织和转换原始数据,减少或消除批处理 ETL 步骤。这些应用程序可以在交付之前将小记录缓冲到更大的文件中,并在各个流和表之间建立复杂的连接。例如,您可以构建一个应用程序,以连续读取存储在 Amazon Kinesis Data Streams 中的 IoT 传感器数据,按传感器类型组织数据,删除重复数据,按照指定架构规范化数据,然后将数据交付到 Amazon S3。
 
持续指标生成
借助持续指标生成应用程序,您可以监控和了解您的数据在一段时间内的趋势。您的应用程序可以将流数据聚合为关键信息,并将其与报表数据库和监测服务无缝集成,从而实时地为您的应用程序和用户服务。借助 Kinesis Data Analytics,您可以使用 SQL 或 Java 代码在一段时间内持续生成时间序列分析。例如,您可以通过计算每分钟的顶级玩家并将结果发送至 Amazon DynamoDB 来创建手机游戏的实时排行榜。或者,您可以每五分钟计算一次唯一身份网站访客的数量并将处理结果发送至 Amazon Redshift 来跟踪网站的流量。
 
响应实时分析
响应实时分析应用程序在某些指标达到预定义阈值时(或者更超前的情况是,在您的应用程序使用机器学习算法检测到异常情况时)发送实时警报或通知。这些应用程序让您能够即刻对业务变化做出响应,例如,预测移动应用的用户弃用趋势,以及识别降级系统。例如,这种应用程序可计算一段时间内面向客户的 API 的可用性或成功率,然后将相应结果发送至 Amazon CloudWatch。您还可以构建另一种应用程序,以查找可满足某些标准的事件,然后使用 Amazon Kinesis Data Streams 和 Amazon Simple Notification Service (SNS) 自动通知相应客户。
 
问:如何开始使用面向 Kinesis Data Analytics 的 Jave 应用程序?
登录 Amazon Kinesis Data Analytics 控制台,然后创建一个新的流处理应用程序。您还可以使用 AWS CLIAWS 开发工具包。创建应用程序之后,选择您最喜欢的集成开发环境,连接到 AWS,并安装开源 Java 库。开源库基于 Apache Flink(用于处理数据流的开源框架和引擎)和 AWS SDK。可扩展库包括超过 25 个预构建的流处理运算符(如窗口和聚合)以及 AWS 服务集成(如 Amazon Kinesis Data Streams 和 Amazon Kinesis Data Firehose)。构建完成后,将代码上传至 Amazon Kinesis Data Analytics,该服务会处理持续运行实时应用程序所需的任何事项,包括自动扩展以匹配传入数据的大小和吞吐量。
 
问:如何开始使用面向 Kinesis Data Analytics 的 SQL 应用程序?
登录 Amazon Kinesis Data Analytics 控制台,然后创建一个新的流处理应用程序。您还可以使用 AWS CLIAWS 开发工具包。您可以按照以下三个简单的步骤构建端到端应用程序: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 SQL 开发人员指南》中的 限制。 有关 Jave 应用程序服务限制的详细信息,请查看《Amazon Kinesis Data Analytics Jave 开发人员指南》中的 限制

重要概念

问:什么是 Kinesis Data Analytics 应用程序?
该应用程序就是您使用的 Kinesis Data Analytics 实体。Kinesis Data Analytics 应用程序可以实时方式持续读取并处理流数据。您可以使用 SQL 或 Jave 编写应用程序代码,以处理传入流数据并生成输出。然后,Kinesis Data Analytics 将相应输出写入已配置的目标。
 
每个应用程序包括三个主要的组件:
 
输入 – 应用程序的流源。在输入配置中,您需要将流源映射至应用程序内数据流。数据从数据源流向应用程序内数据流。您可以使用应用程序代码处理来自这些应用程序内数据流的数据,然后将处理后的数据发送到后续的应用程序内数据流或目的地。您在应用程序代码内部添加适用于 Java 应用程序的输入,并通过 API 添加适用于 SQL 应用程序的输入。
 
应用程序代码 - 一系列用于处理输入并生成输出的 Java 运算符或 SQL 语句。最简单的应用程序代码可以是单个 Java 运算符或 SQL 语句,它从与流源关联的应用程序内数据流读取数据,并写入与输出关联的应用程序内数据流。您可以编写 Java 或 SQL 代码,将初始应用程序内数据流分割为多个流,并对这些单独的流应用额外的逻辑。
 
输出 - 您可以创建一个或多个应用程序内部流以便保存中间结果。然后,您可以根据需要配置应用程序输出,以便将来自特定应用程序内部流的数据保存到外部目标。您在应用程序代码内添加适用于 Java 应用程序的输出,或通过 API 添加适用于 SQL 应用程序的输出。
 
问:什么是应用程序内数据流?
应用程序内数据流是一种可在应用程序中持续存储数据的实体,以便您执行处理操作。您的应用程序持续向应用程序内数据流写入,并从中读取数据。对于 Java 应用程序,可以通过流运算符来处理数据,借此与应用程序内部流交互。运算符将一个或多个数据流转换为新的数据流。对于 SQL 应用程序,您可以使用 SQL 语句,采用与 SQL 表交互的方式与应用程序内部流交互。将 SQL 语句应用于一个或多个数据流,并将结果插入新的数据流。
 
问:支持何种应用程序代码?
对于 Java 应用程序, Kinesis Data Analytics 支持使用 Apache FlinkAWS SDK 构建的 Java 应用程序。对于 SQL 应用程序,Kinesis Data Analytics 通过对 SQL 标准进行相应扩展来支持 ANSI SQL,以便更轻松地处理流数据。

管理应用程序

问:我如何监控 Kinesis Data Analytics 应用程序的运行和性能?
AWS 提供各种可用于监控您的 Kinesis Data Analytics 应用程序的工具。您可以配置其中的一些工具以便进行监控。有关如何监控应用程序的更多信息,请参见:
 
问:我如何管理和控制对 Kinesis Data Analytics 应用程序的访问权限?
Kinesis Data Analytics 需要获取相应权限才能从您在应用程序中指定的流数据源中读取记录。此外,Kinesis Data Analytics 还需要获取相应权限才能将应用程序输出写入您在应用程序输出配置中指定的目标位置中。您可以通过创建 Kinesis Data Analytics 可担任的 IAM 角色来授予这些权限。您授予该角色的权限决定着 Kinesis Data Analytics 服务在担任相应角色时可执行的操作。有关更多信息,请参阅:
  • 《Amazon Kinesis Data Analytics Java 开发人员指南》中的授予权限
  • 《Amazon Kinesis Data Analytics SQL 开发人员指南》中的授予权限
 
问:Kinesis Data Analytics 如何扩展应用程序?
Kinesis Data Analytics 可对应用程序进行弹性扩展,以适应源流的数据吞吐量和大多数情况下的查询复杂性。Kinesis Data Analytics 以 Amazon Kinesis 处理单元 (KPU) 的形式预置容量。一个 KPU 为您提供 1 个 vCPU 和 4GB 内存。
 
对于 Java 应用程序,Kinesis Data Analytics 每 KPU 分配 50GB 的运行应用程序存储空间,您的应用程序将这些存储空间用于检查点,也可以通过临时磁盘使用它们。检查点是正在运行的应用程序的最新备份,应用程序中断时可立即使用检查点来恢复。您还可以使用 API 中的 Parallelism 和 ParallelismPerKPU 参数,控制用于 Kinesis Data Analytics 的 Java 应用程序任务(例如从源中读取或执行运算符)的并行执行。Parallelism 定义任务并发实例的数量。所有运算符、源和 sink 都按定义的并行数量执行,默认情况下是 1。ParallelismPerKPU 定义应用程序每 KPU(Kinesis 处理单元)可以调度的并行任务数量,默认情况下是 1。有关更多信息,请参阅《Amazon Kinesis Data Analytics Java 开发人员指南》中的 扩展
 
对于 SQL 应用程序,每个流源均会映射到相应的应用程序内部流中。尽管这对许多客户来说并非是必须的,但您可以指定输入并行机制参数来增加您的源映射到的应用程序内部流的数量,从而以更高效的方式使用 KPU。Kinesis Data Analytics 可按照您指定的应用程序内部流的数量均匀地分配流数据源的分区(例如 Amazon Kinesis 数据流的分区)。例如,如果您使用一个拥有 10 个分区的 Amazon Kinesis 数据流作为流数据源,并且指定了两个输入并行机制,则 Kinesis Data Analytics 会将五个 Amazon Kinesis 分区分配给两个名称分别为“SOURCE_SQL_STREAM_001”和“SOURCE_SQL_STREAM_002”的应用程序内部流。有关更多信息,请参阅《Amazon Kinesis Data Analytics SQL 开发人员指南》中的 配置应用程序输入
 
问:与构建和管理 Kinesis Data Analytics 应用程序相关的最佳实践有哪些?
有关 SQL 最佳实践的信息,请参阅《Amazon Kinesis Data Analytics SQL 开发人员指南》中的 最佳实践部分,其中介绍了管理应用程序、定义输入架构、连接输出和编写应用程序代码。

定价与计费

问:Kinesis Data Analytics 如何收费?
使用 Amazon Kinesis Data Analytics,您只需按实际用量付费。使用 Amazon Kinesis Data Analytics 无需预置资源,也没有前期成本。
 
我们根据用于运行流应用程序的 Amazon Kinesis 处理单元 (KPU) 的数量,按小时收取费用。一个 KPU 表示一个流处理容量单元,由 1 个 vCPU 计算和 4GB 内存组成。Amazon Kinesis Data Analytics 会自动调整流处理应用程序所需的 KPU 数量,因为内存和计算需求会随着处理复杂性和处理的流数据吞吐量而异。
 
对于 Java 应用程序,每个应用程序要为应用程序编排支付一个额外的 KPU 费用。Java 应用程序还需支付运行应用程序存储和持久应用程序备份的费用。运行应用程序存储将用于 Amazon Kinesis Data Analytics 中的有状态处理功能,并按每月每 GB 收费。持久应用程序备份是可选项,用于为应用程序提供时间点恢复点,按每月每 GB 收费。
 
有关定价的更多信息,请参阅 Amazon Kinesis Data Analytics 定价页面
 
问:Kinesis Data Analytics 是否包含在 AWS 免费套餐中?
不。Kinesis Data Analytics 目前不包含在 AWS 免费套餐中。AWS 免费套餐是一项提供了免费试用一系列 AWS 服务的计划。
 
问:我是否需要为处于运行状态但未处理来自源的任何数据的 Kinesis Data Analytics 应用程序付费?
对于 SQL 应用程序,如果您的 Kinesis Data Analytics 应用程序处于运行状态,则您最低需要支付一个 KPU 的费用。对于 Java 应用程序,如果您的 Kinesis Data Analytics 应用程序处于运行状态,则您最低需要支付两个 KPU 和 50 GB 运行应用程序存储的费用。
 
问:除了 Kinesis Data Analytics 费用之外,我是否还需要支付任何其他费用?
Kinesis Data Analytics 是一个完全托管的流处理解决方案,独立于其从中读取数据的流源和向其中写入处理数据的目标。对于在应用程序读取和写入的服务,将另行收费。

构建 Java 应用程序

编写 Java 应用程序代码

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

构建 SQL 应用程序

为 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 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 SQL 开发人员指南》中的 使用架构发现功能和相关编辑功能
 
问:输入流如何向 SQL 代码公开?
面向 SQL 的 Kinesis Data Analytics 可应用您指定的架构并将您的数据插入流源的一个或多个应用程序内部流和参考源的一个 SQL 表。应用程序内部流的默认数量即可满足您的大多数使用案例需求的数量。按照 CloudWatch 指标 MillisBehindLatest 的定义,如果您发现应用程序未与源流中的最新数据保持一致,则应增加该默认数量。所需的应用程序内部流的数量会受到源流的吞吐量以及查询复杂性的影响。用于指定映射到源流的应用程序内部流数量的参数称为“输入并行机制”。

编写 SQL 应用程序代码

问:SQL 应用程序代码是怎样的?
应用程序代码是一系列用于处理输入并生成输出的 SQL 语句。SQL 语句对应用程序内部流和参考表进行操作。应用程序内部流类似于一个持续更新的表,您可以对其执行“SELECT”和“INSERT SQL”操作。您配置的源和目标通过应用程序内部流向 SQL 代码公开。您还可以创建更多应用程序内部流以存储中间查询结果。
 
您可以通过以下模式来使用应用程序内部流。
  • 在 INSERT 语句环境中,应始终使用 SELECT 语句。在选择行时,您可将结果插入另一应用程序内部流中。
  • 在 Pump 环境中使用 INSERT 语句。您可以使用 Pump 来使 INSERT 语句连贯并写入应用程序内部流中。
  • 您可以使用 Pump 来将各种应用程序内部流联系在一起,进而从一个应用程序内部流中加以选择并将结果插入另一个应用程序内部流中。
 
以下 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 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 应用程序中配置目标

问:支持哪些目标?
面向 SQL 的 Kinesis Data Analytics 最多支持每个应用程序拥有四个目标。您可以将 SQL 结果保存到 Amazon S3、Amazon Redshift、Amazon Elasticsearch 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 Elasticsearch 服务域(通过 Amazon Kinesis Data Firehose 实现)和 Amazon Kinesis 数据流。每个应用程序最多支持四个目标,且这四个目标可以是上述目标的任意组合。有关更多信息,请参阅《Amazon Kinesis Data Analytics SQL 开发人员指南》中的 配置输出流
 
问:如果我的首选目标不受直接支持,我该如何将 SQL 结果发送到此目标?
您可以使用 AWS Lambda 来写入未受到直接支持的目标。我们建议您将结果写入 Amazon Kinesis 数据流,然后使用 AWS Lambda 来读取经处理的结果并将其发送到您选择的目标。有关更多信息,请参阅《Amazon Kinesis Data Analytics 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 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 入门

Product-Page_Standard-Icons_01_Product-Features_SqInk
计算成本

访问定价页面

了解更多 
Product-Page_Standard-Icons_01_Product-Features_SqInk
查看入门指南

通过此分步指南了解如何使用 Amazon Kinesis Data Analytics。

Product-Page_Standard-Icons_03_Start-Building_SqInk
开始构建流应用程序

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