P: O que é o Amazon Kinesis Data Streams?

O Amazon Kinesis Data Streams permite criar aplicativos personalizados que processam ou analisam dados de streaming para necessidades específicas. É possível adicionar continuamente vários tipos de dados como rastros de cliques, registros de aplicativos e mídia social a um stream de dados do Amazon Kinesis de centenas de milhares de origens. Em segundos, os dados estarão disponíveis para seus aplicativos do Amazon Kinesis para leitura e processamento por meio do stream.

P: O que o Amazon Kinesis Data Streams pode gerenciar por mim?

O Amazon Kinesis Data Streams gerencia a infraestrutura, as redes, a configuração e o armazenamento necessários para transmitir seus dados no nível do seu throughput de dados. Você não precisa se preocupar com provisionamento, implantação, manutenção constante de hardware, software ou outros serviços dos seus streams de dados. Além disso, o Amazon Kinesis Data Streams replica sincronamente os dados entre três zonas de disponibilidade, proporcionando maior disponibilidade e resiliência de dados.

P: O que posso fazer com o Amazon Kinesis Data Streams?

O Amazon Kinesis Data Streams é útil para transferir rapidamente os dados dos produtores de dados e processá-los continuamente, seja migrando-os antes da emissão para um datastore, executando métricas e análises em tempo real ou derivando streams de dados mais complexos para processamento adicional. Veja a seguir cenários típicos de uso do Amazon Kinesis Data Streams:

  • Consumo acelerado de logs e feeds de dados: em vez de esperar reunir dados em lotes, você pode fazer com que os produtores de dados enviem dados para um stream de dados do Amazon Kinesis assim que são produzidos, evitando a perda de dados em caso de falhas do produtor. Por exemplo, logs do sistema e do aplicativo podem ser adicionados continuamente a um stream de dados do Amazon Kinesis e disponibilizados para processamento em segundos. 
  • Métricas e geração de relatórios em tempo real: é possível extrair métricas e gerar relatórios a partir de dados do stream de dados do Amazon Kinesis em tempo real. Por exemplo, seu aplicativo do Amazon Kinesis pode trabalhar com métricas e geração de relatórios para registros do sistema e do aplicativo assim que o streaming de dados chega, em vez de esperar receber lotes de dados.
  • Análise de dados em tempo real: com o Amazon Kinesis Data Streams, você pode executar análises de dados de streaming em tempo real. Por exemplo, você pode adicionar rastros de cliques a um stream de dados do Amazon Kinesis e fazer com que seu aplicativo do Amazon Kinesis execute análises em tempo real, permitindo obter informações sobre seus dados em uma escala de minutos, em vez de horas ou dias.
  • Processamento de streams complexos: você pode criar gráficos acíclicos dirigidos (DAGs) de aplicativos do Amazon Kinesis e de streams de dados. Nesse cenário, um ou mais aplicativos do Amazon Kinesis podem adicionar dados a outro stream de dados do Amazon Kinesis para processamento adicional, possibilitando estágios sucessivos de processamento de streams.

P: Como posso utilizar o Amazon Kinesis Data Streams?

Depois de cadastrar-se na Amazon Web Services, você pode começar a usar o Amazon Kinesis Data Streams:

P: Quais são os limites do Amazon Kinesis Data Streams?

O throughput de um stream de dados do Amazon Kinesis é projetado para escalar sem limites por meio do aumento do número de estilhaços em um stream de dados. No entanto, há certos limites que você deve lembrar ao usar o Amazon Kinesis Data Streams:

  • Como padrão, os registros de um stream podem ser acessados por até 24 horas a partir do momento em que são adicionados ao stream. Você pode aumentar esse limite para até 7 dias habilitando a retenção de dados prolongada.
  • O tamanho máximo de um blob de dados (a carga útil de dados antes da codificação Base64) dentro de um registro é de 1 megabyte (MB).
  • Cada fragmento pode comportar até 1.000 registros PUT por segundo.

Para obter mais informações sobre outros limites de nível de API, consulte Limites do Amazon Kinesis Data Streams.

P: Como o Amazon Kinesis Data Streams se diferencia do Amazon SQS?

Os streams de dados do Amazon Kinesis permitem processamento de streaming de big data em tempo real. Ele oferece classificação de registros, bem como a capacidade de ler e/ou reproduzir registros na mesma ordem para vários aplicativos do Amazon Kinesis. A biblioteca de cliente do Amazon Kinesis (KCL) fornece todos os registros de uma determinada chave de partição para o mesmo processador de registros, facilitando a criação de vários aplicativos de leitura do mesmo stream de dados do Amazon Kinesis (por exemplo, para contar, agregar ou filtrar).

O Amazon Simple Queue Service (Amazon SQS) oferece uma fila hospedada confiável e altamente escalonável para armazenar mensagens enquanto viajam entre computadores. O Amazon SQS permite mover dados facilmente entre componentes de aplicativo distribuídos e ajuda a criar aplicativos nos quais as mensagens são processadas de forma independente (com semântica de confirmação/falha no nível da mensagem), como fluxos de trabalho automatizados.

P: Quando devo usar o Amazon Kinesis Data Streams, e quando devo usar o Amazon SQS?

Recomendamos o Amazon Kinesis Data Streams para casos de uso com requisitos semelhantes a:

  • Roteamento de registros relacionados para o mesmo processador de registros (como no streaming do MapReduce). Por exemplo, contagem e agregação são mais simples quando todos os registros para uma determinada chave são encaminhados para o mesmo processador de registro.
  • Classificação de registros. Por exemplo, você quer transferir dados de registro do host do aplicativo para o host de processamento/arquivamento enquanto mantém a ordem das declarações de registro.
  • Capacidade de vários aplicativos consumirem o mesmo stream simultaneamente. Por exemplo, você tem um aplicativo que atualiza um painel em tempo real e outro que arquiva dados no Amazon Redshift. Você quer que os dois aplicativos consumam dados do mesmo stream de forma simultânea e independente.
  • Capacidade de consumir registros na mesma ordem algumas horas depois. Por exemplo, você tem um aplicativo de faturamento e um aplicativo de auditoria que é executado algumas horas depois do aplicativo de faturamento. Como o Amazon Kinesis Data Streams armazena dados por até 7 dias, você pode executar o aplicativo de auditoria até 7 dias depois do aplicativo de faturamento.

