如何更改 Kinesis Data Streams 中打开的分片数?

上次更新时间:2020 年 6 月 5 日

我尝试更改 Amazon Kinesis Data Streams 中打开的分片数。如何执行此操作?重新分片之后,我该怎么做?

简短描述

分片可能会处于“打开”、“已关闭”或“已过期”状态。您可以向处于“打开”状态的分片添加数据记录,还可以检索该分片中的数据记录。

要更改 Kinesis Data Streams 中打开的分片数,请执行以下任意一种操作:

  1. 更新分片总数。此操作将会更改流中的分片数量。
  2. 拆分单个分片。
  3. 将两个分片合并为一个分片。

注意:如果您更改了 Amazon Kinesis 数据流中打开的分片数量,请注意这将对父分片和哈希键范围值产生的影响。

解决方法

更新分片总数

您可以通过 Kinesis 控制台 或 API 操作来更新打开的分片数。如果您使用 AWS 管理控制台,Data Streams 将会使用 UpdateShardCount API 重新为您的流分片。

  • 此 API 操作会将指定流的分片数更新为指定的分片数(通过在后台拆分或合并独立的分片)。这是一个流级别的 API 调用。
  • 它仅支持均匀扩展,将会创建哈希键范围百分比相同的分片。
  • UpdateShardCount 操作会将分片数量重新调整为大小相同的特定目标值。

拆分单个分区

如果您遇到“冷”分片或“热”分片的问题,则可以考虑将一个分片拆分为两个分片。

注意:您只能通过 API 操作拆分或合并分片。

收到的数据量超过预期的分片称为“热”分片。这时,您可以使用 SplitShard API 选择性地拆分热分片,从而增加针对这些分片的哈希键容量。有关管理热分片的更多信息,请参阅重新分片策略

您还可以利用 Amazon CloudWatch 监控 Amazon Kinesis Data Streams 服务。启用分片级别的指标,从而通过 CloudWatch 指标来确定“冷”分片或“热”分片,例如启用 IncomingRecordsIncomingBytes 指标。

将两个分片合并为一个分片

如果您遇到“热”分片或“冷”分片的问题,则可以考虑将两个分片合并为一个分片。

注意:您只能通过 API 操作拆分或合并分片。

收到的数据量低于预期的分片称为“冷”分片。这时,您可以使用 MergeShards API 来合并冷分片以利用其全部容量。这是一个分片级别的 API 调用。请注意,您只能合并两个相邻的分片,其哈希键范围合并后将构成一个无任何间隙的连续集。

您还可以利用 Amazon CloudWatch 监控 Amazon Kinesis Data Streams 服务。启用分片级别的指标,从而通过 CloudWatch 指标来确定“冷”分片或“热”分片,例如启用 IncomingRecordsIncomingBytes 指标。

其他注意事项

执行重新分片操作的分片或分片对称为父分片。执行重新分片操作后创建的分片称为子分片。父分片的状态也将从“打开”过渡到“已关闭”(并且在流的保留期到期后最终过渡到“已过期”)。这可能导致将子分片置于“打开”状态。有关父分片过渡的更多信息,请参阅分片之后的数据路由、数据保留和分片状态

重新分片后,您还应继续从“已关闭”的分片读取数据,直至用尽所有这些分片为止。这有利于保留使用者应用程序读取数据的顺序。用尽所有“已关闭”的分片后,您可以开始从打开的子分片中读取数据。Amazon Kinesis 客户端库 (KCL) 专为支持重新分片操作而设计。重新分片前已经存在于分片中的数据将会首先处理。有关重新分片操作的更多信息,请参阅重新分片、扩展和并行处理

如果您更改了打开的分片数,这还可能会导致一些(或全部)分片的哈希键范围发生变化。哈希键范围是一个分片的可能哈希键值的范围。它是一组有序的连续正整数,由开始和结束键值组成。例如,假设您创建了一个具有五个打开的分片的 Kinesis 数据流,则该哈希键范围将用 20% 等分。因此所有分片的哈希键值都为 20%。

如果您在该 Kinesis 数据流上执行重新分片操作,在该哈希键范围将在子分片按以下方式划分:

  • 使用控制台或 UpdateShardCount API:如果您将打开的分片数从 5 改为 10,则生成的子分片现在的哈希键空间为 10%。哈希键范围在所有打开的分片之间等分,值为 10%。
  • 使用 SplitShard API:将最后一个分片(分片 5)拆分为两个分片(分片 6 和分片 7)。在拆分分片前,父分片(分片 5)的哈希键空间为 20%。拆分之后,生成的子分片(分片 6 和分片 7)现在的哈希键空间为 10%。父分片的哈希键范围在两个子分片之间等分,值为 10%。因此,哈希键空间的组成为 20%-20%-20%-20%-10%-10%。 
  • 使用 MergeShards API:将最后两个分片(分片 4 和分片 5)合并为一个分片(分片 6)。父分片(分片 4 和分片 5)的哈希键空间为 20%。合并之后,生成的子分片(分片 6)现在的哈希键空间为 40%。父分片的哈希键范围在两个子分片之间相加,等于 40%。因此,哈希键空间的组成为 20%-20%-20%-40%。

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?