Paralelização dos streams de entrada para aumentar a taxa de transferência - Guia do desenvolvedor do Amazon Kinesis Data Analytics SQL para aplicativos

Após uma análise cuidadosa, decidimos descontinuar o Amazon Kinesis Data Analytics SQL para aplicativos em duas etapas:

1. A partir de 15 de outubro de 2025, você não poderá criar um novo Kinesis Data Analytics SQL para aplicativos.

2. Excluiremos seus aplicativos a partir de 27 de janeiro de 2026. Você não poderá iniciar ou operar seu Amazon Kinesis Data Analytics SQL para aplicativos. O suporte não estará mais disponível para o Amazon Kinesis Data Analytics SQL a partir desse momento. Para obter mais informações, consulte Descontinuação do Amazon Kinesis Data Analytics SQL para aplicativos.

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á.

Paralelização dos streams de entrada para aumentar a taxa de transferência

nota

Depois de 12 de setembro de 2023, você não poderá criar novos aplicativos usando o Kinesis Data Firehose como fonte se ainda não estiver usando o Kinesis Data Analytics for SQL. Para obter mais informações, consulte Limites.

Os aplicativos do Amazon Kinesis Data Analytics podem oferecer suporte a vários streams de entrada no aplicativo para escalar um aplicativo além do throughput de um único stream de entrada no aplicativo. Para obter mais informações sobre streams de entrada no aplicativo, consulte Amazon Kinesis Data Analytics para aplicativos SQL: como funciona.

Em quase todos os casos, o Amazon Kinesis Data Analytics escala seu aplicativo para lidar com a capacidade dos streams do Kinesis ou dos streams de origem do Firehose que alimentam seu aplicativo. No entanto, se a taxa de transferência do stream de origem exceder a taxa de transferência de um único stream de entrada no aplicativo, aumente explicitamente o número de streams de entrada no aplicativo usado pelo aplicativo. Isso é feito com o parâmetro InputParallelism.

Quando o parâmetro InputParallelism for maior que um, o Amazon Kinesis Data Analytics divide uniformemente as partições do stream de origem entre os streams no aplicativo. Por exemplo, se o fluxo de origem tiver 50 estilhaços e você definiu InputParallelism para 2, cada fluxo de entrada no aplicativo receberá a entrada de 25 estilhaços do fluxo de origem.

Quando você aumentar o número de streams no aplicativo, este deverá acessar os dados em cada stream explicitamente. Para obter informações sobre como acessar vários fluxos no aplicativo no seu código, consulte Acesso a streams no aplicativo separados no aplicativo do Amazon Kinesis Data Analytics.

Embora os fragmentos de stream do Kinesis Data Streams e do Firehose estejam divididos entre os streams no aplicativo da mesma forma, eles diferem na forma como aparecem no seu aplicativo:

  • Os registros de um fluxo de dados do Kinesis incluem um campo shard_id que pode ser usado para identificar o fragmento de origem do registro.

  • Os registros de um stream de entrega do Firehose não incluem um campo que identifique o fragmento ou a partição de origem do registro. Isso ocorre porque o Firehose abstrai essas informações do seu aplicativo.

Avaliações para saber se o número de streams de entrada no aplicativo deve ser aumentado

Na maioria dos casos, um único stream de entrada no aplicativo pode lidar com a taxa de transferência de um único stream de origem, de acordo com a complexidade e o volume de dados dos streams de entrada. Para determinar se você precisa aumentar o número de fluxos de entrada no aplicativo, você pode monitorar as MillisBehindLatest métricas InputBytes e na Amazon. CloudWatch

Se a métrica InputBytes for maior que 100 MB/s (ou se você antecipar que ela será maior que essa taxa), isso poderá causar um aumento em MillisBehindLatest e ampliar o impacto de problemas do aplicativo. Para resolver essa situação, recomendamos que sejam feitas as seguintes escolhas de linguagem para o aplicativo:

  • Use vários fluxos e aplicativos Kinesis Data Analytics para SQL se o aplicativo tiver necessidades de escalar além de 100 MB/segundo.

  • Use Kinesis Data Analytics para aplicativos Java se quiser usar um único fluxo e aplicativo.

Se a métrica MillisBehindLatest tiver uma das seguintes características, aumente a configuração InputParallelism do seu aplicativo:

  • A métrica MillisBehindLatest aumentar gradualmente, indicando que o aplicativo está atrasado em relação aos dados mais recentes no stream.

  • A métrica MillisBehindLatest estiver consistentemente acima de 1.000 (um segundo).

Não será preciso aumentar a configuração InputParallelism do aplicativo se:

  • A métrica MillisBehindLatest diminuir gradualmente, indicando que o aplicativo está alcançando os dados mais recentes no stream.

  • A métrica MillisBehindLatest estiver abaixo de 1.000 (um segundo).

Para obter mais informações sobre o uso CloudWatch, consulte o Guia CloudWatch do usuário.

