Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Dividere un frammento
Per suddividere una partizione in Flusso di dati Amazon Kinesis, è necessario specificare il modo in cui i valori della chiave hash devono essere ridistribuiti dalla partizione principale alle partizioni secondarie. Quando si aggiunge un record di dati al flusso, viene assegnato a uno shard in base al valore chiave hash. Il valore della chiave hash è l'MD5
I possibili valori chiave hash per un determinato shard costituiscono un set ordinato e contiguo di numeri interi non negativi. Questo intervallo di possibili valori chiave hash è determinato da quanto segue:
shard.getHashKeyRange().getStartingHashKey(); shard.getHashKeyRange().getEndingHashKey();
Quando si suddivide lo shard, è necessario specificare un valore in questo intervallo. Questo valore chiave hash e tutti i valori chiave hash più alti sono distribuiti a uno shard figlio. Tutti i valori chiave hash inferiori vengono distribuiti ad un altro shard figlio.
Il seguente codice illustra un'operazione di suddivisione shard che ridistribuisce le chiavi hash in modo uniforme tra ciascuno degli shard figlio, essenzialmente suddividendo lo shard padre a metà. Questo è solo uno dei modi possibili di ripartire lo shard padre. È possibile, ad esempio, suddividere lo shard in modo che il terzo inferiore delle chiavi dal padre vada ad uno shard figlio e i due terzi superiori delle chiavi vadano all'altro shard figlio. Tuttavia, per molte applicazioni, la suddivisione degli shard a metà è un approccio efficace.
Il codice presuppone che myStreamName
contiene il nome del flusso e la variabile oggetto shard
contiene lo shard da suddividere. Per cominciare, creare un nuovo oggetto splitShardRequest
e impostare il nome del flusso e l'ID shard.
SplitShardRequest splitShardRequest = new SplitShardRequest(); splitShardRequest.setStreamName(myStreamName); splitShardRequest.setShardToSplit(shard.getShardId());
Determinare il valore di chiave hash che si trova a metà tra i valori minimo e massimo contenuti nello shard. Questo è il valore chiave hash di partenza per lo shard figlio che conterrà la metà superiore delle chiavi hash dallo shard padre. Specificare questo valore nel metodo setNewStartingHashKey
. È necessario specificare solo questo valore. ll flusso di dati Kinesis distribuisce automaticamente le chiavi hash sotto questo valore all'altra partizione secondaria creata dalla suddivisione. L'ultima fase è la chiamata del metodo splitShard
sul client del flusso di dati Kinesis.
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);
La prima fase dopo questa procedura è illustrata in Attendi che uno stream torni ad essere attivo.