一般性问题

问:什么是 Amazon Kinesis Data Analytics?
Amazon Kinesis Data Analytics 是分析流数据、获取可指导行动的见解,以及实时响应业务和客户需求的最轻松方式。Amazon Kinesis Data Analytics 降低了构建、管理流式应用程序,以及将其与其他 亚马逊云科技 服务集成的复杂性。您可以采用支持的语言(如 Java 或 Scala,这些语言将内置模板和运算符用于常见的处理函数)快速构建 SQL 查询和复杂的 Apache Flink 应用程序,进而组织、转换、聚合以及分析任何规模的数据。
 
Amazon Kinesis Data Analytics 处理连续运行实时应用程序所需的一切,并自动扩展以匹配传入数据的数量和吞吐量。借助 Amazon 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 S3。
 
连续指标生成

通过连续指标生成应用程序,您可以监视和了解数据随时间变化的趋势。您的应用程序可以将流数据聚合到关键信息中,并将其与报表数据库和监视服务无缝集成,实时为您的应用程序和用户提供服务。借助 Kinesis Data Analytics,您可以采用受支持的语言使用 SQL 或 Apache Flink 代码,在时间范围内连续生成时间序列分析。例如,您可以通过每分钟计算一次顶级玩家为一款移动游戏建立一个实时排行榜,然后将其发送到 Amazon DynamoDB。或者,您可以每五分钟计算一次唯一的网站访问者数量来跟踪您网站的流量,然后将处理的结果发送到 Amazon Redshift。

响应式实时分析

当某些指标达到预定义的阈值时,或者在更高级的情况下,当您的应用程序使用机器学习算法检测到异常时,响应式实时分析应用程序会发送实时警报或通知。通过这些应用程序,您能够立即实时响应业务变化,例如预测移动应用中的用户放弃情况并确定性能下降的系统。例如,某个应用程序可以计算面向客户的 API 在一段时间内的可用性或成功率,然后将结果发送到 Amazon CloudWatch。您可以构建另一个应用程序来查找符合特定条件的事件,然后使用 Amazon Kinesis Data Streams 和 Amazon Simple Notification Service (SNS) 自动通知适当的客户。
 
问:如何开始使用面向 Kinesis Data Analytics 的 Apache Flink 应用程序?
登录到 Amazon Kinesis Data Analytics 控制台,并创建一个新的流处理应用程序。您还可以使用 Amazon CLIAmazon SDK。创建应用程序后,转到您喜欢的集成开发环境,连接到 亚马逊云科技,然后以您选择的语言安装开源 Apache Flink 库和 Amazon SDK。Apache Flink 是一个用于处理数据流的开源框架和引擎。可扩展的库包括 25 个以上的预构建流处理运算符(如窗口和聚合),以及 亚马逊云科技 服务集成(如 Amazon MSK、Amazon Kinesis Data Streams 和 Amazon Kinesis Data Firehose)。构建完成后,将您的代码上传到 Amazon Kinesis Data Analytics,该服务将处理连续运行实时应用程序所需的一切,包括自动扩展以匹配传入数据的数量和吞吐量。
 
问:如何开始使用面向 Kinesis Data Analytics 的 SQL 应用程序?
登录到 Amazon Kinesis Data Analytics 控制台,并创建一个新的流处理应用程序。您还可以使用 Amazon CLI 和 Amazon SDK。您可以通过三个简单的步骤构建端到端应用程序:1) 配置传入的流数据,2) 编写 SQL 查询,以及 3) 指向加载结果的位置。Kinesis Data Analytics 可识别 JSON、CSV 和 TSV 等标准数据格式,并自动创建基准架构。您可以优化此架构,或者如果您的数据是非结构化的,则可以使用我们直观的架构编辑器定义一个新架构。然后,该服务将架构应用于输入流,并使它看起来像一个不断更新的 SQL 表,以便您可以针对它编写标准的 SQL 查询。您可以使用我们的 SQL 编辑器构建查询。
该 SQL 编辑器附带所有功能,包括语法检查和针对实时数据的测试。我们还为您提供了模板,用于提供所有内容的 SQL 代码,包括从简单的流过滤器到高级异常检测,以及 top-K 分析。Kinesis Data Analytics 负责预置和弹性扩展所有基础设施,从而能够处理任何数据吞吐量。您不需要规划、预置或管理基础设施。
 