Recomendamos o Amazon SQS para casos de uso com requisitos semelhantes a:

  • Semântica de sistema de mensagens (como confirmação/falha em nível de mensagem) e tempo de espera de visibilidade. Por exemplo, você tem uma fila de itens de trabalho e quer monitorar a conclusão com sucesso de cada item independentemente. O Amazon SQS monitora a confirmação/falha, para que o aplicativo não precise manter um ponto de verificação/cursor persistente. O Amazon SQS excluirá as mensagens de confirmação e enviará novamente mensagens de falha depois de um tempo de espera de visibilidade configurado.
  • Atraso de mensagem individual. Por exemplo, você tem uma fila de trabalhos e precisa programar trabalhos individuais com um atraso. Com o Amazon SQS, você pode configurar mensagens individuais para atrasarem até 15 minutos.
  • Aumento dinâmico da simultaneidade/taxa de transferência em tempo de leitura. Por exemplo, você tem uma fila de trabalho e quer adicionar mais leitoras até que o backlog seja eliminado. Com o Amazon Kinesis Data Streams, você pode escalar até um número suficiente de estilhaços (observe, no entanto, que você precisará provisionar estilhaços suficientes com antecedência).
  • Aproveitamento da capacidade do Amazon SQS de escalar de forma transparente. Por exemplo, seu buffer solicita e a carga muda como resultado de picos de carga ocasionais ou do crescimento natural dos seus negócios. Como cada solicitação armazenada em buffer pode ser processada independentemente, o Amazon SQS pode escalar de forma transparente para tratar a carga sem fornecer instruções de você.


P: O que é um estilhaço?

O estilhaço é a unidade básica de throughput de um stream de dados do Amazon Kinesis. Um fragmento fornece uma capacidade de 1 MB/s de entrada de dados e 2 MB/s de saída de dados. Um fragmento pode suportar até 1.000 registros PUT por segundo. Você especificará o número de estilhaços necessários ao criar um stream de dados. Por exemplo, você pode criar um stream de dados com dois estilhaços. Esse stream de dados tem um throughput de 2 MB/s de entrada de dados e de 4 MB/s de saída de dados, e permite até 2.000 registros de PUT por segundo. Você pode monitorar métricas em nível de estilhaço no Amazon Kinesis Data Streams, além de adicionar ou remover estilhaços do seu stream de dados de modo dinâmico, conforme as alterações no throughput de dados ao refragmentar o stream de dados.

P: O que é um registro?

Um registro é a unidade de dados armazenada em um stream de dados do Amazon Kinesis. Um registro é composto por um número de sequência, uma chave de partição e um blob de dados. O blob de dados consiste nos dados de interesse que o seu produtor de dados adiciona a um stream de dados. O tamanho máximo de um blob de dados (a carga útil de dados antes da codificação Base64) é de 1 megabyte (MB).

P: O que é uma chave de partição?

A chave de partição é usada para segregar e rotear registros para diferentes estilhaços de um stream de dados. Uma chave de partição é especificada por seu produtor de dados ao adicionar dados a um stream de dados do Amazon Kinesis. Por exemplo, supondo que você tenha um stream de dados com dois estilhaços (estilhaço 1 e estilhaço 2). Você pode configurar seu produtor de dados para usar duas chaves de partição (chave A e chave B) para que todos os registros com chave A sejam colocados no fragmento 1 e todos os registros com chave B sejam colocados no fragmento 2.

P: O que é um número de sequência?

Um número de sequência é um identificador exclusivo para cada registro. O número de sequência é atribuído pelo Amazon Kinesis quando um produtor de dados chama as operações PutRecord ou PutRecords para adicionar dados a um stream de dados do Amazon Kinesis. Os números de sequência para a mesma chave de partição geralmente aumentam ao longo do tempo. Quanto maior o período entre as solicitações PutRecord ou PutRecords, maiores serão os números de sequência.


P: Como eu crio um stream de dados do Amazon Kinesis?

Depois de cadastrar-se na Amazon Web Services, você pode criar um stream de dados do Amazon Kinesis por meio do Amazon Kinesis Management Console ou da operação CreateStream.

P: Como eu decido a throughput do meu stream de dados do Amazon Kinesis?

O throughput de um stream de dados do Amazon Kinesis é determinado pelo número de estilhaços dentro do stream de dados. Siga as etapas abaixo para estimar o número inicial de estilhaços que o seu stream de dados precisa. Você pode ajustar dinamicamente o número de estilhaços no seu stream de dados por meio da refragmentação.

  1. Estime o tamanho médio do registro gravado no stream de dados em kilobytes (KB), arredondando para o KB inteiro mais próximo. (average_data_size_in_KB)
  2. Estime o número de registros gravados no stream de dados por segundo. (number_of_records_per_second)
  3. Decida o número de aplicativos do Amazon Kinesis consumindo dados simultaneamente e independentemente do stream de dados. (number_of_consumers)
  4. Calcule a largura de banda de gravação de entrada em KB (incoming_write_bandwidth_in_KB), que é igual ao average_data_size_in_KB multiplicado pelo number_of_transactions_per_seconds.
  5. Calcule a largura de banda de leitura de saída em KB (outgoing_read_bandwidth_in_KB), que é igual à incoming_write_bandwidth_in_KB multiplicada pelo number_of_consumers.

Você pode então calcular o número inicial de estilhaços (number_of_shards) necessários para o seu stream de dados usando a fórmula:

