构建自行车骑行分析应用
立即解锁
发布时间: 2025-08-30 01:42:07 阅读量: 7 订阅数: 11 AIGC 

### 构建自行车骑行分析应用
#### 技术要求
在开始探索 KDA 之前,需要进行一些设置和配置:
1. **AWS 账户设置**:需要一个 AWS 账户来运行相关示例。若没有账户,可前往 [https://aws.amazon.com/getting-started/](https://aws.amazon.com/getting-started/) 创建。AWS 提供免费套餐([https://aws.amazon.com/free](https://aws.amazon.com/free)),但部分服务示例超出免费套餐范围,会产生使用费用。
2. **AWS CDK**:需要 AWS 云部署工具包(CDK)来创建云应用资源。可在命令提示符中执行以下命令安装:
```bash
npm install -g aws-cdk
```
详细操作指南可参考 [https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html](https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html)。
3. **Java 和 Java IDE**:需要 Java 开发工具包(JDK)11 版本([https://www.oracle.com/java/technologies/javase-jdk11-downloads.html](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html))。推荐使用开发环境(如 IntelliJ Idea)来开发和编译 Apache Flink 应用。还需要 Apache Maven([https://maven.apache.org/plugins/maven-compiler-plugin/](https://maven.apache.org/plugins/maven-compiler-plugin/))来编译 Apache Flink 应用,且必须将其添加到工作路径中。KDA for Apache Flink 仅支持使用 Apache Maven 构建的 Java 应用。
4. **代码示例**:代码示例可在 GitHub 上获取,地址为 [https://github.com/PacktPublishing/Streaming-Data-Solutions-with-Amazon-Kinesis](https://github.com/PacktPublishing/Streaming-Data-Solutions-with-Amazon-Kinesis),需要使用 Git 客户端访问([https://git-scm.com/](https://git-scm.com/))。
#### 了解 Amazon KDA
KDA 可帮助我们理解和分析数据流中的数据。在深入了解 KDA 之前,可观看视频 [https://www.youtube.com/watch?v=PvxlF3A-Res](https://www.youtube.com/watch?v=PvxlF3A-Res),了解 Zynga 如何利用 KDA 提取各种指标以高效运营业务并提供优质客户体验。
KDA 是托管服务,AWS 提供至少 99.9% 的月正常运行时间。AWS 使用 Kinesis 处理单元(KPU)来衡量应用程序的资源利用率,1 个 KPU 相当于 1 个 vCPU 和 4GB 内存。详细定价信息可参考 [https://aws.amazon.com/kinesis/data-analytics/pricing/](https://aws.amazon.com/kinesis/data-analytics/pricing/)。KDA 会根据应用程序的内存和计算需求进行扩展或缩减,SQL 应用的 KPU 软限制为最多 8 个,可通过联系 AWS 或在 AWS 控制台提交提额申请来增加。可使用 CloudWatch 查看应用程序消耗的 KPU 数量。
#### SmartCity 共享单车分析用例
本章将使用 KDA 分析 SmartCity 自行车车队的遥测数据,以改善客户体验。使用生产者应用程序模拟 40 个自行车站,每次自行车租赁或归还到车站都会生成一个事件,生产者应用程序将事件放入 Kinesis 数据流中。KDA 应用程序将通过随时间聚合多个事件来处理数据,以获得以下分析结果:
- 确定自行车数量不足的车站是否可以从自行车充足的其他车站调配自行车。
- 确定每 30 分钟自行车租赁产生的收入。
生产者应用程序已预先创建,我们将专注于创建 KDA 分析应用程序。KDA 有两个主要引擎:基于 SQL 的引擎和基于 Apache Flink 的引擎,我们将使用这两个引擎为 SmartCity 设计分析解决方案。
SwipeBike 流分析管道步骤如下:
1. 生产者应用程序模拟自行车租赁和归还到车站的操作。
2. 在 EC2 实例上运行生产者应用程序,将租赁事件数据发送到 Kinesis 数据流。
3. 数据流将数据发送到 KDA 应用程序进行处理。
4. KDA 应用程序使用存储在 S3 存储桶中的流数据和参考数据进行分析。
5. KDA 应用程序的输出将发送到 Firehose,供下游消费者使用。
生产者应用程序发送到 KDS 的事件示例如下:
```json
{
"stationId": 420,
"action": "DOCKED",
"tripDuration": 145,
"price": 19.14,
"eventUTCTime": "2020-12-25T13:19:31.000589",
"bikeDetail": {
"bikeNum": "a33492a7-d59f-4484-bb37-7431252d8099",
"bikeType": "ADVANCED"
}
}
```
若 `action` 为 "RENTED",表示有人租了自行车;若为 "DOCKED",表示自行车已归还到车站。当 `action` 为 "RENTED" 时,`tripDuration` 和 `price` 字段为空。
#### 使用 SQL 引擎创建运营洞察
流式 SQL 基于关系数据库中常用的结构化查询语言(SQL)构建。KDA 使用 ANSI 2008 SQL 标准并进行扩展,以创建实时流处理解决方案。与 SQL 数据库的关键区别在于,流式 SQL 处理连续数据流。流式 SQL 具有以下优点:
- 对于熟悉 SQL 数据库的人来说易于学习。
- 其行为易于理解,使用了表、连接和聚合函数的概念。
- 有丰富的 SQL 工具和代码生成器生态系统。
但流式 SQL 不能替代数据库,数据库用于处理和存储大量数据,而 KDA SQL 流式处理以小数据块的形式处理大量数据,主要用于获取最新数据的洞察或分析。
如果熟悉数据库和数据库 SQL,可以将流式 SQL 类比为使用数据库触发器处理数据。流式 SQL 添加了 WINDOW 概念来处理事件集合(行),而数据库触发器处理单个行(事件)。
#### KDA SQL 核心概念和功能
KDA SQL 应用程序首先需要定义输入或源,可以是 Kinesis 数据流或 Kinesis Data Firehose。KDA SQL 引擎有两个可能的数据源,处理数据的步骤如下:
1. 将 KDA 应用程序源映射到应用内流(SOURCE_SQL_STREAM),其行为类似于表。
2. 可选择添加所需的参考数据。
3. 应用内 STREAM 和 PUMP 是实际处理数据的代码。应用内 STREAM 类似于数据库表,用于存储数据。PUMP 类似于数据库的 `SELECT * FROM … INSERT INTO` 语句,对应用内 STREAM(表)进行操作,并将其与参考数据或其他应用内流数据连接,以执行所需的业务逻辑。
4. PUMP 的结果将插入到另一个应用内流 TARGET_SQL_STREAM 中。
可使用 TARGET_SQL_STREAM 进行额外分析或将其发送到下游继续处理。
#### 定义输入
KDA 应用程序接受单个输入,可以是 Kinesis 数据流或 Kinesis Data Firehose。可以将 KDA 应用程序视为 Kinesis 数据流的消费者之一,KDA 不会改变 Kinesis 数据流中的数据,同一 Kinesis 数据流可以有其他消费者。当多个 KDA 应用程序从同一 Kinesis 数据流读取数据时,Kinesis 数据流的配额和吞吐量仍然适用。
另一个输入可以是参考数据,可将其视为查找表。例如,Kinesis 数据流中只有客户 ID 和邮政编码,可使用参考数据将邮政编码与城市和州关联起来,输出该客户 ID 对应的城市和州。注意,KDA 参考数据必须以 CSV 或 JSON 文件的形式存储在 Amazon S3 存储桶中,最大文件大小为 1GB。
#### 定义 SQL 模式
KDA SQL 应用程序依赖于静态模式,输入映射类似于数据库表模式定义,用于告知 KDA 应用程序流数据的结构和数据类型。KDA 可以通过读取流中的样本数据来自动发现流数据模式,并尝试检测数据格式。如果 KDA 能确定结构,它将建议一个包含列和数
0
0
复制全文
相关推荐