问:Kinesis Data Analytics 有哪些限制?
Kinesis Data Analytics 可弹性扩展您的应用程序,以适应源数据流的数据吞吐量和大多数场景的查询复杂性。有关 Apache Flink 应用程序的服务 限制的详细信息,请访问《适用于 Apache Flink 的 Amazon Kinesis Data Analytics 开发人员指南》中的“限制”部分。有关服务限制的详细信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 限制

重要概念

问:什么是 Kinesis Data Analytics 应用程序?
应用程序是您使用的 Kinesis Data Analytics 实体。Kinesis Data Analytics 应用程序持续地实时读取和处理流数据。您可以使用 SQL 或 Apache Flink 支持的语言编写应用程序代码,以处理传入的流数据并产生输出。然后,Kinesis Data Analytics 将输出写入配置的目标。
 
每个应用程序都包含三个主要组成部分:

输入 – 应用程序的流式传输源。在输入配置中,您将流式传输源映射到一个应用程序内数据流。数据从数据源中流入到应用程序内数据流。您使用应用程序代码处理这些应用程序内数据流中的数据,并将处理后的数据发送到后续的应用程序内数据流或目标。您可以在 Apache Flink 应用程序的应用程序代码内,以及通过适用于 SQL 应用程序的 API 添加输入。
 
应用程序代码 – 一系列处理输入并产生输出的 Apache Flink 运算符或 SQL 语句。应用程序代码的最简单形式可以是单个 Apache Flink 运算符或 SQL 语句,用于从与流式传输源关联的应用程序内数据流中读取数据,然后写入到与输出关联的应用程序内数据流。您可以采用支持的语言编写 Apache Flink 代码或 SQL 代码,用于将初始应用程序内数据流拆分为多个流,并将附加逻辑应用于这些单独的流。
 
输出 – 您可以创建一个或多个应用程序内流来存储中间结果。然后,您可以选择配置应用程序输出,将来自特定应用程序内流的数据保留到外部目标。您可以在 Apache Flink 应用程序的应用程序代码内,或通过适用于 SQL 应用程序的 API 添加这些输出。
 
问:什么是应用程序内数据流?
应用程序内数据流是一个实体,用于持续地将数据存储在应用程序中,以供您进行处理。您的应用程序持续对应用程序内数据流执行读写操作。对于 Apache Flink 应用程序,通过流运算符处理数据,您可以与应用程序内流进行交互。运算符将一个或多个数据流转换为新的数据流。对于 SQL 应用程序,您与应用程序内流的交互方式与使用 SQL 语句与 SQL 表交互的方式相同。您将 SQL 语句应用于一个或多个数据流,并将结果插入到新的数据流中。
 
问:支持哪些应用程序代码?
对于 Apache Flink 应用程序,Kinesis Data Analytics 支持使用 Apache Flink 开源库和 Amazon SDK 构建的应用程序。对于 SQL 应用程序,Kinesis Data Analytics 支持 ANSI SQL,并且对 SQL 标准进行了一些扩展,使其更易于处理流数据。

管理应用程序

问:可以如何监控 Kinesis Data Analytics 应用程序的运行情况和性能?
亚马逊云科技 提供了各种工具,可用于监视您的 Kinesis Data Analytics 应用程序。您可以配置其中一些工具来为您进行监视。有关如何监视应用程序的更多信息,请参阅:

• 《适用于 Apache Flink 的 Amazon Kinesis Data Analytics 开发人员指南》中的监视 Kinesis Data Analytics
• 《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的监视 Kinesis Data Analytics

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

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

问:Kinesis Data Analytics 如何扩展我的应用程序?
Kinesis Data Analytics 可弹性扩展您的应用程序以适应源数据流的数据吞吐量和大多数场景的查询复杂性。Kinesis Data Analytics 以 Amazon Kinesis 处理单元 (KPU) 的形式预置容量。一个 KPU 为您提供 1 个 vCPU 和 4GB 内存。
对于 Apache Flink 应用程序,Kinesis Data Analytics 为应用程序用于检查点的每个 KPU 分配 50GB 的运行应用程序存储,并可通过临时磁盘供您使用。检查点是正在运行的应用程序的最新备份,用于从应用程序中断立即恢复。您还可以使用 API 中的 Parallelism 和 ParallelismPerKPU 参数控制适用于 Apache Flink 应用程序的 Kinesis Data Analytics 任务(例如从某个源读取或执行某个运算符)的并行执行。Parallelism 定义任务并发实例的数量。所有运算符、源和接收器按照定义的 Parallelism(默认为 1)执行。每 KPU 的 Parallelism 定义应用程序的每个 Kinesis 处理单元 (KPU) 可计划的并行任务数量,默认为 1。有关更多信息,请参阅《适用于 Apache Flink 的 Amazon Kinesis Data Analytics 开发人员指南》中的扩展

