合并两个分片 - Amazon Kinesis Data Streams
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 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 方法指定要合并的两个分片。最后,调用mergeShards方法以执行此操作。

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

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