Implementação de vários streams de entrada no aplicativo

Defina o número de streams de entrada no aplicativo quando um aplicativo for criado usando CreateApplication. Defina esse número após criar um aplicativo usando UpdateApplication.

nota

Você só pode definir a configuração InputParallelism usando a API do Amazon Kinesis Data Analytics ou o. AWS CLIVocê não pode definir essa configuração usando AWS Management Consoleo. Para obter informações sobre como configurar o AWS CLI, consulteEtapa 2: Configurar o AWS Command Line Interface (AWS CLI).

Configuração da contagem do stream de entrada de um aplicativo novo

O exemplo a seguir demonstra como usar a ação da API CreateApplication para definir a contagem do stream de entrada de um aplicativo novo para 2.

Para obter mais informações sobre o CreateApplication, consulte CreateApplication.

{ "ApplicationCode": "<The SQL code the new application will run on the input stream>", "ApplicationDescription": "<A friendly description for the new application>", "ApplicationName": "<The name for the new application>", "Inputs": [ { "InputId": "ID for the new input stream", "InputParallelism": { "Count": 2 }], "Outputs": [ ... ], }] }

Configuração da contagem do stream de entrada de um aplicativo existente

O exemplo a seguir demonstra como usar a ação da API UpdateApplication para definir a contagem do stream de entrada de um aplicativo existente para 2.

Para obter mais informações sobre o Update_Application, consulte UpdateApplication.

{ "InputUpdates": [ { "InputId": "yourInputId", "InputParallelismUpdate": { "CountUpdate": 2 } } ], }

Acesso a streams no aplicativo separados no aplicativo do Amazon Kinesis Data Analytics

Para usar vários streams de entrada no aplicativo em seu aplicativo, selecione explicitamente entre streams diferentes. O exemplo de código a seguir demonstra como consultar vários streams de entrada no aplicativo criado no tutorial de Conceitos básicos.

No exemplo a seguir, cada fluxo de origem é agregado usando COUNT antes de serem combinados em um único fluxo no aplicativo chamado in_application_stream001. Agregar streams de origem de antemão ajuda a garantir que o stream no aplicativo combinado lide com o tráfego de vários streams sem ficar sobrecarregado.

nota

Para executar esse exemplo e obter resultados de ambos os fluxos de entrada no aplicativo, atualize o número de estilhaços do fluxo de origem e o parâmetro InputParallelism do aplicativo.

CREATE OR REPLACE STREAM in_application_stream_001 ( ticker VARCHAR(64), ticker_count INTEGER ); CREATE OR REPLACE PUMP pump001 AS INSERT INTO in_application_stream_001 SELECT STREAM ticker_symbol, COUNT(ticker_symbol) FROM source_sql_stream_001 GROUP BY STEP(source_sql_stream_001.rowtime BY INTERVAL '60' SECOND), ticker_symbol; CREATE OR REPLACE PUMP pump002 AS INSERT INTO in_application_stream_001 SELECT STREAM ticker_symbol, COUNT(ticker_symbol) FROM source_sql_stream_002 GROUP BY STEP(source_sql_stream_002.rowtime BY INTERVAL '60' SECOND), ticker_symbol;

O exemplo de código anterior produz saída em in_application_stream001 semelhante a:

Table showing ROWTIME, TICKER, and TICKER_COUNT columns with sample data entries.

Considerações adicionais

Ao usar vários streams de entrada, esteja ciente do seguinte:

  • O número máximo de streams de entrada no aplicativo é 64.

  • Os streams de entrada no aplicativo são distribuídos uniformemente entre os estilhaços do stream de entrada do aplicativo.

  • Os ganhos de desempenho da adição de streams no aplicativo não escalam de forma linear. Ou seja, dobrar o número de streams no aplicativo não dobra a taxa de transferência. Com um tamanho de linha típico, cada stream no aplicativo pode alcançar a taxa de transferência de aproximadamente 5.000 a 15.000 linhas por segundo. Ao aumentar a contagem de streams no aplicativo para 10, é possível alcançar uma taxa de transferência de 20.000 a 30.000 linhas por segundo. A velocidade da taxa de transferência depende da contagem, tipos de dados e volume de dados de campos no fluxo de entrada.

  • Algumas funções de agregação (como AVG) podem produzir resultados inesperados quando aplicadas a fluxos de entrada particionados em diferentes estilhaços. Como é necessário executar a operação agregada em estilhaços individuais combinando-os em um stream agregado, os resultados podem ser ponderados em relação ao stream que contiver mais registros.

  • Se o aplicativo continua a apresentar performance insatisfatória (indicado por uma métrica MillisBehindLatest elevada) depois que você aumentou o número de streams de entrada, você pode ter atingido o limite de unidades de processamento do Kinesis (KPUs). Para ter mais informações, consulte Escalabilidade automática de aplicativos para aumentar a taxa de transferência.