有关 SQL 应用程序,每个流式传输源都映射到相应的应用程序内流。虽然这对许多客户来说不是必需的,但是您可以通过指定输入 Parallelism 参数来增加源映射到的应用程序内流的数量,从而更加有效地使用 KPU。Kinesis Data Analytics 将流数据源的分区(如 Amazon Kinesis 数据流的分片)平均分配到您指定的应用程序内数据流的数量。例如,如果您有 10 分片 Amazon Kinesis 数据流作为流数据源,并且指定输入 Parallelism 为 2,Kinesis Data Analytics 会将五个 Amazon Kinesis 分片分配到名为“SOURCE_SQL_STREAM_001”和“SOURCE_SQL_STREAM_002”的两个应用程序内流。有关更多信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的配置应用程序输入

问:构建和管理我的 Kinesis Data Analytics 应用程序的最佳实践是什么?
有关 Apache Flink 应用程序的最佳实践的信息,请参阅《适用于 Apache Flink 的 Amazon Kinesis Data Analytics 开发人员指南》中的最佳实践部分。该部分介绍了容错、性能、日志记录、编码等方面的最佳实践。

有关 SQL 应用程序的最佳实践的信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的“最佳实践”部分。该部分介绍了管理应用程序、定义输入架构、连接到输出和编写应用程序代码的最佳实践。

问:我可以使用适用于 Apache Flink 应用程序的 Kinesis Data Analytics 访问 Amazon VPC 后端的资源吗?
是的。您可以访问 Amazon VPC 后端的资源。您可以在《Amazon Kinesis Data Analytics 开发人员指南》中的使用 Amazon VPC 部分,了解如何配置应用程序以实现 VPC 访问。

问:单个适用于 Apache Flink 应用程序的 Kinesis Data Analytics 是否有权访问多个 VPC?
否,如果指定多个子网,则所有子网都必须位于同一个 VPC 中。您可以通过在 VPC 之间建立对等连接来连接到其他 VPC。

问:连接到 VPC 的适用于 Apache Flink 应用程序的 Kinesis Data Analytics 是否也可以访问互联网和 亚马逊云科技 服务终端节点?
在默认配置下,配置为可访问特定 VPC 中资源的适用于 Apache Flink 应用程序的 Kinesis Data Analytics 将无法访问互联网。您可以在《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 应用程序,每个应用程序收取一个额外的 KPU 费用,用于应用程序编排。对于运行应用程序存储和持久应用程序备份,也需要对 Apache Flink 应用程序收取费用。运行应用程序存储会应用于 Amazon Kinesis Data Analytics 的状态处理功能,并按每月每 GB 收费。持久应用程序备份是可选项,可为应用程序提供时间点恢复点,按每月每 GB 收费。
 
对于 Amazon Kinesis Data Analytics Studio,在开发或交互模式下,您需要额外支付应用程序编排的 KPU 费用,另一个用于交互式开发的 KPU。您还需要为运行应用程序存储付费。您不需要为持久应用程序备份付费。
 
有关定价的更多信息,请参阅 Amazon Kinesis Data Analytics 定价页面
 
问:是否对正在运行但未处理任何源数据的 Kinesis Data Analytics 应用程序收取费用?
对于 Apache Flink 应用程序,如果您的 Kinesis Data Analytics 应用程序正在运行,则至少要对两个 KPU 和运行的 50GB 应用程序存储收费。对于 SQL 应用程序,如果您的 Kinesis Data Analytics 应用程序正在运行,则至少要对一个 KPU 收费。
 
