Teilen Sie einen Shard - Amazon-Kinesis-Data-Streams

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Teilen Sie einen Shard

Um einen Shard in Amazon Kinesis Data Streams zu teilen, müssen Sie festlegen, wie Hash-Schlüsselwerte aus dem übergeordneten Shard auf die untergeordneten Shards umverteilt werden sollten. Wenn Sie einen Datensatz zu einem Stream hinzufügen, wird dieser basierend auf einem Hash-Schlüsselwert einem Shard zugeordnet. Der Hash-Schlüsselwert ist der MD5Hash des Partitionsschlüssels, den Sie für den Datensatz angeben, wenn Sie den Datensatz dem Stream hinzufügen. Datensätze mit demselben Partitionsschlüssel haben auch denselben Hash-Schlüsselwert.

Die möglichen Hash-Schlüsselwerte für einen bestimmten Shard bilden eine Reihe von geordneten fortlaufenden nicht-negativen Ganzzahlen. Diese Reihe möglicher Hash-Schlüsselwerte ergibt sich wie folgt:

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

Wenn Sie die Shard teilen, legen Sie einen Wert in diesem Bereich fest. Dieser Hash-Schlüsselwert und alle höheren Hash-Schlüsselwerte werden auf eine der untergeordneten Shards verteilt. Alle niedrigeren Hash-Schlüsselwerte werden an die andere untergeordnete Shard verteilt.

Der folgende Code zeigt einen Shard -Teilungsvorgang, bei dem die Hash-Schlüssel gleichmäßig zwischen den untergeordneten Shards verteilt werden, wobei der übergeordnete Shard im Wesentlichen in zwei Hälften geteilt wird. Dies ist nur eine Möglichkeit, den übergeordneten Shard zu teilen. Sie könnten beispielsweise den Shard so teilen, dass das untere Drittel des Schlüssels aus dem übergeordneten Shard an einen untergeordneten Shard und die zwei oberen Drittel der Schlüssel an einen anderen untergeordneten Shard übergehen. Bei vielen Anwendungen ist jedoch das Teilen von Shards in zwei Hälften ein effektiver Ansatz.

Der Code setzt voraus, dass myStreamName den Namen Ihres Streams enthält und dass die Objektvariable shard den zu teilenden Shard enthält. Beginnen Sie mit der Instanziierung eines neuen splitShardRequest-Objekts und dem Festlegen des Stream-Namens und der Shard-ID.

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

Ermitteln Sie den Hash-Schlüsselwert, der genau zwischen dem niedrigsten und dem höchsten Wert im Shard liegt. Dies ist der Hash-Startschlüsselwert für den untergeordneten Shard, der die obere Hälfte der Hash-Schlüssel aus dem übergeordneten Shard enthält. Geben Sie diesen Wert in der setNewStartingHashKey-Methode an. Sie müssen nur diesen Wert angeben. Kinesis Data Streams verteilt automatisch die Hash-Schlüssel unter diesem Wert an den anderen untergeordneten Shard, der bei dieser Teilung erstellt wird. Der letzte Schritt besteht darin, die splitShard-Methode auf dem Kinesis-Data-Streams-Client aufzurufen.

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);

Der erste Schritt nach diesem Verfahren wird unter Warten Sie, bis ein Stream wieder aktiv wird veranschaulicht.