问:什么是 Amazon Kinesis Analytics?

Amazon Kinesis Analytics 是处理和分析实时流数据最简单的方法。借助 Amazon Kinesis Analytics,您只需使用标准 SQL 来处理您的数据流,因此无需学习任何新的编程语言。只需将 Kinesis Analytics 指向传入数据流、编写 SQL 查询,然后指定要将结果加载到其中的位置即可。Kinesis Analytics 负责持续地对动态数据运行 SQL 查询并向目标发送相应结果。

问:什么是实时流处理?为什么我需要使用它?

由于实时数据源呈爆炸式增长,数据正在以闪电般的速度向我们涌来。无论是来自移动应用程序和 Web 应用程序的日志数据、来自电子商务网站的购买数据,还是来自物联网设备的传感器数据,均可提供能够有助于各个公司了解其客户、组织和业务的实时动态的消息。通过及时了解此类数据,您可以实时监控业务并快速利用新的业务机会,例如,根据客户在特定时间点的位置向其提供促销优惠,或者监控社交情感并转变客户的态度以确定并抓住新的机会。

要充分利用这些机会,您需要一套不同的分析工具而非适用于静态存储数据的传统分析工具,以便收集和分析实时流数据。借助传统分析工具,您需要收集信息、将其存入数据库,然后在数小时、数天或者数周后对其进行分析。而分析实时数据需要不同的方法和不同的工具与服务。在数据存储到数据库前,流分析平台会不断地对数据进行处理,而不是对存储数据运行数据库查询。流数据以可不断变化的惊人速度流动。流分析平台需要能够在数据出现时对其进行处理,通常每小时处理数百万个事件。

问:Kinesis Analytics 有何用途?

您几乎可在任何使用案例中使用 Kinesis Analytics 以实时方式持续收集数据,并在数秒或数分钟内而非数天甚至数周后获取信息和洞见。特别是,Kinesis Analytics 让您能够快速构建端到端流处理应用程序,以用于日志分析、点击流分析、物联网 (IoT)、广告技术、游戏等等。三种最常见的使用模式是时间序列分析、实时仪表板和实时警报与通知。

生成时间序列分析

借助时间序列分析,您可以监控和了解您的数据在一段时间内的趋势。借助 Kinesis Analytics,您可以编写可在一段时间内持续生成时间序列分析的 SQL 代码。例如,您可以通过计算每分钟的顶级玩家并将结果发送至 Amazon S3 来创建手机游戏的实时排行榜。或者,您可以每五分钟计算一次唯一身份网站访客的数量并将处理结果发送至 Amazon Redshift 来跟踪网站的流量。

源实时仪表板

您可以构建用于计算查询结果的应用程序,并将它们发送至实时仪表板,从而以近乎实时的方式可视化数据。例如,这种应用程序可持续计算某个电子商务网站中的购买数量等业务指标(按产品类别分组),然后将结果发送至 Amazon Redshift,以便借助您选择的商业智能工具实现可视化。再例如,这种应用程序可处理日志数据并计算应用程序错误的数量,然后将相应结果发送至 Amazon Elasticsearch Service 以便借助 Kibana 实现可视化。

创建实时警报和通知

您可以构建应用程序,以使其在某些指标达到预定义阈值时(或者更超前的情况是,在您的应用程序使用我们提供的机器学习算法检测到异常情况时)发送实时警报或通知。例如,这种应用程序可计算一段时间内面向客户的 API 的可用性或成功率,然后将相应结果发送至 Amazon CloudWatch。您还可以构建另一种应用程序,以查找可满足某些标准的事件,然后通过 Kinesis Streams 和 Amazon Simple Notification Service (SNS) 自动通知相应客户。

问:如何开始使用 Kinesis Analytics?

登录 Kinesis Analytics 控制台,然后创建一个新的流处理应用程序。您还可以使用 AWS CLIAWS 开发工具包。您可以按照以下三个简单的步骤构建端到端应用程序:1) 配置传入流数据;2) 编写 SQL 查询;3) 指向要将结果加载到其中的位置。Kinesis Analytics 可识别 JSON、CSV 和 TSV 等标准数据格式,并自动创建基准架构。您可以细化该架构,或者,如果您的数据是非结构化数据,您可以使用我们的直观架构编辑器定义新的架构。然后,该服务会将此架构应用于输入流,让其看起来像一个可持续更新的 SQL 表,这样您便可以针对该架构编写标准 SQL 查询。您可以使用我们的 SQL 编辑器构建查询。SQL 编辑器具有所有附属功能,包括针对实时数据的语法检查和测试。此外,我们还为您提供了相关模板。此类模板可提供针对所有内容(从简单的流筛选器到高级的异常侦测与 Top-K 分析)的 SQL 代码。Kinesis Analytics 负责预置所有基础设施并对其进行弹性扩展,以便处理所有数据吞吐量。您无需规划、预置或管理基础设施。

