Operações de shard
O DataHub oferece dois modos para gerenciar shards: dimensionamento horizontal e divisão e mesclagem. Escolha o modo adequado às suas necessidades:
O dimensionamento horizontal de shards não permite mesclagem; já o modo de divisão e mesclagem oferece esse suporte.
Para consumir um tópico com o protocolo Kafka, ative o dimensionamento horizontal de shards.
Ao ativar o dimensionamento horizontal de shards, o recurso de intervalo de chaves fica indisponível. Os valores
BeginHashKeyeEndHashKeytornam-se idênticos em todos os shards, o que impede gravações baseadas emHashKeyouPartitionKey. Implemente roteamento personalizado por hash na camada da aplicação e considere que as operações de dimensionamento podem alterar o shard de destino das gravações.
Modo de dimensionamento horizontal de shards
O DataHub suporta dimensionamento horizontal dos shards de um tópico. Para usar esse recurso, ative o modo de Auto Scaling de shards ao criar o tópico.
Etapa 1
Ative a opção Shard Auto-scaling na parte inferior da caixa de diálogo New Topic.
Etapa 2
Clique no ícone de edição para modificar a quantidade de shards.
Na página de detalhes do tópico, a quantidade atual de shards aparece acima da aba Shard list. Clique no ícone de edição ao lado para alterar esse valor.
Etapa 3
Visualize os shards após o dimensionamento. A Shard list exibe a nova contagem de shards, e o status de cada novo shard é ACTIVE.
Dividir e mesclar shards
O DataHub permite aumentar ou diminuir a quantidade de shards em um tópico pelas operações SplitShard e MergeShard.
Casos de uso
Use a divisão e a mesclagem para responder a variações de tráfego sem provisionar recursos em excesso. Por exemplo, durante um grande evento de vendas, o tráfego de dados pode aumentar significativamente e a quantidade atual de shards pode ser insuficiente. Nesse cenário, use a operação SplitShard para escalar horizontalmente. É possível aumentar o número de shards até o máximo de 256, com throughput de até 1.280 MB/s dentro dos limites atuais de controle de fluxo. Após o evento, quando o tráfego retornar ao normal, mescle shards adjacentes com a operação MergeShard para reduzir a quantidade de shards e liberar capacidade.
Propriedades do shard
A API ListShard retorna informações sobre todos os shards de um tópico. Cada shard tem as seguintes propriedades:
{
"ShardId": "string",
"State": "string",
"ClosedTime": uint64,
"BeginHashKey": "string",
"EndHashKey": "string",
"ParentShardIds": [string,string,],
"LeftShardId": "string",
"RightShardId": "string"
}
SplitShard
Especifique uma chave de hash de 128 bits e um ID de shard, seja pelo sdk ou pelo console. A operação SplitShard divide o shard especificado em dois shards filhos e retorna seus IDs e intervalos de chaves. O shard original (pai) passa então para o estado CLOSED.
Por exemplo, começando com este shard:
ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Para dividi-lo com o sdk:
String shardId = "0";
SplitShardRequest req = new SplitShardRequest(projectName, topicName, shardId, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
SplitShardResult resp = client.splitShard(req);
Após a divisão, você terá três shards:
ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ShardId:1 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ShardId:2 Status:ACTIVE BeginHashKey:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Mesclar shards
Especifique dois IDs de shards adjacentes, seja pelo sdk ou pelo console. A operação MergeShard combina os dois shards em um único novo shard e retorna seu ID e intervalo de chaves. Ambos os shards pais passam então para o estado CLOSED.
Adjacência de shards
Dois shards são adjacentes quando seus intervalos de chaves de hash formam um conjunto contíguo, sem lacunas. Tentativas de mesclar shards não adjacentes falharão.
Por exemplo, começando com estes dois shards:
ShardId:0 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
ShardId:1 Status:ACTIVE BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Para mesclá-los com o sdk:
String shardId = "0";
String adjacentShardId = "1";
MergeShardRequest req = new MergeShardRequest(projectName, topicName, shardId, adjacentShardId);
MergeShardResult resp = client.mergeShard(req);
Após a mesclagem, você terá três shards:
ShardId:0 Status:CLOSED BeginHashKey:00000000000000000000000000000000
EndHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
ShardId:1 Status:CLOSED BeginHashKey:7FFFFFFFFFFFFFFF7FFFFFFFFFFFFFFF
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
ShardId:2 Status:ACTIVE BeginHashKey:00000000000000000000000000000000
EndHashKey:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
Notas de uso
Após uma divisão ou mesclagem, os shards pais entram no estado CLOSED e seguem o seguinte ciclo de vida:
CLOSED: O shard deixa de aceitar gravações e não é mais possível executar novas operações de divisão ou mesclagem nele. Os consumidores ainda podem ler os dados existentes.
Reclaimed: Quando o período de
lifecycledo tópico expira, o sistema recupera automaticamente o shardCLOSEDe todos os seus dados tornam-se inacessíveis. Se houver um conector configurado, sua tarefa será suspensa automaticamente assim que terminar de replicar os dados do shardCLOSED, sendo excluída após a recuperação do shard.
Os novos shards precisam atingir o estado ACTIVE antes de aceitarem leituras ou gravações. Esse processo geralmente leva menos de 5 segundos. Para confirmar se um shard está pronto, chame ListShard e verifique se o campo State está definido como ACTIVE.