number_of_shards = max (incoming_write_bandwidth_in_KB/1000, outgoing_read_bandwidth_in_KB/2000)

P: Qual é o throughput mínimo que posso solicitar para meu stream de dados do Amazon Kinesis?

O throughput de um stream de dados do Amazon Kinesis escala por unidade de estilhaço. Um estilhaço é o menor throughput de um stream de dados, que oferece entrada de dados de 1 MB/s e saída de dados de 2 MB/s.

P: Qual é o throughput máximo que posso solicitar para meu stream de dados do Amazon Kinesis?

O throughput de um stream de dados do Amazon Kinesis é projetado para escalar sem limites. Por padrão, cada conta pode provisionar 10 estilhaços por região. Você pode usar o formulário Limites do Amazon Kinesis Data Streams para solicitar mais de 10 estilhaços dentro de uma única região.

P: Como o tamanho do registro pode afetar o throughput do meu stream de dados do Amazon Kinesis?

Um fragmento fornece uma taxa de entrada de dados de 1 MB/s e suporta até 1.000 registros PUT por segundo. Portanto, se o tamanho do registro for inferior a 1 KB, a taxa real de entrada de dados de um fragmento será inferior a 1 MB/s, limitada pelo número máximo de registros PUT por segundo.


P: Como adiciono dados ao meu stream de dados do Amazon Kinesis?

Você pode adicionar dados a um stream de dados do Amazon Kinesis por meio de operações PutRecord e PutRecords, ou da Amazon Kinesis Producer Library (KPL) ou do Amazon Kinesis Agent.

P: Qual é a diferença entre PutRecord e PutRecords?

Uma operação PutRecord permite um único registro de dados em uma chamada de API, e uma operação PutRecords permite vários registros de dados em uma chamada de API. Para obter informações sobre as operações PutRecord e PutRecords, consulte PutRecord e PutRecords.

P: O que é a Amazon Kinesis Producer Library (KPL)?

A Amazon Kinesis Producer Library (KPL) é uma biblioteca fácil de usar e altamente configurável que o ajuda a colocar stream de dados em um stream de dados do Amazon Kinesis. A KPL apresenta uma interface simples, assíncrona e confiável que lhe permite alcançar rapidamente uma alta taxa de transferência para o produtor com um mínimo de recursos de clientes.

P: Que linguagens de programação ou plataformas posso usar para acessar a API do Amazon Kinesis?

A API do Amazon Kinesis está disponível em Amazon Web Services SDKs. Para ver uma lista das linguagens de programação ou plataformas para os Amazon Web Services SDKs, consulte Ferramentas para a Amazon Web Services.

P: Em qual linguagem de programação a Amazon Kinesis Producer Library (KPL) está disponível?

O núcleo da Amazon Kinesis Producer Library (KPL) é construído com o módulo C++ e pode ser compilado para funcionar em qualquer plataforma com um compilador C++ recente. A biblioteca atualmente está disponível em uma interface Java. Estamos buscando adicionar suporte para outras linguagens de programação.

P: O que é o Amazon Kinesis Agent?

O Amazon Kinesis Agent é um aplicativo Java pré-definido que oferece uma maneira fácil de coletar e enviar dados para o stream de dados do Amazon Kinesis. Você pode instalar o agente em ambientes de servidor baseados no Linux, como servidores web, servidores de log e servidores de banco de dados. O agente monitora determinados arquivos e envia continuamente dados para o stream de dados. Para obter mais informações, consulte Como escrever com agentes.

P: Quais plataformas são compatíveis com o Amazon Kinesis Agent?

No momento, o Amazon Kinesis Agent é compatível com Amazon Linux ou Red Hat Enterprise Linux.

P: Onde posso obter o Amazon Kinesis Agent?

Você pode fazer o download e a instalação do Amazon Kinesis Agent usando o comando e o link a seguir:

No Amazon Linux: sudo yum install –y aws-kinesis-agent

No Red Hat Enterprise Linux: sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm

Do GitHub: awlabs/amazon-kinesis-agent

P: Como posso utilizar o Amazon Kinesis Agent?

Após a instalação do Amazon Kinesis Agent nos seus servidores, você pode configurá-lo para monitorar determinados arquivos no disco e, então, enviar continuamente novos dados para o stream de dados do Amazon Kinesis. Para obter mais informações, consulte Como escrever com agentes.

P: O que acontece se os limites de capacidade de um stream de dados do Amazon Kinesis forem excedidos enquanto o produtor de dados adiciona dados ao stream de dados?

Os limites de capacidade de um stream de dados do Amazon Kinesis são definidos pelo número de estilhaços dentro do stream de dados. Os limites podem ser excedidos por taxa de transferência de dados ou número de registros PUT. Enquanto os limites de capacidade forem excedidos, os dados de PUT serão rejeitados com uma exceção ProvisionedThroughputExceeded. Se isso for devido a um aumento temporário na taxa de dados de entrada do stream de dados, uma nova tentativa do produtor de dados poderá levar ao atendimento das solicitações. Se isso for devido a um aumento constante na taxa de dados de entrada do stream de dados, você deve aumentar o número de estilhaços dentro do stream de dados para fornecer capacidade suficiente para que as chamadas de PUT de dados sejam sempre bem-sucedidas. Nos dois casos, as métricas do Amazon CloudWatch permitem que você saiba da mudança na taxa de dados de entrada do stream de dados e da ocorrência de exceções ProvisionedThroughputExceeded.

P: Que dados são considerados para o throughput de dados de um stream de dados do Amazon Kinesis durante uma chamada de PutRecord ou PutRecords?

O blob de dados, a chave de partição e o nome de stream de dados são parâmetros obrigatórios de uma chamada de PutRecord ou PutRecords. O tamanho do seu blob de dados (antes da codificação Base64) e da chave de partição serão considerados no throughput de dados do seu stream de dados do Amazon Kinesis, que é determinado pelo número de estilhaços no stream de dados.