问:除了 Kinesis Data Analytics 费用,是否还有可能产生任何其他费用?
Kinesis Data Analytics 是完全托管的流处理解决方案,独立于它从中读取数据的流式传输源和写入处理的数据的目标。对于在您的应用程序中进行读取和写入操作的服务,将向您单独收取费用。
问:什么是 Apache Flink?
Apache Flink 是一个用于流和批量数据处理的开源框架和引擎。借助 Apache Flink,可以轻松构建流式应用程序,因为它提供了强大的运算符,并妥善解决了核心的流式传输问题,如重复处理。Apache Flink 为基于数据流的分布式计算提供数据分布、通信和容错功能。
 
问:如何开发应用程序?
可以首先下载包括 Amazon SDK、Apache Flink 和适用于 亚马逊云科技 服务的连接器的开源库。您可以在《适用于 Apache Flink 的 Amazon Kinesis Data Analytics 开发人员指南》中,获得有关如何下载库和创建首个应用程序的说明。
 
问:我的应用程序代码是什么样子?
使用数据流和流运算符编写 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 的 Kinesis Data Analytics 包括超过 25 个运算符,可用于解决各种各样的使用案例,包括映射、KeyBy、聚合、窗口联接和窗口。映射允许您执行任意处理,从传入的数据流中获取一个元素并生成另一个元素。KeyBy 使用指定键以逻辑方式组织数据,从而使您能够一起处理类似的数据点。聚合跨 sum、min 和 max 等多个键执行处理。窗口联接在给定的键和窗口上将两个数据流联接到一起。窗口组日期使用键,通常是基于时间的操作,例如在 5 分钟的时间段内计算唯一项的数量。
如果这些运算符并未满足您的要求,您可以构建自定义运算符。您可以在《适用于 Apache Flink 的 Amazon Kinesis Data Analytics 开发人员指南》的 运算符部分中找到更多示例。您可以在 Apache Flink 文档的“运算符”部分中找到运算符的完整列表。
 
问:适用于 Apache Flink 应用程序的 Kinesis Data Analytics 中支持哪些集成?
您可以用最少的代码设置预先构建的集成,或者构建自己的集成以连接到几乎任何数据源。基于 Apache Flink 的开源库支持流式传输源和目标或接收器,以实现处理数据的交付。其中还包括通过异步输入/输出连接器支持数据扩充。下面显示了开源库中包含的特定连接器的列表。

• 流数据源: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 Cassandra、Elasticsearch 等。
 
问:是否支持自定义集成?
您可以通过构建一组基元将源或目标添加到应用程序中,这些基元使您能够从文件、目录、套接字或任何可通过互联网访问的内容进行读写。Apache Flink 为 数据源数据接收器提供这些基元。这些基元带有一些配置,例如能够连续性或一次性、异步或同步读写数据等。例如,您可以设置应用程序,以通过扩展基于现有文件的源集成从 Amazon S3 连续读取。
 
问:适用于 Apache Flink 应用程序的 Kinesis Data Analytics 提供哪种传输模式?
如果应用程序是使用幂等运算符(包含源和接收器)构建的,则 Kinesis Data Analytics 中的 Apache Flink 应用程序使用“正好一次”传输模式。这意味着处理的数据将影响下流结果一次而且仅影响一次。检查点保存当前应用程序状态,并使适用于 Apache Flink 应用程序的 Kinesis Data Analytics 能够恢复应用程序的位置,以提供与无故障执行相同的语义。应用程序的检查点通过 Apache Flink 的 检查点功能提供。默认情况下,适用于 Apache Flink 应用程序的 Kinesis Data Analytics 使用“正好一次”语义。如果您使用利用 Apache Flink 的“正好一次”语义的源、运算符和接收器来设计应用程序,您的应用程序将支持“正好一次”处理语义。
 
问:我可以从我的应用程序存储访问本地存储吗?
可以。适用于 Apache Flink 应用程序的 Kinesis Data Analytics 为您的应用程序提供每 Kinesis 处理单元 (KPU) 50GB 的运行应用程序存储。Kinesis Data Analytics 可根据您的应用程序扩展存储。运行应用程序存储用于使用检查点保存应用程序状态。它还可以访问您的应用程序代码,用作临时磁盘以缓存数据或用于任何其他目的。Kinesis Data Analytics 可以随时从未通过检查点保存的运行应用程序存储中删除数据。存储在运行应用程序存储中的所有数据均已静态加密。
 
