

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

# Amazon Kinesis Data Streams 中的故障恢复能力
<a name="disaster-recovery-resiliency"></a>

 AWS 全球基础设施是围绕 AWS 区域和可用区构建的。 AWS 区域提供多个物理隔离和隔离的可用区，这些可用区通过低延迟、高吞吐量和高度冗余的网络相连。利用可用区，您可以设计和操作在可用区之间无中断地自动实现失效转移的应用程序和数据库。与传统的单个或多个数据中心基础架构相比，可用区具有更高的可用性、容错性和可扩展性。

有关 AWS 区域和可用区的更多信息，请参阅[AWS 全球基础设施](https://aws.amazon.com/about-aws/global-infrastructure/)。

除了 AWS 全球基础架构外，Kinesis Data Streams 还提供多项功能来帮助支持您的数据弹性和备份需求。

## Amazon Kinesis Data Streams 中的灾难恢复
<a name="disaster-recovery"></a>

故障可能在您使用 Amazon Kinesis Data Streams 应用程序处理流中的数据时在以下级别发生：
+ 记录处理器可能失败
+ 工作程序可能失败，或者已实例化工作程序的应用程序的实例可能失败 
+ 托管该应用程序的一个或多个实例的 EC2 实例可能失败

### 记录处理器失败
<a name="kinesis-record-processor-failure-processor"></a>

工作人员使用 Java [ExecutorService](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html)任务调用记录处理器方法。如果任务失败，工作程序将保留对记录处理器之前在处理的分片的控制。工作程序启动一项新的记录处理器任务来处理该分片。有关更多信息，请参阅 [读取节流](kinesis-record-processor-additional-considerations.md#kinesis-record-processor-read-throttling)。

### 工作线程或应用程序失败
<a name="kinesis-record-processor-failure-worker"></a>

如果工作程序或 Amazon Kinesis Data Streams 应用程序的实例出现故障，您应该检测并处理这类情况。例如，如果 `Worker.run` 方法引发了一项异常，则您应捕获并处理它。

如果应用程序本身失败，您应检测此应用程序并重新启动它。该应用程序启动时，它会实例化一个新工作程序，这会反过来实例化自动获得要处理的分片的新记录处理器。这些分配可能是记录处理器在失败前正在处理的相同分片或这些处理器新接触的分片。

在工作程序或应用程序失败、未检测到失败且应用程序有其他实例正在其他 EC2 实例上运行的情况下，这些实例上的工作程序会处理该失败。它们将创建额外的记录处理器来处理不再由失败的工作程序处理的分片。这些其他 EC2 实例上的负载也会相应地增加。

此处描述的情形假定，尽管工作程序或应用程序已失败，但托管 EC2 实例仍在运行并因此不由自动扩缩组重新启动。

### Amazon EC2 实例故障
<a name="kinesis-record-processor-failure-instance"></a>

我们建议您在自动扩缩组中为您的应用程序运行 EC2 实例。由此一来，如果其中一个 EC2 实例失败，自动扩缩组会自动启动新的实例进行代替。您应该将实例配置为在启动时启动您的 Amazon Kinesis Data Streams 应用程序。