P: O que é um aplicativo do Amazon Kinesis?

Um aplicativo do Amazon Kinesis é um consumidor de dados que lê e processa dados de um stream de dados do Amazon Kinesis. Você pode criar seus aplicativos do usando a API do Amazon Kinesis ou a biblioteca de cliente do Amazon Kinesis (KCL).

P: O que é a biblioteca de cliente do Amazon Kinesis (KCL)?

A biblioteca de cliente do Amazon Kinesis (KCL) para Java | Python | Ruby | Node.js | .NET é uma biblioteca predefinida que ajuda a criar facilmente aplicativos do Amazon Kinesis para leitura e processamento de dados em um stream de dados do Amazon Kinesis. A KCL trata problemas complexos, como a adaptação a mudanças no volume do stream de dados, load balancing de dados de streaming, coordenação de serviços distribuídos e processamento de dados com tolerância a falhas. A KCL permite que você se concentre na lógica de negócios durante a criação de aplicativos.

P: O que é a Biblioteca do Amazon Kinesis Connector?

A Biblioteca do Amazon Kinesis Connector é uma biblioteca predefinida que ajuda a integrar facilmente o Amazon Kinesis Data Streams com outros Serviços da AWS e ferramentas de terceiros. A biblioteca de cliente do Amazon Kinesis (KCL) para Java | Python | Ruby | Node.js | .NET é necessária para usar a biblioteca do Amazon Kinesis Connector. A versão atual dessa biblioteca oferece conectores para Amazon DynamoDB, Amazon Redshift, Amazon S3 e Elasticsearch. A biblioteca também inclui conectores de amostra de cada tipo, além de arquivos de criação do Apache Ant para executar as amostras.

P: O que é o Amazon Kinesis Storm Spout?

A Amazon Kinesis Storm Spout é uma biblioteca predefinida que ajuda a integrar facilmente o Amazon Kinesis Data Streams ao Apache Storm. A versão atual da Amazon Kinesis Storm Spout extrai dados do stream de dados do Amazon Kinesis e os emite como tuplas. Você adicionará o Spout à sua topologia do Storm para se beneficiar do Amazon Kinesis Data Streams como um serviço confiável e escalável de extração, armazenamento e nova execução de streams.

P: Em que linguagem de programação a Biblioteca de cliente do Amazon Kinesis (KCL), a Biblioteca do Amazon Kinesis Connector e o Amazon Kinesis Storm Spout estão disponíveis?

A biblioteca de cliente do Amazon Kinesis (KCL) está disponível em JavaPythonRuby, Node.js e .NET.No momento, a biblioteca do Amazon Kinesis Connector e o Amazon Kinesis Storm Spout estão disponíveis em Java. Estamos tentando adicionar suporte para outras linguagens de programação.

P: Eu tenho que usar a Biblioteca de cliente do Amazon Kinesis (KCL) para meu aplicativo do Amazon Kinesis?

Não, você também pode usar a API do Amazon Kinesis para criar seu aplicativo do Amazon Kinesis. No entanto, recomendamos usar a biblioteca de cliente do Amazon Kinesis (KCL) para Java | Python | Ruby | Node.js | .NET, se aplicável, porque ela executa tarefas complexas associadas ao processamento distribuído de streams, aumentando a produtividade do desenvolvimento de aplicações.

P: Como a biblioteca de cliente do Amazon Kinesis (KCL) interage com uma aplicação do Amazon Kinesis?

A Biblioteca de cliente do Amazon Kinesis (KCL) para Java | Python | Ruby | Node.js | .NET atua como um intermediário entre o Amazon Kinesis Data Streams e seu aplicativo do Amazon Kinesis. A KCL usa a interface IRecordProcessor para se comunicar com o seu aplicativo. Seu aplicativo implementa essa interface e a KCL chama o código do seu aplicativo usando os métodos dessa interface.

Para obter mais informações sobre a criação de aplicativos com a KCL, consulte Developing Consumer Applications for Amazon Kinesis Using the Amazon Kinesis Client Library.

P: O que é um operador e um processador gerado pela Biblioteca de cliente do Amazon Kinesis (KCL)?

Um aplicativo do Amazon Kinesis pode ter várias instâncias de aplicativo e um operador é a unidade de processamento que mapeia para cada instância do aplicativo. Um processador de registro é a unidade de processamento que processa dados de um estilhaço de um stream de dados do Amazon Kinesis. Um operador mapeia para um ou mais processadores de registro. Um processador de registros mapeia para um fragmento e processa registros desse fragmento.

Na inicialização, a aplicação chama a biblioteca de cliente do Amazon Kinesis (KCL) para Java | Python | Ruby | Node.js | .NET para instanciar um operador. Essa chamada fornece à KCL as informações de configuração para o aplicativo, como nome do stream de dados e credenciais da AWS. Essa chamada também passa uma referência para uma implementação de IRecordProcessorFactory. A KCL usa essa fábrica para criar novos processadores de registros conforme necessário para processar dados do stream de dados. A KCL se comunica com esses processadores de registro usando a interface IRecordProcessor.

P: Como a biblioteca de cliente do Amazon Kinesis (KCL) monitora os registros de dados processados por um aplicativo do Amazon Kinesis?

A biblioteca de cliente do Amazon Kinesis (KCL) para Java | Python | Ruby | Node.js | .NET cria automaticamente uma tabela do Amazon DynamoDB para cada aplicação do Amazon Kinesis para rastrear e manter informações de estado como eventos de refragmentação e pontos de verificação de número de sequência. A tabela do DynamoDB compartilha o mesmo nome do aplicativo. Portanto, você deve verificar se o nome do seu aplicativo não conflita com nenhuma tabela do DynamoDB existente na mesma conta dentro da mesma região.

