Usar fragmentos e métricas com o DynamoDB Streams e o Kinesis Data Streams
Considerações sobre gerenciamento de fragmentos para o Kinesis Data Streams
Um fluxo de dados do Kinesis contabiliza o throughput em fragmentos. No Amazon Kinesis Data Streams, você pode escolher entre os modos sob demanda e provisionado para os fluxos de dados.
Recomendamos usar o modo sob demanda para seu fluxo de dados do Kinesis se sua workload de gravação do DynamoDB for altamente variável e imprevisível. No modo sob demanda, nenhum planejamento de capacidade é necessário, já que o Kinesis Data Streams gerencia automaticamente os fragmentos para fornecer o throughput necessário.
Para workloads previsíveis, você pode usar o modo provisionado para seu fluxo de dados do Kinesis. No modo provisionado, você precisa especificar o número de fragmentos para o fluxo de dados a fim de acomodar os registros de captura de dados de alterações do DynamoDB. Para determinar o número de fragmentos de que o fluxo de dados do Kinesis precisará para oferecer suporte à sua tabela do DynamoDB, são necessários os seguintes valores de entrada:
-
O tamanho médio do registro da tabela do DynamoDB em bytes (
average_record_size_in_bytes). -
O número máximo de operações de gravação que a tabela do DynamoDB executará por segundo. Isso inclui operações de criação, exclusão e atualização executadas pelas aplicações, bem como operações geradas automaticamente, como operações de exclusão geradas por vida útil (
write_throughput). -
O percentual de operações de atualização e substituição que você executou na tabela em comparação com operações de criação ou exclusão (
percentage_of_updates). As operações de atualização e substituição replicam as imagens antigas e novas do item modificado para o fluxo. Isso gera o dobro do tamanho do item do DynamoDB.
Você pode calcular o número de fragmentos (number_of_shards) necessários para o fluxo de dados do Kinesis usando os valores de entrada na seguinte fórmula:
number_of_shards = ceiling( max( ((write_throughput * (4+percentage_of_updates) * average_record_size_in_bytes) / 1024 / 1024), (write_throughput/1000), 1) )
Por exemplo, você tem um throughput máximo de 1.040 operações de gravação por segundo (write_throughput) com um tamanho médio de registro de 800 bytes (average_record_size_in_bytes). Se 25% dessas operações de gravação forem operações de atualização (percentage_of_updates), serão necessários dois fragmentos (number_of_shards) para acomodar o throughput de streaming do DynamoDB:
ceiling( max( ((1040 * (4+25/100) * 800)/ 1024 / 1024), (1040/1000), 1) ).
Considere o seguinte antes de usar a fórmula para calcular o número de fragmentos necessários com o modo provisionado para fluxos de dados do Kinesis:
-
Essa fórmula ajuda a estimar o número de fragmentos que serão necessários para acomodar seus registros de dados de alterações do DynamoDB. Ela não representa o número total de fragmentos necessários no fluxo de dados do Kinesis, como o número de fragmentos necessários para oferecer suporte aos consumidores adicionais de fluxos de dados do Kinesis.
-
Talvez ainda ocorram exceções de throughput de leitura e gravação no modo provisionado se você não configurar o fluxo de dados para lidar com o throughput máximo. Nesse caso, será preciso escalar manualmente o fluxo para acomodar o tráfego de dados.
-
Essa fórmula leva em consideração o inchaço adicional gerado pelo DynamoDB antes de fazer streaming dos registros de dados dos logs de alterações para o fluxo de dados do Kinesis.
Para saber mais sobre os modos de capacidade no Kinesis Data Streams, consulte Choosing the Data Stream Capacity Mode. Para saber mais sobre a diferença de preços entre os diferentes modos de capacidade, consulte Preços do Amazon Kinesis Data Streams
Monitorar a captura de dados de alterações com o Kinesis Data Streams
O DynamoDB fornece várias métricas do Amazon CloudWatch que ajudam a monitorar a replicação da captura de dados de alterações para o Kinesis. Para obter uma lista completa de métricas do CloudWatch, consulte Métricas e dimensões do DynamoDB.
Para determinar se o fluxo tem capacidade suficiente, recomendamos monitorar os seguintes itens durante a ativação do fluxo e na produção:
-
ThrottledPutRecordCount: o número de registros aos quais o fluxo de dados do Kinesis aplicou controle de utilização devido à capacidade insuficiente do fluxo de dados do Kinesis. OThrottledPutRecordCountdeve permanecer o mais baixo possível, embora você possa sentir algum controle de utilização durante picos excepcionais de uso. O DynamoDB tenta novamente enviar os registros limitados ao fluxo de dados do Kinesis, mas isso pode resultar em maior latência de replicação.Se você perceber controle de utilização excessivo e regular, talvez seja necessário aumentar o número de fragmentos de fluxos do Kinesis proporcionalmente ao throughput de gravação observada da tabela. Para saber mais sobre a determinação do tamanho de um fluxo de dados do Kinesis, consulte Como determinar o tamanho inicial de um fluxo de dados do Kinesis.
-
AgeOfOldestUnreplicatedRecord: o tempo decorrido desde a que alteração de nível de item mais antiga ainda a ser replicada para o fluxo de dados do Kinesis surgiu na tabela do DynamoDB. Em condições normais de operação,AgeOfOldestUnreplicatedRecorddeve estar na ordem dos milissegundos. Esse número aumenta de acordo com as tentativas de replicação malsucedidas quando elas são causadas por opções de configuração controladas pelo cliente.Se a métrica
AgeOfOldestUnreplicatedRecordexceder 168 horas, a replicação das alterações no nível do item da tabela do DynamoDB para o fluxo de dados do Kinesis será automaticamente desabilitada.São exemplos de configurações controladas pelo cliente que levam a tentativas de replicação malsucedidas: uma capacidade de fluxo de dados do Kinesis com provisionamento insuficiente, o que leva a controle de utilização excessivo, ou uma atualização manual das políticas de acesso do fluxo de dados do Kinesis que impede que o DynamoDB adicione dados ao fluxo de dados. Para manter essa métrica o mais baixa possível, talvez seja necessário verificar o provisionamento adequado da capacidade do fluxo de dados do Kinesis e verificar se as permissões do DynamoDB permanecem inalteradas.
-
FailedToReplicateRecordCount: número de registros que o DynamoDB não conseguiu replicar para o fluxo de dados do Kinesis. O DynamoDB não pode replicar registros de dados de alteração que sejam maiores que o tamanho máximo de registro do fluxo de dados do Kinesis. O tamanho máximo de registro é de 1 MB por padrão e pode ser aumentado para até 10 MB. Consulte mais informações em Cotas e limites no Guia do desenvolvedor do Amazon Kinesis Data Streams.Os registros de dados de alteração podem ser maiores que os itens que descrevem. As operações de atualização replicam a imagem anterior e a nova imagem do item, o que aproximadamente dobra o tamanho do registro. Valores booleanos e de atributos vazios são armazenados como 1 byte no DynamoDB, mas podem ocupar até 5 bytes quando serializados usando o JSON padrão para a replicação do Kinesis Data Streams. Por exemplo, alguns itens maiores que 34 KB podem se expandir e gerar registros de dados de alteração maiores que o tamanho máximo de registro padrão de 1 MB. O DynamoDB ignora os registros de dados de alteração que excedem o tamanho máximo de registro do fluxo e continua automaticamente a replicação dos registros subsequentes.
Você pode criar alarmes do Amazon CloudWatch que enviam uma mensagem do Amazon Simple Notification Service (Amazon SNS) para notificação quando qualquer uma das métricas anteriores exceder um limite específico.