Melhore o processamento de baixa latência - 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á.

Melhore o processamento de baixa latência

O atraso de propagação é definido como a end-to-end latência do momento em que um registro é gravado no stream até ser lido por um aplicativo consumidor. Esse atraso varia dependendo de uma série de fatores, mas é afetado principalmente pelo intervalo de sondagem de aplicativos de consumidor.

Para a maioria dos aplicativos, recomendamos a sondagem de cada estilhaço uma vez por segundo por aplicativo. Isso permite que você tenha várias aplicações de consumo processando um fluxo simultaneamente sem atingir os limites do Amazon Kinesis Data Streams de cinco chamadas de GetRecords por segundo. Além disso, o processamento de lotes de dados maiores tende a ser mais eficiente na redução da latência de rede e outras latências de downstream no seu aplicativo.

Os KCL padrões são definidos para seguir as melhores práticas de pesquisa a cada 1 segundo. Esse padrão gera atrasos de propagação médios que costumam ser menores que 1 segundo.

Os registros do Kinesis Data Streams ficam disponíveis para serem lidos imediatamente após serem gravados. Há alguns casos de uso que precisam aproveitar isso e exigir o consumo de dados do stream assim que ele estiver disponível. Você pode reduzir significativamente o atraso de propagação substituindo as configurações KCL padrão para pesquisar com mais frequência, conforme mostrado nos exemplos a seguir.

Código de configuração Java da KCL:

kinesisClientLibConfiguration = new KinesisClientLibConfiguration(applicationName, streamName, credentialsProvider, workerId).withInitialPositionInStream(initialPositionInStream).withIdleTimeBetweenReadsInMillis(250);

Configuração do arquivo de propriedades para Python e Ruby: KCL

idleTimeBetweenReadsInMillis = 250
nota

Como o Kinesis Data Streams tem um limite de cinco chamadas de GetRecords por segundo por fragmento, configurar a propriedade idleTimeBetweenReadsInMillis abaixo de 200 ms pode fazer com que a aplicação receba a exceção ProvisionedThroughputExceededException. Muitas dessas exceções podem gerar recuos exponenciais significativos e, portanto, causar latências inesperadas significativas no processamento. Se você definir essa propriedade em 200 ms ou acima e tiver mais de um aplicativo de processamento, ocorrerá limitação semelhante.