Presume-se que todos os operadores associados ao mesmo nome de aplicativo estejam trabalhando juntos no mesmo stream de dados do Amazon Kinesis. Se você executa uma instância adicional do mesmo código de aplicativo, mas com um nome de aplicativo diferente, a KCL trata a segunda instância como um aplicativo totalmente separado e que também opera no mesmo stream de dados.

Observe que, além dos custos associados ao Amazon Kinesis Data Streams, a sua conta será cobrada pelos custos associados à tabela do Amazon DynamoDB.

Para obter mais informações sobre como a KCL rastreia o estado do aplicativo, consulte Tracking Amazon Kinesis Application state.

P: Como posso aumentar automaticamente a escala da capacidade de processamento do meu aplicativo do Amazon Kinesis usando a Biblioteca de cliente do Amazon Kinesis (KCL)?

Você pode criar várias instâncias do seu aplicativo do Amazon Kinesis e executar essas instâncias do aplicativo em várias instâncias do Amazon EC2 que fazem parte de um grupo de Auto Scaling. Enquanto a demanda de processamento aumentar, uma instância do Amazon EC2 executando uma instância do seu aplicativo será instanciada automaticamente. A biblioteca de cliente do Amazon Kinesis (KCL) para Java | Python | Ruby | Node.js | .NET gerará um operador para essa nova instância e moverá automaticamente processadores de registros das instâncias sobrecarregadas existentes para essa nova instância.

P: Por que a chamada para GetRecords retorna um resultado vazio quando não há dados no meu stream de dados do Amazon Kinesis?

Um possível motivo é que não existe um registro na posição especificada pelo iterador de fragmentos atual. Isso pode acontecer se você está usando TRIM_HORIZON como tipo de iterador de estilhaço. Um stream de dados do Amazon Kinesis representa um stream contínuo de dados. Você deve chamar a operação GetRecords em um loop e o registro de dados será retornado quando o iterador de estilhaços avançar para a posição em que o registro de dados está armazenado.

P: O que é o valor ApproximateArrivalTimestamp retornado na operação GetRecords?

Cada registro inclui um valor chamado ApproximateArrivalTimestamp. Ele é definido quando o registro é recebido e armazenado com sucesso pelo Amazon Kinesis. Esse carimbo de data/hora tem uma precisão de milissegundos e não há garantias quanto à precisão do carimbo de data/hora. Por exemplo, os registros em um estilhaço ou em um stream de dados podem ter carimbos de data/hora inativos.

P: O que ocorre se os limites de capacidade de um stream de dados do Amazon Kinesis são excedidos quando o aplicativo do Amazon Kinesis lê dados do stream de dados?

Os limites de capacidade de um stream de dados do Amazon Kinesis são definidos pelo número de estilhaços dentro do stream de dados. Os limites podem ser excedidos pela taxa de transferência de dados ou pelo número de chamadas de leitura de dados. Enquanto os limites de capacidade forem excedidos, a chamada de leitura de dados será rejeitada com uma exceção ProvisionedThroughputExceeded. Se isso ocorrer devido a um aumento temporário da taxa de dados de saída do stream de dados, uma nova tentativa do aplicativo do Amazon Kinesis poderá levar à conclusão das solicitações. Se isso ocorrer devido a um aumento sustentado da taxa de dados de saída do stream de dados, você deve aumentar o número de estilhaços no seu stream de dados para disponibilizar capacidade suficiente para que as chamadas de leitura de dados sejam sempre bem-sucedidas. Em ambos os casos, as métricas do Amazon CloudWatch permitem obter informações sobre a mudança na taxa de dados de saída do stream de dados e sobre a ocorrência de exceções ProvisionedThroughputExceeded.


P: Como posso alterar o throughput do meu stream de dados do Amazon Kinesis?

Há duas maneiras de alterar o throughput do seu stream de dados. Você pode usar a API UpdateShardCount ou o Console de Gerenciamento da AWS para escalar o número de estilhaços em um stream de dados ou alterar o throughput de um stream de dados do Amazon Kinesis ajustando o número de estilhaços no stream de dados(refragmentação).  

P: Quanto tempo leva para alterar o throughput do meu stream de dados do Amazon Kinesis usando a UpdateShardCount ou o Console de Gerenciamento da AWS?

Solicitações comuns de escalabilidade devem levar alguns minutos para serem concluídas. Solicitações maiores de escalabilidade devem levar mais tempo do que as menores.

P: Quais são as limitações da UpdateShardCount?

Para obter informações sobre as limitações da UpdateShardCount, consulte a referência de API do serviço Amazon Kinesis Data Streams.

P: O Amazon Kinesis Data Streams continua disponível quando altero o throughput do stream de dados do meu Amazon Kinesis usando a UpdateShardCount ou por meio da refragmentação?

Sim. Você pode continuar a adicionar e ler dados no stream de dados do Amazon Kinesis durante o uso da UpdateShardCount ou da refragmentação para alterar o throughput do stream de dados.

P: O que é a refragmentação?

A refragmentação é o processo usado para escalar seu stream de dados usando uma série de estilhaços ou junções. Em uma divisão de estilhaço, um único estilhaço é dividido em dois estilhaços, o que aumenta o throughput do stream de dados. Em uma mescla de estilhaços, dois estilhaços são mesclados em um único estilhaço, o que reduz o throughput do stream de dados. Para obter mais informações, consulte Resharding a Stream no Guia do desenvolvedor do Amazon Kinesis Data Streams.

P: Com que frequência posso alterar o throughput do meu stream de dados do Amazon Kinesis ao refragmentá-lo, e quanto tempo demora essa alteração?

Uma operação de refragmentação como divisão ou mescla de fragmentos demora alguns segundos. Somente é possível executar uma operação de refragmentação por vez. Portanto, em um stream de dados do Amazon Kinesis com apenas um estilhaço, bastam alguns segundos para dobrar o throughput por meio da divisão de um estilhaço. Para um stream de dados com 1.000 estilhaços, são necessários 30 mil segundos (8,3 horas) para dobrar o throughput por meio da divisão de 1.000 estilhaços. Recomendamos aumentar o throughput do seu stream de dados antes do momento em que o throughput extra é necessário.

