现在让我们将注意力集中在 Amazon Kinesis Analytics 上。
Amazon Kinesis Analytics 使您能够快速编写 SQL 代码,以近乎实时的方式连续读取、处理和存储数据。
借助 Amazon Kinesis Analytics,您可以实时摄取数十亿个小数据点。 然后可以聚合每个单独的数据点以提供智能的业务见解,进而可用于持续优化和改进业务流程。
使用 Kinesis Analytics 需要您执行以下三个步骤。
第一步,配置输入流。
第二步,提供 SQL 查询来执行分析。
第三步,配置输出流并写出分析结果。
我们将更详细地深入研究每个步骤。 但在我们深入了解 Kinesis Analytics 服务的具体细节之前,让我们退后一步,考虑一下是什么首先促使我们证明使用实时分析服务的合理性。
正如该图中所示,数据的价值随着时间的推移而减少。 保持企业最佳绩效的能力通常与及时做出决策的能力有关。 我们越早做出明智且可行的决策,我们就能越快地调整和保持最佳性能,因此凸显了能够近乎实时地处理数据的重要性。 我们可以做出的决策类型取决于数据本身的年龄。 考虑到这一点,我们可以看到实时处理的数据使我们能够做出预防性和/或预测性决策。 几秒钟内处理的数据使我们能够做出可行的决策。 在几分钟到几小时内处理的数据使我们能够做出反应性决策。 在几天到几个月内处理的数据使我们能够执行商业智能类型的历史报告。 现在让我们考虑一些实时流数据的来源和生成器。 移动应用程序是不断收集您当前 GPS 位置的应用程序,并将其实时传输回集中服务。
点击流、开源工具,例如 Open Web Analytics 和 Piwik,集成后可跟踪和流式传输网页用户行为。 Application Log,应用程序日志记录,不断收集服务器应用程序的行为和运行性能。 IoT,物联网,连接到互联网的传感器,收集有关本地环境的信息并流回集中服务,例如物联网恒温器。 社交、Twitter 和 Facebook 等社交应用程序、用户帖子和评论。 接下来,我们现在讨论如何在 AWS 平台中使用 Amazon Kinesis Analytics 以及如何与其他 AWS 服务集成。 现在,我们将介绍一些高级示例,每个示例都强调一个不同的用例,其中 Kinesis Analytics 可用于实时处理传入的数据源,然后将生成的分析见解传播到特定端点 。 Kibana 仪表板的时间序列分析。 在此示例中,Kinesis Analytics 用于处理和导出基于时间序列的分析,其结果将发布到 Elasticsearch 托管的基于 Kibana 的仪表板中。 这种类型的架构非常适合根据时间序列数据创建关键绩效指标。 使用 QuickSight 将移动 Web 应用程序迁移到 RedShift。 此示例涉及一个移动 Web 应用程序,该应用程序使用 AWS JavaScript SDK 将应用程序点击流数据发送到 Kinesis 流中。
Kinesis 流是由 Kinesis Analytics 应用程序处理的输入流。 分析结果被输入到输出 Kinesis 流中,然后通过 Lambda ETL 函数进行转换。 然后输出被推送到 RedShift 数据库中。 AWS QuickSight 用于创建业务报告。 物联网实时监控。 此示例涉及物理 IoT 恒温器,用于收集温度读数并将其流式传输到 AWS IoT 主题。 AWS IoT 规则配置为处理 IoT 主题并将数据发布到 Kinesis 输入流中,然后该输入流本身用作 Kinesis 应用程序的输入。
然后,Kinesis 应用程序输出将传送到输出 Kinesis 流。 输出流通过订阅 Lambda 函数进行处理,该函数将数据转换为自定义指标,发布到 CloudWatch 中,使我们能够通过实施的警报对数据做出反应。 Amazon Kinesis Analytics 提供以下主要优势。 与其他分析工具相比,实时处理是该服务的基本特征和差异化因素。 完全托管,这是一项完全托管的服务。
AWS 负责服务的所有维护和运营方面,让您能够专注于数据的实时分析。 自动弹性,AWS 将根据需要调整和扩展底层基础设施,以确保持续分析,无论传入数据的数量和速度如何。 标准SQL,此服务支持标准 SQL,因此允许您重用现有的 SQL 技能。 现在让我们开始详细介绍 Kinesis Analytics 部署所使用和所需的每个关键概念。 对于初学者来说,您必须配置的第一件事是应用程序。
Kinesis Analytics 应用程序由三个主要子组件组成。
一,输入流。 输入流通常来自流数据源(例如 Kinesis 流),但也可以来自存储在 S3 存储桶中的参考数据源。
二、SQL处理逻辑,一系列处理输入并产生输出的SQL语句。 SQL 代码通常会执行聚合并生成见解。 SQL 语句是用符合 ANSI 的 SQL 编写的。 Amazon Kinesis Analytics 实施带扩展的 ANSI 2008 SQL 标准。
三、输出流。 输出流可以配置为保存用于输入其他查询或用于流式输出最终结果的中间结果。 输出流可以配置为写出目的地,例如 S3、Redshift、Elasticsearch 和/或其他 Kinesis 流。
接下来将开始更详细地研究每个子组件。 Kinesis Analytics 应用程序的核心旨在持续读取和处理传入的数据源流。 数据源流的示例是使用 Amazon Kinesis Stream 或 Amazon Kinesis Firehose 服务实现的数据源流。
Kinesis Analytics 应用程序可以配置的另一个可选输入是静态引用表。 Kinesis Analytics 应用程序上下文中的参考表可以丰富传入数据。 引用表是从 S3 存储桶中存储和提取的。 丰富过程是在查询时使用 SQL 连接执行的。 数据模式关联并应用于所有传入数据。 Kinesis Analytics 应用程序还可以自动检测数据架构。 但是,您可以通过指定自己的架构来完全覆盖此设置,也可以自定义和优化自动派生的架构。 应用程序输入流的数据模式定义了数据本身的结构。 这类似于在关系数据库中使用DDL语句(例如建表语句)的过程。 每个输入都必须与一个数据模式相关联。 正如已经提到的,默认模式是在配置时自动派生的。 尽管架构是在数据摄取开始时推断出来的,但 Kinesis Analytics 提供了一个架构编辑器,使您可以控制操作和自定义架构,以对输入进行宽松或严格的控制。 您编写的 SQL 查询语句代表 Kinesis Analytics 应用程序最重要的部分,因为它们生成您希望获得的实际分析。 您的分析是使用一个或多个 SQL 语句来实现的,用于处理和操作输入并生成输出。 您编写查询流以获取分析结果的 SQL 语句。 此过程可能涉及中间步骤,从而将一个查询的输出馈送到应用程序流中的第二个查询。 这个过程可以重复多次,直到获得最终期望的结果并保存到输出流。 可以利用多个 SQL 语句来为您提供灵活性,允许您建模和实现不同的数据处理模式,例如扇出、扇入、聚合、增强和/或过滤。 AWS Kinesis Analytics 控制台提供了一个查询编辑器等功能,我们可以在其中编写、格式化和保存分析查询。 查询编辑器提供了非常有用的 SQL 模板功能,您可以从预定义的 SQL 模板开始。 AWS 提供了多个 SQL 模板,涵盖了需要对流数据执行分析时的许多常见要求。 示例模板包括以下内容。 连续过滤器,根据where条件执行连续过滤器。 滚动时间窗口中的聚合函数,在 10 秒滚动窗口内聚合指定列的行。 多步骤应用程序、使用并行或串行处理步骤、应用程序流中的中间对于构建多步骤应用程序非常有用。 现在让我们快速浏览一下用于定义示例 Kinesis Analytics 应用程序的全套 SQL 语句。 此特定示例基于翻滚时间窗口模板中的聚合函数。 第一,对于初学者来说,模板定义了输出目标流的数据结构。 第二,接下来创建一个泵,将其输出定向到第一个语句中创建的目标流。 第三,最后,泵中填充了一条插入语句,该语句本身是由输入源流上的选择语句定义的。 有几点值得一提。 默认情况下,输入源流名为源 SQL 流 001。源流代表您配置的 Kinesis 流或 Kinesis Firehose特雷姆。 默认情况下,输出目标流被命名为目标 SQL 流。 select 语句始终在 insert 语句的上下文中使用,即当您从应用程序流中的一个中选择行时,会将结果插入到应用程序流中的另一个中。 insert 语句始终在泵的上下文中使用,即我们使用泵写入应用程序内流。 泵是用于使插入语句连续的机制。 正如刚才简要提到的,您可以实现一个涉及中间步骤的管道,其中一个 SQL 查询的输出用于在应用程序流中填充和生成另一个 SQL 查询的输出。 这个过程涉及到泵的概念。 泵用于获取从源流派生的查询输出,然后将它们存储到单独的应用程序流中。 此过程分为两步,首先定义一个新的应用程序流,然后将数据注入其中。 让我们逐步完成这个过程。 第一步是定义一个新的流,泵将用于将数据泵入其中。 我们定义新流的数据结构。 在此示例中,我们定义一个名为 stage1stream 的新流,它有四列。 第二步是定义新泵。 在这里,我们将其命名为 stage1pump。 该泵将数据插入到 stage1stream 中。 插入的数据源自对称为应用程序流的输入流执行的选择查询。 在处理和分析流数据时,我们需要在流上使用基于时间的边界。 考虑到这一点,在应用程序流中标记有一个称为行时间的特殊元列。 Rowtime 记录 Kinesis Analytics 首次将行插入应用程序流中的第一个行时的时间戳。 当记录在应用程序内的任何中间流之间移动时,相同的行时间值将与记录保持关联。 请注意,行时间用于在基于时间的滚动窗口上实现聚合。 当我们进入查询窗口幻灯片时,我们将更详细地介绍这一点。 Kinesis Analytics 使您能够执行连续查询。 连续查询非常适合需要不断收到与查询过滤器中的参数匹配的数据更改警报的场景。 Kinesis Analytics 负责在数据传输过程中持续运行 SQL 查询,将结果发送到您所需的目的地。 连续查询开始后,您将收到查询过滤器中所有数据更改(如果有)的通知。 例如,假设您有一个每分钟传输一次心率信息的 IoT 设备,并且您希望在发生大于 25% 的心率变化时收到通知。 您可以在应用程序代码中使用以下查询。 此查询持续运行,并在检测到心脏变化大于 25% 时发出记录。 如前所述,应用程序代码中的 SQL 查询在应用程序流中连续执行。 要从不断变化且无限制的数据中获取结果集,您通常需要使用基于时间或基于行的窗口来限制 SQL 查询。 此上下文中的窗口定义查询的开始和结束。 SQL 查询可以受时间窗口或基于行的窗口的限制。 现在让我们分别讨论其中的每一个。 基于时间的窗口。 基于时间的窗口查询是通过根据时间指定窗口边界来定义的。 例如,我们可以定义基于一分钟的时间窗口或更长的时间窗口,例如基于 10 分钟的窗口。 基于时间的窗口利用应用程序流中单调递增的时间戳列。 我们之前谈到了 Kinesis Analytics 在每个即将到来的记录上自动标记的行时间列。 Rowtime 可用于计算基于时间的窗口。 基于行的窗口。 基于行的窗口查询是通过以行数指定窗口大小来定义的。 Kinesis Analytics 支持三种类型的窗口:翻滚窗口、滑动窗口和自定义窗口。 现在我们将逐一讨论这些内容。 翻滚窗口是固定大小的窗口,其中窗口的绑定不与紧邻之前或之后的窗口重叠。 新的翻滚窗口的开始是从旧窗口的结束开始的。 滚动窗口通常用于创建基于时间范围的报告。 例如,您可以使用滚动窗口来计算给定网页在过去 10 分钟内的平均点击次数。 滑动窗口是固定大小的窗口,其中窗口的绑定与紧邻之前或紧邻之后的窗口重叠。 每当新行进入窗口时,滑动窗口都会发出新结果。 一条记录可以是多个窗口的一部分,并且可以在每个窗口中进行处理。 滑动窗口对于维护 KPI 和基于趋势的数据报告非常有用。 自定义窗口对于事件关联非常有用。 Web 应用程序会话化是一个可以使用自定义窗口的好例子。 会话化是使用 ses 跟踪和记录用户活动的过程针对该用户分配的 sion id。 在这种情况下,将根据用户的会话 ID 定义自定义窗口,并允许报告用户在特定会话期间完成的所有操作。