分割碎片 - Amazon Kinesis Data Streams

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

分割碎片

若要在 Amazon Kinesis Data Streams 中分割碎片,您必須指定如何將來自父碎片的雜湊索引鍵值重新分配到子碎片。將資料記錄新增到串流時,它會根據雜湊索引鍵值指派給碎片。雜湊索引鍵值是您在將資料記錄新增至串流時為資料記錄指定的資料分割索引鍵的MD5雜湊值。具有相同分割區索引鍵的資料記錄也會有相同的雜湊索引鍵值。

指定碎片的可能雜湊索引鍵值會組成一組有次序的連續非負整數。此可能的雜湊索引鍵值範圍假設為:

shard.getHashKeyRange().getStartingHashKey(); shard.getHashKeyRange().getEndingHashKey();

分割碎片時,您會指定在這個範圍中的值。該雜湊索引鍵值和所有較高的雜湊索引鍵值會分配至其中一個子碎片。所有較低的雜湊索引鍵值會分配至其他子碎片。

以下程式碼示範碎片分割操作,該操作會在每個子碎片之間將雜湊索引鍵平均分配,基本上是將父碎片分割成兩半。這只是分割父碎片的一個可能方式。例如,您可以分割碎片,使得來自父系較少的三分之一的索引鍵前往第一個子碎片,以及來自父系較高的三分之二索引鍵則前往其他子碎片。不過,對於許多應用程式來說,將碎片分割成兩半是有效的方法。

此程式碼假設 myStreamName 擁有串流的名稱,以及物件變數 shard 則擁有要分割的碎片。從將新的 splitShardRequest 物件執行個體化開始,並設定串流名稱和碎片 ID。

SplitShardRequest splitShardRequest = new SplitShardRequest(); splitShardRequest.setStreamName(myStreamName); splitShardRequest.setShardToSplit(shard.getShardId());

決定碎片中介於最低和最高值之間一半的雜湊索引鍵值。這是將包含來自父碎片上半雜湊索引鍵之子碎片的開始雜湊索引鍵值。在 setNewStartingHashKey 方法中指定這個值。您只需要指定這個值。Kinesis Data Streams 會將低於這個值的雜湊索引鍵自動分配至分割建立的另一個子碎片。最後一個步驟是呼叫 Kinesis Data Streams 用戶端上的 splitShard 方法。

BigInteger startingHashKey = new BigInteger(shard.getHashKeyRange().getStartingHashKey()); BigInteger endingHashKey = new BigInteger(shard.getHashKeyRange().getEndingHashKey()); String newStartingHashKey = startingHashKey.add(endingHashKey).divide(new BigInteger("2")).toString(); splitShardRequest.setNewStartingHashKey(newStartingHashKey); client.splitShard(splitShardRequest);

等待串流再次變為作用中中顯示此程序後的第一個步驟。