Unisci due frammenti - Flusso di dati Amazon Kinesis

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à.

Unisci due frammenti

Un'operazione di unione shard prende due shard specificati e li combina in un singolo shard. Dopo l'unione, il singolo shard figlio riceve i dati per tutti i valori chiave hash coperti dai due shard padre.

Adiacenza di shard

Per unire due shard, gli shard devono essere adiacenti. Due shard sono considerati adiacenti se l'unione degli intervalli chiave hash per i due shard formano un set contiguo senza spazi. Ad esempio, supponiamo di avere due shard, uno con una gamma di chiavi hash di 276...381 e l'altro con una gamma di chiavi hash di 382...454. È possibile unire questi due shard in un singolo shard che avrebbe così una gamma di chiavi hash 276... 454.

Per fare un altro esempio, supponiamo di avere due shard, uno con una gamma di chiavi hash di 276...381 e l'altro con una gamma di chiavi hash di 455...560. In questo caso non è possibile unire i due shard, poiché ci sarebbero uno o più shard tra questi due a copertura della gamma 382...454.

L'insieme di tutti gli OPEN shard in un flusso, come gruppo, copre sempre l'intero intervallo di valori delle chiavi hash. MD5 Per ulteriori informazioni sugli stati degli shard, come ad esempio CLOSED, vedere Prendi in considerazione il routing dei dati, la persistenza dei dati e lo stato dello shard dopo una reshard.

Per identificare gli shard candidati per l'unione, è necessario filtrare tutti gli shard che sono in uno stato CLOSED. Le partizioni con stato OPEN, ossia non CLOSED, hanno un numero di sequenza finale pari a null. È possibile testare il numero di sequenza finale per un shard utilizzando:

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

Dopo aver filtrato gli shard chiusi, ordinare i restanti shard dal valore chiave hash più alto supportato per ogni shard. È possibile recuperare questo valore utilizzando:

shard.getHashKeyRange().getEndingHashKey();

Se due shard sono adiacenti in questo elenco filtrato e ordinato, allora possono essere uniti.

Codice dell'operazione di unione

Il seguente codice unisce due shard. Il codice presuppone che myStreamName contiene il nome del flusso e che le variabili oggetto shard1 e shard2 contengono due shard adiacenti da unire.

Per l'operazione di unione, iniziare creando istanze di un nuovo oggetto mergeShardsRequest. Specificare il nome del flusso con il metodo setStreamName. Quindi specificare i due shard da unire utilizzando i metodi setShardToMerge e setAdjacentShardToMerge. Infine, chiama il metodo mergeShards sul client del flusso di dati Kinesis per eseguire l'operazione.

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

La prima fase dopo questa procedura è illustrata in Attendi che uno stream torni ad essere attivo.