Solução de problemas de produtores do Amazon Kinesis Data Streams - Amazon Kinesis Data Streams

Solução de problemas de produtores do Amazon Kinesis Data Streams

Meu aplicativo produtor está gravando a uma taxa menor que a esperada

Os motivos mais comuns para a throughput de gravação ser mais lenta do que o esperado são:

Limites de serviço excedidos

Para descobrir se os limites de serviço estão sendo excedidos, verifique se o produtor está lançando exceções de throughput a partir do serviço e valide quais operações da API estão sendo aceleradas. Lembre-se de que há limites diferentes de acordo com a chamada, consulte Cotas e limites. Por exemplo, além dos limites de nível de fragmento para gravações e leituras que são mais comumente conhecidas, há limites de nível de fluxo a seguir:

As operações CreateStream, DeleteStream, ListStreams, GetShardIterator e MergeShards são limitadas a 5 chamadas por segundo. A operação DescribeStream é limitada a 10 chamadas por segundo. A operação DescribeStreamSummary é limitada a 20 chamadas por segundo.

Se essas chamadas não forem o problema, selecione uma chave de partição que permita distribuir operações put uniformemente em todos os fragmentos e não tenha uma determinada chave de partição que esteja colidindo com os limites de serviço quando as restantes não estão. Isso requer a medição da throughput de pico e que seja levado em conta o número de fragmentos no seu fluxo. Para obter mais informações sobre o gerenciamento de streams, consulte Criar e gerenciar fluxos de dados do Kinesis.

dica

Lembre-se de arredondar para o kilobyte mais próximo nos cálculos de controle de utilização da throughput ao usar a operação de um único registro PutRecord, enquanto a operação de vários registros PutRecords é arredondada na soma cumulativa dos registros em cada chamada. Por exemplo, uma solicitação PutRecords com 600 registros com tamanho de 1,1 KB não serão aceleradas.

Quero otimizar meu produtor

Antes de começar a otimizar o produtor, conclua as seguintes tarefas importantes. Primeiro, identifique sua throughput de pico desejada em termos de tamanho do registro e registros por segundo. Em seguida, descarte a capacidade de fluxo conforme o fator de limitação (Limites de serviço excedidos). Se a capacidade de fluxo foi excluída, use as seguintes dicas de solução de problemas e diretrizes de otimização para os dois tipos comuns de aplicações de produção.

Produtor grande

Um grande produtor normalmente é executado em um servidor on-premises ou em uma instância do Amazon EC2. Os clientes que precisam de uma throughput mais alta de um grande produtor normalmente se preocupam com a latência por registro. As estratégias para lidar com a latência incluem o seguinte: se o cliente puder criar microlotes ou armazenar registros em buffer, use a Amazon Kinesis Producer Library (que tem lógica de agregação avançada), a operação de vários registros PutRecords ou agregue registros em um arquivo maior antes de usar a operação de um só registro PutRecord. Se não for possível criar microlotes ou armazenar registros em buffer, use vários threads para gravar no serviço Kinesis Data Streams ao mesmo tempo. O AWS SDK para Java e outros SDKs incluem clientes assíncronos que podem fazer isso com muito pouco código.

Produtor pequeno

Um pequeno produtor geralmente é um aplicativo móvel, dispositivo IoT ou cliente web. No caso de aplicativos móveis, recomendamos usar a operação PutRecords ou o Kinesis Recorder nos AWS Mobile SDKs. Para obter mais informações, consulte os guias de conceitos básicos do AWS Mobile SDK for Android e do AWS Mobile SDK for iOS. Aplicativos móveis devem lidar com conexões intermitentes inerentemente e precisam de algum tipo de alocação em lote, como PutRecords. Se não for possível alocar em lote por algum motivo, consulte as informações sobre Grande produtor acima. Se o seu produtor é um navegador, a quantidade de dados que está sendo gerada geralmente é muito pequena. No entanto, as operações put estão sendo colocadas no caminho crítico do aplicativo, o que não é recomendável.

Uso indevido das operações flushSync()

O uso incorreto do flushSync() pode afetar significativamente o desempenho de gravação. A operação do flushSync() foi projetada para cenários de desligamento, a fim de garantir que todos os registros armazenados em buffer sejam enviados antes que a aplicação KPL seja encerrada. Se você implementou essa operação após cada operação de gravação, ela pode adicionar uma latência extra substancial de cerca de 500 ms por gravação. Assegure que flushSync() tenha sido implementado somente para o desligamento da aplicação para evitar atrasos extras desnecessários no desempenho de gravação.

Eu recebo um erro de permissão de chave mestra do KMS não autorizada

Esse erro ocorre quando um aplicativo produtor grava em um fluxo criptografado sem permissões na chave mestra do KMS. Para atribuir permissões a uma aplicação para que acesse uma chave do KMS, consulte Using Key Policies in AWS KMS e Using IAM Policies with AWS KMS.

Solucionar outros problemas comuns para produtores