P: Como posso alterar o período de retenção de dados do meu stream de dados do Amazon Kinesis?

Como padrão, o Amazon Kinesis armazena seus dados durante até 24 horas. Você pode aumentar o período de retenção de dados para até 7 dias ativando a retenção de dados prolongada.

Para obter mais informações sobre como alterar a retenção de dados, consulte Como alterar o período de retenção de dados.

P: Como posso monitorar as operações e a performance do stream de dados do Amazon Kinesis?

O Console de Gerenciamento do Amazon Kinesis Data Streams exibe as principais métricas operacionais e de performance, como throughput de recebimento e envio de dados dos seus streams de dados do Amazon Kinesis. O Amazon Kinesis Data Streams também se integra ao Amazon CloudWatch, permitindo coletar, ver e analisar métricas do CloudWatch para os seus streams de dados e estilhaços dentro desses streams. Para obter mais informações sobre as métricas do Amazon Kinesis Data Streams, consulte Monitoring Amazon Kinesis Data Streams with Amazon CloudWatch.

Observe que todas as métricas de stream são gratuitas. Todas as métricas de estilhaço são cobradas de acordo com a definição de preço do Amazon CloudWatch.  

P: Como posso gerenciar e controlar o acesso ao meu stream de dados do Amazon Kinesis?

O Amazon Kinesis Data Streams se integra ao AWS Identity and Access Management (IAM), um serviço que permite controlar de forma segura o acesso de seus usuários aos serviços e recursos da AWS. Por exemplo, você pode criar uma política que permite que apenas um usuário ou grupo específico adicione dados ao seu stream de dados do Amazon Kinesis. Para obter mais informações sobre o gerenciamento e o controle de acesso ao seu stream de dados, consulte Como controlar o acesso aos recursos do Amazon Kinesis Data Streams usando o IAM.

P: Como posso gerar um log das chamadas de API feitas para o meu stream de dados do Amazon Kinesis para fins de análise de segurança e solução de problemas operacionais?

O Amazon Kinesis se integra ao Amazon CloudTrail, um serviço que registra as chamadas de APIs da AWS para a sua conta e fornece arquivos de log. Para obter mais informações sobre o registro de chamadas de APIs e uma lista das operações compatíveis das APIs do Amazon Kinesis, consulte Logging Amazon Kinesis API calls Using Amazon CloudTrail.

P: Como posso gerenciar de modo eficaz meus streams de dados do Amazon Kinesis e seus custos associados?

O Amazon Kinesis Data Streams permite atribuir tags a streams de dados do Amazon Kinesis a fim de facilitar o gerenciamento de recursos e custos. Uma tag é um rótulo definido pelo usuário, especificado como um par chave-valor, que ajuda a organizar recursos da AWS. Por exemplo, você pode atribuir uma tag aos seus streams de dados por centro de custo, permitindo a categorização e o rastreamento dos custos do Amazon Kinesis Data Streams com base no centro de custo. Para obter mais informações sobre a atribuição de tags do Amazon Kinesis Data Streams, consulte Como atribuir tags ao seu Amazon Kinesis Data Streams.

P: Como posso descrever a maneira como estou utilizando meu limite de estilhaços?

Você pode entender como está utilizando seu limite de estilhaços para uma conta usando a API DescribeLimits. A API DescribeLimits retornará o limite de estilhaços e o número de estilhaços abertos na sua conta. Se você precisar aumentar seu limite de estilhaços, solicite um aumento de limite.


P: Qual é o nível de segurança dos meus dados durante o uso do Kinesis Data Streams?

Como padrão o Kinesis é seguro. Apenas os proprietários da conta e do stream de dados têm acesso aos recursos do Kinesis criados por eles. O Kinesis aceita a autenticação de usuário para controlar o acesso aos dados. Você pode usar as políticas do AWS IAM para conceder seletivamente permissões a usuários e grupos de usuários. Você pode inserir e extrair seus dados com segurança do Kinesis por meio de endpoints SSL usando o protocolo HTTPS. Se você precisar de segurança extra, use a criptografia no lado do servidor com as chaves mestras do AWS KMS para criptografar dados armazenados no seu stream de dados. O AWS KMS permite usar as chaves mestras do KMS geradas pela AWS para criptografia ou, se você preferir, é possível trazer sua própria chave mestra para o AWS KMS. Por fim, você pode usar suas próprias bibliotecas de criptografia para criptografar dados do cliente antes de inserir os dados no Kinesis.

P: Posso acessar de modo privado as APIs do Kinesis Data Streams por meio da Amazon Virtual Private Cloud (VPC) sem usar IPs públicos?

Sim. Você pode acessar de modo privado as APIs do Kinesis Data Streams por meio da Amazon Virtual Private Cloud (VPC) criando VPC endpoints. Com os VPC endpoints, o roteamento entre a VPC e o Kinesis Data Streams é processado pela rede da AWS sem a necessidade de um Internet Gateway, um gateway NAT ou uma conexão VPN. A geração mais recente de VPC endpoints usados pelo Kinesis Data Streams é desenvolvida pelo AWS PrivateLink, uma tecnologia que habilita a conectividade privada entre os Serviços da AWS usando Elastic Network Interfaces (ENIs – Interfaces de rede elástica) com IPs privados nas VPCs. Para saber mais sobre o PrivateLink, acesse a documentação do PrivateLink


P: Posso criptografar os dados que insiro em um stream de dados do Kinesis?

Sim. Existem duas opções para criptografar os dados inseridos em um stream de dados do Kinesis. Você pode usar a criptografia no lado do servidor, que é um recurso totalmente gerenciado que criptografa e descriptografa automaticamente dados inseridos e extraídos de um stream de dados. Ou gravar dados criptografados em um stream de dados ao realizar a criptografia e a descriptografia do cliente.