问:Kinesis Analytics 有哪些限制?

Kinesis Analytics 可对应用程序进行弹性扩展,以适应源流的数据吞吐量和大多数情况下的查询复杂性。但是,在使用 Amazon Kinesis Analytics 时,请谨记以下限制:

  • 每项记录不得超过 50KB。在定义输入架构时,您可将超过 50KB 的记录拆分成多条记录。
  • 您最多可在账户的每个 AWS 区域中创建五个 Kinesis Analytics 应用程序。您只需提交服务限额提升表即可提高该限制。
  • 您可能需要并行放置您的查询以便与流中的数据保持一致。为此,您可以指定输入数据流映射到最多 10 个应用程序内部流。
  • Kinesis 处理单元 (KPU) 最多为八个。
  • 您可以配置应用程序输出,以便将结果保存至最多四个目标位置。
  • 存储参考数据的 Amazon S3 对象的大小可达 1GB。

问:什么是 Kinesis Analytics 应用程序?

该应用程序就是您使用的 Kinesis Analytics 实体。Kinesis Analytics 应用程序可以实时方式持续读取并处理流数据。您可以使用 SQL 编写应用程序代码,以处理传入流数据并生成输出。然后,Kinesis Analytics 将相应输出写入已配置的目标。

每个应用程序包括三个主要的组件:

  • 输入 – 应用程序的流源。在输入配置中,您需要将流源映射至应用程序内部输入流。应用程序内部流类似于一个持续更新的表,您可以对其执行“SELECT”和“INSERT SQL”操作。每个输入记录都有相关的架构,在将记录插入应用程序内部流的过程中会应用该架构。
  • 应用程序代码 – 一系列用于处理输入并生成输出的 SQL 语句。应用程序代码最简单的形式可以是单个 SQL 语句。该语句可从流输入中进行选择并将结果插入流输出。它也可以是一系列 SQL 语句,在其中,一个语句的输出会传入下一个 SQL 语句的输入。此外,您还可以编写应用程序代码以便将一个输入流拆分成多个流,然后应用更多查询以处理这些分离的流。 
  • 输出 – 您可以创建一个或多个应用程序内部流以便保存中间结果。然后,您可以根据需要配置应用程序输出,以便将来自特定应用程序内部流的数据保存到外部目标。 

问:什么是应用程序内部流?

应用程序内部流是一种可在应用程序中持续存储数据的实体,以便您执行“SELECT”和“INSERT SQL”操作。您与应用程序内部流的交互方式和与 SQL 表交互的方式相同。但是,流与表的不同之处在于,前者的数据是持续更新的。在您的应用程序代码中,您可以创建多个应用程序内部流以存储中间查询结果。最终,您配置的输入和输出在您的应用程序中表现为应用程序内部流。

问:Kinesis Analytics 应用程序支持哪些输入?

Kinesis Analytics 支持两种类型的输入:流数据源和参考数据源。流数据源是一种持续生成的数据,可供应用程序读取以便进行处理。参考数据源是一种静态数据,应用程序可使用这类数据来丰富来自流源的数据。每个应用程序最多可拥有一个流数据源和一个参考数据源。应用程序会持续读取来自流数据源(包括 Amazon Kinesis Streams 或 Amazon Kinesis Firehose)的新数据并对其进行处理。应用程序会读取完整的参考数据源(包括 Amazon S3),以便通过 SQL JOIN 丰富流数据源。

问:什么是参考数据源?

参考数据源是一种静态数据,应用程序可使用这类数据来丰富来自流源的数据。您将参考数据作为对象存储在 S3 存储桶中。应用程序启动后,Kinesis Analytics 可读取 S3 对象并创建应用程序内部 SQL 表以存储参考数据。随后,您的应用程序代码可以通过应用程序内部流加入其中。你可以通过调用 UpdateApplication API 来更新 SQL 表中的数据。

