Mesclar dois fragmentos - 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á.

Mesclar dois fragmentos

Uma operação de mesclagem de fragmentos usa dois fragmentos especificados e combina-os em um único fragmento. Após a mesclagem, o único fragmento filho recebe dados para todos os valores de chave de hash cobertos pelos dois fragmentos pais.

Adjacência de fragmento

Para mesclar dois fragmentos, eles precisam estar adjacentes. Dois fragmentos são considerados adjacentes quando a união dos intervalos de chave de hash dos dois fragmentos forma um conjunto contíguo sem lacunas. Por exemplo, suponha que haja dois fragmentos, um com o intervalo de chaves de hash 276...381 e o outro com o intervalo de chaves de hash 382...454. É possível mesclar esses dois fragmentos em um só, que teria um intervalo de chaves de hash 276...454.

Para usar outro exemplo, suponha que haja dois fragmentos, um com um intervalo de chaves de hash 276...381 e o outro com um intervalo de chaves de hash 455...560. Não seria possível mesclar esses dois fragmentos porque haveria um ou mais fragmentos entre eles que estariam no intervalo 382...454.

O conjunto de todos os OPEN fragmentos em um fluxo, como um grupo, sempre abrange toda a faixa de valores da chave de hash. MD5 Para obter mais informações sobre esses estados de fragmento (como CLOSED), consulte Considerar o roteamento de dados, a persistência de dados e o estado do fragmento após uma refragmentação.

Para identificar os fragmentos candidatos para mesclagem, deve-se filtrar todos os fragmentos que estão no estado CLOSED. Os fragmentos OPEN (ou seja, não CLOSED) têm um número de sequência final null. É possível testar o número sequencial de término de um fragmento usando:

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

Após filtrar os fragmentos fechados, classifique os fragmentos restantes pelo valor de chave de hash mais alto aceito por cada fragmento. É possível recuperar esse valor usando:

shard.getHashKeyRange().getEndingHashKey();

Se dois fragmentos são adjacentes nessa lista filtrada e classificada, eles podem ser mesclados.

Código da operação de mesclagem

O código a seguir mescla dois fragmentos. O código pressupõe que myStreamName contém o nome do seu fluxo e as variáveis de objeto shard1 e shard2 contém os dois fragmentos adjacentes a mesclar.

Para a operação de mesclagem, comece instanciando um novo objeto mergeShardsRequest. Especifique o nome do fluxo com o método setStreamName. Em seguida, especifique os dois fragmentos a mesclar usando os métodos setShardToMerge e setAdjacentShardToMerge. Por fim, chame o método mergeShards no cliente do Kinesis Data Streams para executar a operação.

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

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