P: Por que devo usar a criptografia no lado do servidor em vez da criptografia do cliente?

Geralmente, os clientes escolhem a criptografia no lado do servidor em vez de a criptografia do cliente por uma das seguintes razões:

  • É difícil aplicar a criptografia do cliente
  • Eles desejam uma segunda camada de segurança além da criptografia do cliente
  • É difícil implementar os esquemas de gerenciamento de chaves do cliente

P: O que é a criptografia no lado do servidor?

A criptografia no lado do servidor do Kinesis Data Streams criptografa automaticamente dados usando uma chave mestra (CMK) do AWS KMS especificada pelo usuário antes de eles serem gravados na camada de armazenamento do stream de dados e descriptografa os dados depois que forem recuperados do armazenamento. A criptografia impossibilita gravações e torna o payload e a chave de partição ilegíveis, a menos que o usuário que está gravando ou lendo por meio do stream de dados tenha a permissão para usar a chave selecionada para a criptografia no stream de dados. Como resultado, a criptografia no lado do servidor torna fácil cumprir os requisitos internos de segurança e conformidade que regem os seus dados.

Com a criptografia no lado do servidor, os aplicativos do lado do cliente (produtores e consumidores) não precisam estar cientes da criptografia, não precisam gerenciar operações de CMKs e nem criptográficas. Além disso, os seus dados serão criptografados quando estiverem em repouso e em movimento no serviço Kinesis Data Streams. Todas as CMKs usadas pelo recurso de criptografia no lado do servidor são disponibilizadas pelo AWS KMS. O AWS KMS facilita o uso de uma CMK para Kinesis gerenciada pela AWS (um método de criptografia "1-click"), sua própria CMK gerada pelo AWS KMS ou uma CMK importada por você para fazer a criptografia.

P: Existe um Guia de conceitos básicos da criptografia no lado do servidor?

Sim e você pode encontrá-lo na documentação do usuário.

P: A criptografia no lado do servidor interfere em como meus aplicativos interagem com o Kinesis Data Streams?

Possivelmente. Dependerá da chave usada para fazer a criptografia e das permissões que regem o acesso à chave.

  • Se você usar a CMK para Kinesis gerenciada pela AWS (alias da chave = aws/kinesis), suas aplicações não sofrerão impacto pela habilitação nem pela desabilitação da criptografia usando essa chave.
  • Se você usar uma chave mestra diferente, como uma chave mestra personalizada do AWS KMS ou uma que tenha sido importada para o serviço AWS KMS, e se os produtores e os consumidores de um stream de dados não tiverem permissão para utilizar a CMK do AWS KMS usada para criptografia, as suas solicitações PUT e GET consequentemente falharão. Antes de usar a criptografia no lado do servidor será necessário configurar as políticas de chave do AWS KMS para permitir a criptografia e a descriptografia das mensagens. Para obter exemplos e mais informações sobre as permissões do AWS KMS, consulte AWS KMS API Permissions: Actions and Resources Reference no Guia do desenvolvedor do AWS Key Management Service ou as instruções sobre permissões contidas na documentação do usuário da criptografia no lado do servidor do Kinesis Data Streams.

P: Existe algum custo adicional associado ao uso da criptografia no lado do servidor?

Sim. No entanto, se você estiver usando a CMK para Kinesis gerenciada pela AWS e não tiver ultrapassado os custos de uso de APIs do KMS do nível gratuito, o uso da criptografia no lado do servidor não será cobrado. Veja a seguir a descrição dos custos por recurso:

Chaves:

  • A CMK para Kinesis gerenciada pela AWS (alias = "aws/kinesis") é gratuita.
  • As chaves do KMS geradas pelo usuário estão sujeitas aos custos de chave do KMS. Saiba mais.

Uso das APIs do KMS:

  • Os custos de uso de APIs se aplicam a cada CMK, inclusive os personalizados. O Kinesis Data Streams chama o KMS aproximadamente a cada 5 minutos quando mudando a chave de dados. Em um período de 30 dias, o custo total de chamadas de API ao KMS iniciadas por um stream de dados do Kinesis deve ser inferior a alguns dólares. Note que esse custo aumenta com o número de credenciais de usuários usados pelos produtores e consumidores de dados, pois cada credencial de usuário exige uma chamada de API única ao AWS KMS. Quando você usa uma função do IAM para autenticação, cada assume-role-call resultará em credenciais de usuário únicas. Pode ser necessário armazenar em cache as credenciais de usuário retornadas pelo assume-role-call para reduzir os custos do KMS.

P: Quais regiões da AWS oferecem criptografia no lado do servidor para o Kinesis Data Streams?

A criptografia do lado do servidor do Kinesis Data Streams está disponível na região AWS GovCloud e em todas as regiões públicas, exceto na região China (Pequim).

P: Como posso começar, atualizar ou remover a criptografia no lado do servidor de um stream de dados?

Todas essas operações podem ser concluídas usando o Console de Gerenciamento da AWS ou o AWS SDK. Para saber mais, consulte o Guia de conceitos básicos da criptografia no lado do servidor do Kinesis Data Streams.

P: Qual algoritmo de criptografia é usado para a criptografia no lado do servidor?

O Kinesis Data Streams usa um algoritmo AES-GCM 256 para criptografia.

P: Se eu criptografar um stream de dados que já contenha dados gravados, estejam eles em texto sem formatação ou em texto cifrado, todos os dados no stream de dados serão criptografados ou descriptografados se a criptografia for atualizada?

Não. Apenas os novos dados gravados no stream de dados serão criptografados (ou permanecerão descriptografados) pela nova aplicação da criptografia.

P: O que a criptografia no lado do servidor do Kinesis Data Streams codifica?

A criptografia no lado do servidor codifica o payload da mensagem junto com a chave de partição, o que é especificado pelos aplicativos do produtor do stream de dados.