问:支持何种应用程序代码?

Kinesis Analytics 通过对 SQL 标准进行相应扩展来支持 ANSI SQL,以便更轻松地处理流数据。此外,Kinesis Analytics 提供多种显示为 SQL 功能(包括异常侦测、近似 Top-K 和近似不同的项目)的机器学习算法。

问:支持哪些目标?

Kinesis Analytics 最多支持每个应用程序拥有四个目标。您可以将 SQL 结果保存到 Amazon S3、Amazon Redshift、Amazon Elasticsearch Service(通过 Amazon Kinesis Firehose 实现)和 Amazon Kinesis Streams。您可以写入未由 Kinesis Analytics 提供直接支持的目标,具体方法是将 SQL 结果发送到 Amazon Kinesis Streams,然后利用其与 AWS Lambda 的集成将该结果发送至您选择的目标。


问:如何设置流数据源?

流数据源可以是 Amazon Kinesis 流或 Amazon Kinesis Firehose 传输流。在来自流数据源的新数据到达后,Kinesis Analytics 应用程序会以实时方式持续读取这些数据。通过应用程序内部流可 SQL 代码中使用这些数据。应用程序内部流的行为类似于 SQL 表,因为您可以创建、插入和从中选择。但是不同之处在于,应用程序内部流会通过来自流数据源的新数据持续地更新。

您可以使用 AWS 管理控制台来添加流数据源。您可以在 Kinesis Analytics 开发人员指南配置应用程序输入部分了解更多有关源的信息。

问:如何设置参考数据源?

参考数据源可以是 Amazon S3 对象。Kinesis Analytics 应用程序在开始运行后可读取完整的 S3 对象。通过表可在 SQL 代码中使用这些数据。参考数据源的一个最常用案例是通过 SQL JOIN 丰富来自流数据源的数据。

借助 AWS CLI,您可以通过指定 S3 存储桶、对象、IAM 角色和关联的架构来添加参考数据源。当您启动 Kinesis Analytics 后,该应用程序会加载此数据,并会在您每次发出任何更新 API 调用时重新加载。

问:支持哪些数据格式?

Kinesis Analytics 可使用 DiscoverInputSchema API 检测架构并自动解析 UTF-8 编码的 JSON 和 CSV 记录。在将记录插入应用程序内部流的过程中,此架构会应用于从流中读取的数据。

对于其他 UTF-8 编码的数据(未使用分隔符或使用 CSV 之外的其他分隔符)或者在发现 API 未完全发现该架构的情况下,您可以通过交互式架构编辑器定义架构或使用字符串处理函数来构建数据。有关更多信息,请参阅 Kinesis Analytics 开发人员指南中的使用架构发现功能和相关编辑功能

问:输入流如何向 SQL 代码公开?

Kinesis Analytics 可应用您指定的架构并将您的数据插入流源的一个或多个应用程序内部流和参考源的一个 SQL 表。应用程序内部流的默认数量即可满足您的大多数使用案例需求的数量。按照 CloudWatch 指标 MillisBehindLatest 的定义,如果您发现应用程序未与源流中的最新数据保持一致,则应增加该默认数量。所需的应用程序内部流的数量会受到源流的吞吐量以及查询复杂性的影响。用于指定映射到源流的应用程序内部流数量的参数称为“输入并行机制”。


问:应用程序代码是怎样的?

应用程序代码是一系列用于处理输入并生成输出的 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";

有关应用程序代码的更多信息,请参阅 Kinesis Analytics 开发人员指南中的应用程序代码

问:Kinesis Analytics 如何帮助编写 SQL 代码?

Kinesis Analytics 包括一个适用于常用案例(包括流筛选器、滚动时间窗口和异常侦测)的分析模板库。您可以通过 AWS 管理控制台中的 SQL 编辑器访问这些模板。创建应用程序并导航至 SQL 编辑器之后,您便可在控制台的左上角看到这些模板。

问:如何在 Kinesis Analytics 中执行实时异常检测?

Kinesis Analytics 提供多个预先构建的 SQL 函数,可用于进行多种高级分析,其中有一个函数可用于异常检测。您只需从 SQL 代码调用这个函数,即可实时检测异常状况。Kinesis Analytics 使用 Random Cut Forest 算法来执行异常检测。有关 Random Cut Forest 的更多信息,请参阅 Streaming Data Anomaly Detection 白皮书。


