

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Kinesis Data Streams 术语和概念
<a name="key-concepts"></a>

开始使用 Amazon Kinesis Data Streams 之前，有必要了解其架构和术语。

**Topics**
+ [查看 Kinesis Data Streams 的高级架构](#high-level-architecture)
+ [熟悉 Kinesis Data Streams 的术语](#terminology)

## 查看 Kinesis Data Streams 的高级架构
<a name="high-level-architecture"></a>

下图展示了 Kinesis Data Streams 的大致架构。*创建器*会持续将数据推送到 Kinesis Data Streams，*消费端*会实时处理数据。消费者（例如在亚马逊 EC2 上运行的自定义应用程序或亚马逊 Data Firehose 传输流）可以使用亚马逊 DynamoDB、Amazon Redshift 或 Amazon S3 等 AWS 服务存储结果。

![\[Kinesis Data Streams 大致架构图\]](http://docs.aws.amazon.com/zh_cn/streams/latest/dev/images/architecture.png)


## 熟悉 Kinesis Data Streams 的术语
<a name="terminology"></a>

### Kinesis 数据流
<a name="stream"></a>

*Kinesis 数据流*是一组[分片](#shard)。每个分片都有一系列数据记录。每个数据记录都有一个由 Kinesis Data Streams 分配的[序列号](#sequence-number)。

### 数据记录
<a name="data-record"></a>

数据记录是存储在 [Kinesis 数据流](#stream)中的*数据单位*。数据记录由[序列号](#sequence-number)、[分区键](#partition-key)和数据 Blob（不可变的字节序列）组成。Kinesis Data Streams 不会以任何方式检查、解释或更改 Blob 中的数据。数据 Blob 最大可为 1MB。

### 容量模式
<a name="stream-capacity-mode"></a>

数据流*容量模式*决定如何管理容量以及如何对数据流的使用收费。目前，在 Kinesis Data Streams 中，您可以为数据流选择**按需**模式和**预置**模式。有关更多信息，请参阅 [选择正确的流式传入的模式](how-do-i-size-a-stream.md)。

若采用**按需**模式，Kinesis Data Streams 会自动管理分片来提供必要的吞吐量。您只需为实际使用的吞吐量付费，Kinesis Data Streams 会在工作负载增加或减少时自动适应吞吐量需求。有关更多信息，请参阅 [按需标准模式的特征和用例](how-do-i-size-a-stream.md#ondemandmode)。

若采用**预置**模式，您必须为数据流指定分片数。数据流的总容量是其分片容量的总和。您可以根据需要增加或减少数据流中的分片数，并且按小时费率支付分片数的费用。有关更多信息，请参阅 [预置模式的特征和用例](how-do-i-size-a-stream.md#provisionedmode)。

### 保留周期
<a name="retention"></a>

*保留期* 是数据记录在添加到流中后可供访问的时间长度。在创建之后，流的保留期设置为默认值 24 小时。您可以使用该操作将保留期延长至 8760 小时（365 天），并使用该[IncreaseStreamRetentionPeriod](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_IncreaseStreamRetentionPeriod.html)操作将保留期缩短至至少 24 小时。[DecreaseStreamRetentionPeriod](https://docs.aws.amazon.com/kinesis/latest/APIReference/API_DecreaseStreamRetentionPeriod.html)对于保留期设置为 24 小时以上的流，将收取额外费用。有关更多信息，请参阅 [Amazon Kinesis Data Streams 定价](https://aws.amazon.com/kinesis/pricing/)。

### Producer
<a name="producers"></a>

*创建器*会将记录存入 Amazon Kinesis Data Streams。例如，发送日志数据到流的 Web 服务器是创建器。

### 消费端
<a name="consumers"></a>

*消费端*会从 Amazon Kinesis Data Streams 获取记录并加以处理。这些消费端称为 [Amazon Kinesis Data Streams 应用程序](#enabled-application)。

### Amazon Kinesis Data Streams 应用程序
<a name="enabled-application"></a>

*Amazon Kinesis Data Streams 应用程序*是通常在 EC2 实例集上运行的流的消费端。

可以开发的消费端有两种：共享扇出功能消费端和增强型扇出功能消费端。要了解它们之间的区别，以及了解如何创建每种消费端，请参阅[从 Amazon Kinesis Data Streams 读取数据](building-consumers.md)。

Kinesis Data Streams 应用程序的输出可能是另一个流的输入，这使您能够创建实时处理数据的复杂拓扑。应用程序还可以向各种其他 AWS 服务发送数据。一个流可以有多个应用程序，每个应用程序可同时单独使用流中的数据。

### 分片
<a name="shard"></a>

*分片* 是流中数据记录的唯一标识序列。一个流由一个或多个分片组成，每个分片提供一个固定的容量单位。每个分片最多可以支持每秒 5 个事务的读取，最大总数据读取速率为每秒 2MB；每个分片最多可以支持每秒 1000 条记录的写入，最大总数据写入速率为每秒 1MB（包括分区键）。流的数据容量是您为流指定的分片数的函数。流的总容量是其分片容量的总和。

如果数据速率增加，您可以增加或减少分配给流的分片数量。有关更多信息，请参阅 [对流进行重新分片](kinesis-using-sdk-java-resharding.md)。

### 分区键
<a name="partition-key"></a>

*分区键*用于在流中按分片对数据进行分组。Kinesis Data Streams 将属于一个流的数据记录分割到多个分片中。它使用与每个数据记录关联的分区键确定指定数据记录属于哪个分片。分区键是 Unicode 字符串，每个键的最大长度限制为 256 个字符。 MD5 哈希函数用于将分区键映射到 128 位整数值，并使用分片的哈希键范围将关联的数据记录映射到分片。当应用程序将数据放入流中时，它必须指定一个分区键。

### 序列号
<a name="sequence-number"></a>

每条数据记录都有一个*序列号*，该序列号对其分片内的每个分区键都是唯一的。在您使用 `client.putRecords` 或 `client.putRecord` 写入流之后，Kinesis Data Streams 将分配序列号。同一分区键的序列号通常会随时间推移增加。写入请求之间的时间段越长，序列号越大。

**注意**  
序列号不能用作相同流中的数据集的索引。为了在逻辑上分隔数据集，请使用分区键或者为每个数据集创建单独的流。

### Kinesis Client Library
<a name="client-library"></a>

Kinesis Client Library 将编译成应用程序，从而支持以容错方式使用流中的数据。Kinesis Client Library 确保每个分片有一个用于运行和处理它的记录处理器。库还可以简化流中的数据读取。Kinesis Client Library 使用 Amazon DynamoDB 表来存储与数据使用相关的元数据。它会为每个正在处理数据的应用程序创建三个表。有关更多信息，请参阅 [使用 Kinesis Client Library](kcl.md)。

### 应用程序名称
<a name="application-name"></a>

Amazon Kinesis Data Streams 应用程序的名称用于标识应用程序。您的每个应用程序都必须有一个唯一的名称，该名称的范围仅限于该应用程序使用的 AWS 账户和区域。此名称用作 Amazon DynamoDB 中控制表的名称和亚马逊指标的命名空间。 CloudWatch 

### 服务器端加密
<a name="server-side-encryption-concept"></a>

当创建器将敏感数据输入流时，Amazon Kinesis Data Streams 可以自动加密这些数据。Kinesis Data Streams 使用 [AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/) 主密钥进行加密。有关更多信息，请参阅 [Amazon Kinesis Data Streams 中的数据保护](server-side-encryption.md)。

**注意**  
要读取或写入加密的流、创建者和消费端应用程序必须有权访问主密钥。有关向创建者应用程序和消费端应用程序授予权限的信息，请参阅[使用用户生成的 KMS 密钥的权限](permissions-user-key-KMS.md)。

**注意**  
使用服务器端加密会产生 AWS Key Management Service (AWS KMS) 成本。有关更多信息，请参阅 [AWS Key Management Service Pricing](https://aws.amazon.com/kms/pricing)。