P: A criptografia no lado do servidor é um recurso específico de estilhaço ou um recurso específico de stream?

A criptografia no lado do servidor é um recurso específico de stream.

P: Posso alterar a CMK usada para criptografar um stream de dados específico?

Sim. Ao usar o Console de Gerenciamento da AWS ou o SDK da AWS, você pode escolher uma nova chave mestra para aplicar a um stream de dados específico.

P: É possível receber orientações durante o ciclo de vida de criptografia dos meus dados desde o momento em que os enviei para um stream de dados do Kinesis com a criptografia no lado do servidor habilitada, como também quando eu recuperá-los?

Veja a seguir instruções sobre como o Kinesis Data Streams usa CMKs do AWS KMS para criptografar uma mensagem antes que ela seja armazenada no caminho PUT, como também para descriptografá-la após a sua recuperação no caminho GET. O Kinesis e o AWS KMS executam as seguintes ações (inclusive a descriptografia) ao chamar putRecord(s) ou getRecords em um stream de dados com a criptografia no lado do servidor habilitada.

  1. Os dados são enviados de uma aplicação do produtor do Kinesis do cliente para o Kinesis usando SSL via HTTPS.
  2. Os dados são recebidos pelo Kinesis, armazenados na memória RAM e a criptografia é aplicada ao payload e à chave de partição de um registro.
  3. O Kinesis solicita o input keying material (IKM – material para chave de entrada) sem formatação e uma cópia do IKM é criptografada ao usar a chave mestra do KMS selecionada pelo cliente.
  4. O AWS KMS cria um IKM, o criptografa usando a chave mestra e envia o IKM sem formatação e o IKM criptografado para o Kinesis.
  5. O Kinesis usa o IKM sem formatação para derivar chaves de dados exclusivas por registro.
  6. O Kinesis criptografa o payload e a chave de partição usando as chaves de dados e remove a chave sem formatação da memória.
  7. O Kinesis anexa o IKM criptografado aos dados criptografados.
  8. O IKM criptografado é armazenado em cache na memória para reutilização até sua expiração, que ocorre após 5 minutos.
  9. O Kinesis entrega a mensagem criptografada para um armazenamento de back-end onde ela é armazenada em repouso e pode ser extraída por meio de uma chamada getRecords.

O Kinesis e o AWS KMS executam as seguintes ações (inclusive a descriptografia) quando você chama getRecords.

  1. Quando uma chamada getRecords é feita, o front-end do Kinesis recupera o registro criptografado por meio do serviço de back-end.
  2. O Kinesis faz uma solicitação para o KMS usando um token gerado pela solicitação do cliente. O AWS KMS autoriza essa ação.
  3. O Kinesis descriptografa o IKM criptografado armazenado com o registro.
  4. O Kinesis recria as chaves de dados por registro por meio do IKM descriptografado.
  5. Se autorizado, o Kinesis descriptografa o payload e remove a chave de dados sem formatação da memória.
  6. O Kinesis entrega o payload por meio do SSL e do HTTPS para o cliente do Kinesis que fez a solicitação dos registros.

 


P: O Amazon Kinesis Data Streams está disponível no nível gratuito da AWS?

Não. No momento, o Amazon Kinesis Data Streams não está disponível no nível gratuito da AWS. O nível gratuito da AWS é um programa que oferece avaliação gratuita para um grupo de serviços da AWS. Para obter mais detalhes sobre o nível gratuito da AWS, consulte Nível gratuito da AWS.

P: Quanto custa o Amazon Kinesis Data Streams?

O Amazon Kinesis Data Streams usa uma definição de preço simples, no modelo de pagamento conforme o uso. Não há custos iniciais nem taxas mínimas, e você paga apenas pelos recursos que usa. Os custos do Amazon Kinesis Data Streams têm duas dimensões principais e uma dimensão opcional:

  • Custo horário de estilhaços, determinado pelo número de estilhaços no seu stream de dados do Amazon Kinesis.
  • Custo da Unidade de Carga PUT, determinado pelo número de unidades de carga de 25 KB que seus produtores de dados adicionam ao seu stream de dados.
  • Custo de retenção de dados prolongada opcional determinado pelo número de horas de estilhaços geradas pelo seu stream de dados. 

Para obter mais informações sobre os custos do Amazon Kinesis Data Streams, consulte Definição de preço do Amazon Kinesis Data Streams.

P: O custo da Unidade de Carga PUT muda se eu usar uma operação PutRecords em vez de uma operação PutRecord?

A cobrança da Unidade de Carga PUT é calculada com base no número de unidades de carga de 25 KB adicionadas ao seu stream de dados do Amazon Kinesis. O custo da Unidade de Carga PUT é o mesmo, seja usando uma operação PutRecords ou uma operação PutRecord.

P: Eu sou cobrado pelos fragmentos no estado "CLOSED"?

Um fragmento poderia estar no estado "CLOSED" após a refragmentação. Você não será cobrado por fragmentos no estado "CLOSED".

P: Além dos custos do Amazon Kinesis Data Streams, há outros custos que podem ser gerados pelo meu uso do Amazon Kinesis Data Streams?

Se você usa o Amazon EC2 para executar seus aplicativos do Amazon Kinesis, você será cobrado pelos recursos do Amazon EC2 além dos custos do Amazon Kinesis Data Streams.

A Biblioteca de cliente do Amazon Kinesis (KCL) usa uma tabela do Amazon DynamoDB para monitorar informações de estado do processamento de registros. Se você usa a KCL para seus aplicativos do Amazon Kinesis, serão cobrados os recursos do Amazon DynamoDB, além dos custos do Amazon Kinesis Data Streams.

Se você ativar as métricas avançadas de estilhaço, será cobrado pelo custo do Amazon CloudWatch associado às métricas de estilhaço ativadas, além dos custos do Amazon Kinesis Data Streams.

Observe que os dois casos acima são comuns, mas não são os únicos.