问:如何设置目标?

在您的应用程序代码中,您可将 SQL 语句的输出写入一个或多个应用程序内部流中。或者,您也可以将输出配置添加到应用程序中,以便将写入特定应用程序内部流的所有内容保存到最多四个外部目标中。这些外部目标可以是 Amazon S3 存储桶、Amazon Redshift 表、Amazon Elasticsearch 域(通过 Amazon Kinesis Firehose 实现)和 Amazon Kinesis 流。每个应用程序最多支持四个目标,且这四个目标可以是上述目标的任意组合。有关更多信息,请参阅 Kinesis Analytics 开发人员指南中的配置输出流

问:如果我的首选目标不受直接支持,我该如何将 SQL 结果发送到此目标?

您可以使用 AWS Lambda 来写入未受到直接支持的目标。我们建议您将结果写入 Amazon Kinesis 流,然后使用 AWS Lambda 来读取经处理的结果并将其发送到您选择的目标。有关更多信息,请参阅 Kinesis Analytics 开发人员指南中的示例:AWS Lambda 集成。或者,您还可以使用 Amazon Kinesis Firehose 传输流将数据加载至 Amazon S3 中,然后触发 AWS Lambda 函数以读取这些数据并将其发送到您选择的目标。有关更多信息,请参阅 AWS Lambda 开发人员指南中的将 AWS Lambda 与 Amazon S3 搭配使用

问:Kinesis Analytics 采用何种传输模型?

Kinesis Analytics 采用“至少一次”传输模型,以便将应用程序输出传输到配置的目标。Kinesis Analytics 应用程序采用内部检查点(即当输出记录传输至目标时的时间点),并且不会出现数据丢失现象。该服务可根据需要使用检查点,以确保您的应用程序输出至少有一次被传输到配置的目标。有关传输模型的更多信息,请参阅 Kinesis Analytics 开发人员指南中的配置应用程序输出


问:我如何监控 Kinesis Analytics 应用程序的运行和性能?

AWS 提供各种可用于监控 Kinesis Analytics 应用程序的工具。您可以配置其中的一些工具以便进行监控。有关如何监控应用程序的更多信息,请参阅 Kinesis Analytics 开发人员指南中的监控 Kinesis Analytics

问:我如何管理和控制对 Kinesis Analytics 应用程序的访问权限?

Kinesis Analytics 需要获取相应权限才能从您在应用程序中指定的流数据源中读取记录。此外,Kinesis Analytics 还需要获取相应权限才能将应用程序输出写入您在应用程序输出配置中指定的流中。您可以通过创建 Kinesis Analytics 可担任的 IAM 角色来授予这些权限。您授予该角色的权限决定着 Kinesis Analytics 服务在担任相应角色时可执行的操作。有关更多信息,请参阅 Kinesis Analytics 开发人员指南中的授予权限

问:Kinesis Analytics 如何扩展应用程序?

Kinesis Analytics 可对应用程序进行弹性扩展,以适应源流的数据吞吐量和大多数情况下的查询复杂性。Kinesis Analytics 以 Amazon Kinesis 处理单元 (KPU) 的形式预置容量。一个 KPU 可为您提供内存 (4GB) 和相应的计算与联网功能。
每个流源均会映射到相应的应用程序内部流中。尽管这对许多客户来说并非是必须的,但您可以指定输入并行机制参数来增加您的源映射到的应用程序内部流的数量,从而以更高效的方式使用 KPU。Kinesis Analytics 可按照您指定的应用程序内部流的数量均匀地分配流数据源的分区(例如 Amazon Kinesis 流的分区)。例如,如果您使用一个拥有 10 个分区的 Amazon Kinesis 流作为流数据源,并且指定了两个输入并行机制,则 Kinesis Analytics 会将五个 Amazon Kinesis 分区分配给两个名称分别为“SOURCE_SQL_STREAM_001”和“SOURCE_SQL_STREAM_002”的应用程序内部流。有关更多信息,请参阅 Kinesis Analytics 开发人员指南中的配置应用程序输入

问:与构建和管理 Kinesis Analytics 应用程序相关的最佳实践有哪些?

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


问:如何让特定 SQL 语句正常运行?