问:适用于 Apache Flink 的 Kinesis Data Analytics 如何自动备份我的应用程序?
Kinesis Data Analytics 使用检查点和快照自动备份您的运行应用程序的状态。检查点保存当前应用程序状态,并使适用于 Apache Flink 应用程序的 Kinesis Data Analytics 能够恢复应用程序的位置,以提供与无故障执行相同的语义。检查点利用运行应用程序存储。快照保存应用程序的一个时间点恢复点。快照利用持久的应用程序备份。
 
问:什么是应用程序快照?
快照使您可以创建应用程序并将其还原到先前的时间点。这使您能够维持先前的应用程序状态并随时回滚您的应用程序。您可以控制您在任何给定时间拥有的快照数量,从零到数千个不等。快照使用持久的应用程序备份,而 Kinesis Data Analytics 会根据快照的大小向您收费。默认情况下,Kinesis Data Analytics 加密保存在快照中的数据。您可以通过 API 删除个别快照,或者通过删除应用程序来删除所有快照。
 
问:支持 Apache Flink 的哪些版本?
适用于 Apache Flink 应用程序的 Amazon Kinesis Data Analytics 支持 Apache Flink 1.6 和 Apache Flink 1.8。Kinesis Data Analytics 中的 Apache Flink 1.8 支持 Java 版本 8 和 Scala 2.1.1。您可以在《亚马逊云科技 开发人员指南》的 创建应用程序部分中了解更多信息。

构建 Amazon Kinesis Analytics Studio 应用程序

为 SQL 应用程序配置输入

问:如何开发 Studio 应用程序?
您可以从 Amazon Kinesis Data Analytics Studio、Amazon Kinesis Data Streams 或 Amazon MSK 控制台开始,只需几次点击即可启动无服务器笔记本,从而立即查询数据流并执行交互式数据分析。
 
交互式数据分析:您可以在笔记本中使用 SQL、Python 或 Scala 编写代码,以便与流数据进行交互,查询响应时间只需几秒。您可以使用内置可视化来探索数据并从笔记本中查看有关流数据的实时见解,还可以轻松开发由 Apache Flink 提供支持的流处理应用程序。在您的代码准备好作为生产应用程序运行之后,您只需一次点击即可过渡到流处理应用程序,该应用程序每秒能够处理数 GB 的数据而无需服务器。流处理应用程序:在准备好将代码推广到生产环境之后,您可以通过点击构建代码。您可以点击笔记本界面中的“部署为流处理应用程序”,也可以在 CLI 中发出单个命令,Studio 将处理大规模运行流处理应用程序所需的所有基础设施管理并启用自动扩缩和持久状态,就像在适用于 Apache Flink 应用程序的 Amazon Kinesis Data Analytics 中那样。

问:我的应用程序代码是什么样子?
您可以使用 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)、连接(INNER、OUTER、定时窗口 – BETWEEN、AND、连接时态表 – 随时间变化的表)、Top N、重复数据删除和模式识别。其中一些查询(如 GROUP BY、OUTER JOIN 和 Top N)是流数据的“结果更新”,这意味着随着流数据的处理,结果会持续更新。还支持其他 DDL 语句,例如 CREATE、ALTER 和 DROP。有关查询和示例的完整列表,请参阅 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 Zeppelin 的哪些版本?
Kinesis Data Analytics Studio 支持 Apache Flink 1.11 和 Apache Zeppelin 0.9。

问:Kinesis Data Analytics Studio 应用程序默认支持哪些集成?
  • 数据源:Amazon Managed Streaming for Apache Kafka (Amazon MSK)、Amazon Kinesis Data Streams、Amazon S3
  • 目标或接收器:Amazon MSK、Amazon Kinesis Data Streams 和 Amazon S3
 
问:是否支持自定义集成?
您可以通过几个额外的步骤和几行 Apache Flink 代码(Python、Scala 或 Java)来配置额外的集成,以定义与所有 Apache Flink 支持的集成的连接,包括 Amazon Elasticsearch 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 等各种输入流配合使用。

构建 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 表,因为您可以创建、插入和从中进行选择。但是,不同之处在于应用程序内流使用来自流数据源的新数据不断进行更新。

您可以使用 亚马逊云科技 管理控制台添加流数据源。您可以在《Kinesis Data Analytics for SQL 开发人员指南》的 配置应用程序输入部分中,了解有关数据源的更多信息。
 
