Amazon Kinesis Data Streams
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

合并两个分片

分片合并操作使用两个指定分片并将它们合并为一个分片。在合并后,单个子分片将收到两个父分片所包含的所有哈希键值的数据。

分片相邻

若要合并两个分片,分片必须相邻。如果两个分片的哈希键范围联合构成一个无间断的连续集,则认为两个分片相邻。例如,如果您有两个分片,一个分片的哈希键范围为 276...381,另一个分片的哈希键范围为 382...454,则您可将这两个分片合并为一个分片,其哈希键范围为 276...454。

另举一例,如果您有两个分片,一个分片的哈希键范围为 276..381,另一个分片的哈希键范围为 455...560,则您无法合并这两个分片,因为这两个分片之间有一个或多个哈希键在 382..454 范围的分片。

流中所有 OPEN 分片的集(作为一个组)始终跨越 MD5 哈希键值的整个范围。有关分片状态(如 CLOSED)的更多信息,请参阅 分片之后的数据路由、数据保留和分片状态

要标识作为合并候选的分片,您应筛选出处于 CLOSED 状态的所有分片。处于 OPEN 状态(不是 CLOSED 状态)的分片将具有结束序列号 null。您可使用以下命令测试此结束序列号:

if( null == shard.getSequenceNumberRange().getEndingSequenceNumber() ) { // Shard is OPEN, so it is a possible candidate to be merged. }

在筛选出已关闭分片后,按每个分片支持的最高哈希键值对剩余分片进行排序。您可使用以下命令检索此值:

shard.getHashKeyRange().getEndingHashKey();

如果两个分片在这个经过筛选和排序的列表中相邻,则可合并它们。

合并操作的代码

以下代码可合并两个分片。此代码假定 myStreamName 包含您的流名称并且对象变量 shard1shard2 包含要合并的两个相邻分片。

为进行合并操作,首先实例化一个新的 mergeShardsRequest 对象。使用 setStreamName 方法指定流名称。然后使用 setShardToMergesetAdjacentShardToMerge 方法指定要合并的两个分片。最后,对 Kinesis Data Streams 客户端调用 mergeShards 方法以执行此操作。

MergeShardsRequest mergeShardsRequest = new MergeShardsRequest(); mergeShardsRequest.setStreamName(myStreamName); mergeShardsRequest.setShardToMerge(shard1.getShardId()); mergeShardsRequest.setAdjacentShardToMerge(shard2.getShardId()); client.mergeShards(mergeShardsRequest);

等待流再次变为活动状态中演示了此过程之后的第一步。