有关详细信息,请参阅 Kinesis Analytics 开发人员指南中的示例应用程序部分,其中介绍了您可以使用的 SQL 示例数量。此外,Kinesis Analytics SQL 参考中提供了有关编写流 SQL 语句的详细指导。如果您仍有问题,我们建议您在 Amazon Kinesis 论坛 上进行询问。

问:如果 Kinesis Analytics 无法检测到或发现我的架构,我该如何使用 Kinesis Analytics?

对于其他 UTF-8 编码的数据(未使用分隔符或使用 CSV 之外的其他分隔符)或者在发现 API 未完全发现架构的情况下,您可以手动定义架构或使用字符串处理函数来构建数据。有关更多信息,请参阅 Kinesis Analytics 开发人员指南中的使用架构发现功能和相关编辑功能

问:我应该监控哪些重要参数以便确保应用程序正常运行?

需要监控的最重要的指标是 CloudWatch 指标(MillisBehindLatest),该指标表示您从流中读取的时间落后当前时间多远。该指标可提供一种有效机制来确定您是否能以足够快的速度处理来自源流的记录。您应该设置 CloudWatch 警报,以使其在您落后一个小时以上(该时间取决于您的使用案例且可根据需要进行调整)后触发。您可以在 Kinesis Analytics 开发人员指南中的最佳实践部分了解更多信息。

问:在运行 Kinesis Analytics 应用程序时,如何对无效代码错误进行故障排除?
有关无效代码错误和对 Kinesis Analytics 应用程序进行故障排除的信息,请参阅 Amazon Kinesis Analytics 开发人员指南中的故障排除


问:Kinesis Analytics 如何收费?

使用 Amazon Analytics,您只需按实际用量付费。您只需根据用于运行流处理应用程序的 Kinesis 处理单元 (KPU) 的平均数量按小时支付费用。我们会四舍五入到最接近的整数 KPU。

一个 KPU 是一个包含内存 (4GB)、计算(1 个 vCPU)和相应联网功能的流处理资源。由于流应用程序的内存和计算使用量在处理过程中会不断变化,Kinesis Analytics 可根据流工作负载自动对 KPU 的数量进行弹性扩展。无需预置资源,也没有与 Kinesis Analytics 相关的前期费用或最低费用。

有关定价的更多信息,请参阅 Kinesis Analytics 定价页面

问:Kinesis Analytics 是否包含在 AWS 免费套餐中?

否。Kinesis Analytics 目前不包含在 AWS 免费套餐中。AWS 免费套餐是一项提供了免费试用一系列 AWS 服务的计划。

问:我是否需要为处于运行状态但未处理来自源的任何数据的 Kinesis Analytics 应用程序付费?

如果您的 Kinesis Analytics 应用程序处于运行状态,则您最低需要支付一个 KPU 的费用。

问:除了 Kinesis Analytics 费用之外,我是否还需要支付任何其他费用?

Kinesis Analytics 是一个完全托管的流处理解决方案,独立于其从中读取数据的流源和向其中写入处理数据的目标。您需要分别为与输入和输出流相关的 Kinesis Firehose 和 Kinesis Streams 使用费用付费。

问:Kinesis Analytics 与使用 Amazon Kinesis 客户端库运行自己的应用程序有何不同之处?

Amazon Kinesis 客户端库 (KCL) 是一个预建的库,可帮助您构建使用者应用程序,用以读取和处理来自 Amazon Kinesis 流的数据。KCL 可以处理各种复杂的问题,如适应流量的变化、均衡流数据负载、协调分布式服务以及以容错方式处理数据。KCL 使您能够在专注于业务逻辑的同时构建应用程序。

借助 Kinesis Analytics,您可以处理和查询实时流数据。您可以使用标准 SQL 来处理数据流,这样您便无需学习任何新的编程语言。您只需将 Kinesis Analytics 指向传入数据流、编写 SQL 查询,然后指定要将结果加载到其中的位置即可。Kinesis Analytics 可将 KCL 作为底层应用程序的一部分来使用,以读取来自流数据源的数据。该服务将 KCL 以及很多与使用 KCL(例如检查点操作)相关的更复杂的概念抽象化了。

如果您需要一个完全托管的解决方案且想要使用 SQL 处理流数据,则应使用 Kinesis Analytics。如果您需要构建 Kinesis Analytics 无法满足其要求的自定义处理解决方案,请使用 KCL,这样您便可以管理所得到的使用者应用程序。