Dividir um estilhaço - Amazon Kinesis Data Streams

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Dividir um estilhaço

Para dividir um fragmento no Amazon Kinesis Data Streams, você precisa especificar como os valores de chave de hash dos fragmentos pai devem ser redistribuídos para os fragmentos filho. Quando você adiciona um registro de dados a um stream, ele é atribuído a um estilhaço com base em um valor de chave de hash. O valor da chave de hash é o hash do MD5 da chave de partição que você especifica para o registro de dados no momento em que adiciona o registro de dados ao streaming. Os registros de dados que têm a mesma chave de partição também têm o mesmo valor de chave de hash.

Os valores possíveis de chave de hash de um determinado estilhaço constituem um conjunto de números inteiros contíguos, não negativos e ordenados. Esse intervalo de possíveis valores de chave de hash é determinado pelo seguinte:

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

Quando divide o estilhaço, você especifica um valor neste intervalo. Esse valor de chave de hash e todos os valores de chave de hash maiores são distribuídos para um dos estilhaços filhos. Todos os valores de chave de hash menores são distribuídos para os outros estilhaços filhos.

O seguinte código demonstra uma operação de divisão de estilhaço que redistribui as chaves de hash uniformemente entre cada um dos estilhaços filhos, basicamente, dividindo o estilhaço pai no meio. Essa é apenas uma das maneiras possíveis de dividir o estilhaço pai. Você pode, por exemplo, dividir o estilhaço de maneira que o terço inferior das chaves do pai vá para um estilhaço filho e os dois terços superiores das chaves vão para o outro estilhaço filho. No entanto, para muitos aplicativos, dividir os estilhaços no meio é uma abordagem eficiente.

O código pressupõe que myStreamName contém o nome do seu stream e a variável de objeto shard contém o estilhaço a dividir. Comece instanciando um novo objeto splitShardRequest e definindo o nome do stream e o ID do estilhaço.

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

Determine o valor da chave de hash que é meio caminho entre o maior valor e o menor valor no estilhaço. Trata-se do valor de chave de hash inicial para o estilhaço filho que conterá a metade superior das chaves de hash do estilhaço pai. Especifique esse valor no método setNewStartingHashKey. Você só precisa especificar esse valor. O Kinesis Data Streams distribui automaticamente as chaves de hash abaixo desse valor para os outros fragmentos filho criados pela divisão. A última etapa é chamar o método splitShard no cliente do Kinesis Data Streams.

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

A primeira etapa após este procedimento é mostrada em Aguardar um stream ficar ativo novamente.