问:如何在 SQL 应用程序中设置引用数据源?
引用数据源可以是 Amazon S3 对象。Kinesis Data Analytics SQL 应用程序开始运行时会完整读取 S3 对象。可以通过表在 SQL 代码中访问数据。使用引用数据源的最常见使用案例是使用 SQL JOIN 丰富来自流数据源的数据。

使用 Amazon CLI,您可以通过指定 S3 存储桶、对象、IAM角色和关联的架构来添加引用数据源。Kinesis Data Analytics 在您启动该应用程序时加载此数据,并在每次进行更新 API 调用时重新加载。
 
问:SQL 应用程序支持哪些数据格式?
Kinesis Data Analytics 中的 SQL 应用程序可以检测架构,并使用 DiscoverInputSchema API 自动解析 UTF-8 编码的 JSON 和 CSV 记录。此架构将应用于从流中读取的数据,作为插入到应用程序内流中的一部分。

对于不使用分隔符、使用不同于 CSV 的分隔符的其他 UTF-8 编码的数据,或者在发现 API 未完全发现该架构的情况下,您可以使用交互式架构编辑器定义架构,或使用字符串操作功能来构造您的数据。有关更多信息,请参阅《Amazon Kinesis Data Analytics for SQL 开发人员指南》中的 使用架构发现功能和相关编辑
 
问:我的输入流如何呈现给我的 SQL 代码?
Kinesis Data Analytics for SQL 应用您指定的架构,并将您的数据插入到一个或多个应用程序内流用于流式传输源,插入到单个 SQL 表中用于引用源。应用程序内流的默认数量是可以满足大多数使用案例需求的数量。如果您发现应用程序未与 CloudWatch 指标 MillisBehindLatest 定义的源流中的最新数据保持同步,则应增加此值。所需的应用程序内流的数量同时受源流的吞吐量和查询复杂性的影响。用于指定映射到源流的应用程序内流数量的参数称为输入并行性。

编写用于 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 for SQL 开发人员指南》中的 应用程序代码
 
问:Kinesis Data Analytics 如何帮助我编写 SQL 代码?
Kinesis Data Analytics 包含一个分析模板库,用于常见使用案例,包括流过滤器、滚动时间窗口和异常检测。您可以从 亚马逊云科技 管理控制台中的 SQL 编辑器访问这些模板。在您创建应用程序并导航到 SQL 编辑器后,模板将出现在控制台的左上角。
 
问:如何在 Kinesis Data Analytics 中执行实时异常检测?
Kinesis Data Analytics 包含针对几种高级分析(包括一种用于异常检测)的预先构建的 SQL 函数。您只需从 SQL 代码中调用此函数即可实时检测异常。Kinesis Data Analytics 使用 Random Cut Forest 算法来实现异常检测。

在 SQL 应用程序中配置目标

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

对比其他流处理解决方案

问:Amazon Kinesis Data Analytics for SQL 与使用 Amazon Kinesis Client Library 运行我自己的应用程序有何不同?
Amazon Kinesis Client Library (KCL) 是一种预先构建的库,可帮助您构建消费者应用程序,从而读取和处理 Amazon Kinesis 数据流中的数据。KCL 可以处理各种复杂问题,如适应数据流量的变化、均衡流数据负载、协调分布式服务和以容错数据方式处理数据,从而使您能够在构建应用程序的同时专注业务逻辑。

借助 Kinesis Data Analytics,您可以处理和查询实时流数据。您可以使用标准 SQL 处理数据流,因此无需学习任何新的编程语言。您只需将 Kinesis Data Analytics 指向传入的数据流,编写 SQL 查询,然后指定想要加载结果的位置。Kinesis Data Analytics 使用 KCL 读取流数据源中的数据,作为底层应用程序的一部分。此服务从您以及许多与使用 KCL(如检查点)相关的更复杂的概念中提取这一点。

如果您想要完全托管的解决方案,并想使用 SQL 处理数据流中的数据,则应使用 Kinesis Data Analytics。如果您需要构建 Kinesis Data Analytics 无法满足其要求的自定义处理解决方案,并且您能够管理生成的消费者应用程序,请使用 KCL。

开始使用亚马逊云科技免费构建

开始使用亚马逊云科技免费构建

关闭
热线

热线

1010 0766
由光环新网运营的
北京区域
1010 0966
由西云数据运营的
宁夏区域