

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

# 处理启动、关闭和节流
<a name="kinesis-record-processor-additional-considerations"></a>

以下是要融入到您的 Amazon Kinesis Data Streams 应用程序设计中的部分其他注意事项。

**Topics**
+ [启动数据产生器和数据消费端](#kinesis-record-processor-producer-consumer-coordination)
+ [关闭 Amazon Kinesis Data Streams 应用程序](#developing-consumers-with-kcl-shutdown)
+ [读取节流](#kinesis-record-processor-read-throttling)

## 启动数据产生器和数据消费端
<a name="kinesis-record-processor-producer-consumer-coordination"></a>

默认情况下，KCL 从流的提示处开始读取记录，并且是最新添加的记录。在此配置中，如果数据生成应用程序在任何接收记录的处理器运行前向流添加记录，那么记录处理器不会在启动后读取这些记录。

要更改记录处理器的行为以便它始终从流的开头处读取数据，请在属性文件中为您的 Amazon Kinesis Data Streams 应用程序设置以下值：

```
initialPositionInStream = TRIM_HORIZON
```

默认情况下，Amazon Kinesis Data Streams 会将所有数据存储 24 小时。它还支持长达 7 天的延长保留和长达 365 天的长期保留。此时间范围称为*保留期*。将开始位置设置为 `TRIM_HORIZON` 时，将根据保留期的定义，对流中最早的数据启动记录处理器。即使使用 `TRIM_HORIZON` 设置，如果记录处理器在超过了保留期很长一段时间之后启动，流中的一些数据将不再可用。因此，您应该始终让使用者应用程序从流中读取数据，并使用该 CloudWatch 指标`GetRecords.IteratorAgeMilliseconds`来监控应用程序是否跟上了传入数据的步伐。

在某些情况下，对于记录处理器来说，错过流中的前几个记录没有关系。例如，您可能会在直播中运行一些初始记录，以测试直播是否 end-to-end按预期运行。在此初步验证之后，您随后会启动您的工作程序并开始将生产数据放入流中。

有关 `TRIM_HORIZON` 设置的更多信息，请参阅[使用分片迭代器](developing-consumers-with-sdk.md#kinesis-using-sdk-java-get-data-shard-iterators)。

## 关闭 Amazon Kinesis Data Streams 应用程序
<a name="developing-consumers-with-kcl-shutdown"></a>

当您的 Amazon Kinesis Data Streams 应用程序已完成其预定任务时，您应通过终止运行该应用程序的 EC2 实例来予以关闭。您可使用 [AWS 管理控制台](https://console.aws.amazon.com//ec2/home)或 [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/ec2/index.html) 来终止实例。

 关闭 Amazon Kinesis Data Streams 后，您应删除 KCL 用于跟踪应用程序状态的 Amazon DynamoDB 表。

## 读取节流
<a name="kinesis-record-processor-read-throttling"></a>

流的吞吐量在分片级别进行配置。每个分片的读取吞吐量最高为每秒 5 个事务，最大总数据读取速率为每秒 2 MB。如果某个应用程序（或对相同的流执行操作的一组应用程序）尝试以较快的速率从分片中获取数据，Kinesis Data Streams 将限制对应的 Get 操作。

在 Amazon Kinesis Data Streams 应用程序中，如果记录处理器处理数据的速度超过限制（例如在失效转移的情况下），则会出现节流。由于 KCL 管理应用程序与 Kinesis Data Streams 之间的交互，因此节流异常会在 KCL 代码中出现，而不会在应用程序代码中出现。然而，由于 KCL 会记录此类异常，因此您可在日志中进行查看。

如果您发现您的应用程序一直受到限制，则应考虑增加流的分片的数量。