Cenário 2: dados quase em tempo real para equipes de segurança
A empresa ABC2Badge fornece sensores e crachás para eventos corporativos ou em grande escala, como o AWS re:Invent
Em um próximo evento, devido ao alto volume de participantes, a equipe de segurança do evento solicitou que a ABC2Badge coletasse dados para as áreas mais concentradas do campus a cada 15 minutos. Isso dará à equipe de segurança tempo suficiente para reagir e dispersar o pessoal de segurança de forma proporcional às áreas concentradas. Considerando-se esse novo requisito da equipe de segurança e a inexperiência na criação de uma solução de streaming, para processar dados quase em tempo real, a ABC2Badge está procurando uma solução simples, mas escalável e confiável.
Sua solução atual de data warehouse é o Amazon Redshift
Nova solução usando o Amazon Kinesis Data Firehose
Amazon Kinesis Data Firehose
O Amazon Kinesis Data Firehose
O Kinesis Data Firehose viabiliza análises quase em tempo real com ferramentas e painéis de business intelligence que você já usa no momento. Trata-se de um serviço sem servidor totalmente gerenciado que escala automaticamente para corresponder à taxa de transferência dos dados e exige administração contínua. O Kinesis Data Firehose pode separar em lotes, compactar e criptografar os dados antes de carregá-los, o que minimiza o volume de armazenamento usado no destino e aumenta a segurança. Ele também pode transformar os dados da fonte com o uso do AWS Lambda e entregar os dados transformados aos destinos. Você configura os produtores de dados para enviar dados ao Kinesis Data Firehose, e ele os entrega automaticamente ao destino especificado.
Enviar dados para um fluxo de entrega do Firehose
Para enviar dados para o fluxo de entrega, existem várias opções. A AWS oferece SDKs para muitas linguagens de programação populares, sendo que cada uma fornece APIs para o Amazon Kinesis Data Firehose
Usar o Amazon Kinesis Agent
O Amazon Kinesis Agent é uma aplicação de software independente que monitora continuamente um conjunto de arquivos de log para que novos dados sejam enviados ao fluxo de entrega. O agente lida automaticamente com a rotação de arquivos, pontos de verificação, novas tentativas em caso de falhas e emite métricas do Amazon CloudWatch para monitoramento e solução de problemas do fluxo de entrega. Configurações adicionais, como pré-processamento de dados, monitoramento de vários diretórios de arquivos e gravação em vários fluxos de entrega, podem ser aplicadas ao agente.
O agente pode ser instalado em servidores baseados em Linux ou Windows, como servidores web, servidores de log e servidores de banco de dados. Depois que o agente estiver instalado, bastará especificar os arquivos de log que ele monitorará e o fluxo de entrega para o qual ele fará os envios. O agente enviará novos dados de forma durável e confiável para o fluxo de entrega.
Usar a API com o AWS SDK e os serviços da AWS como fonte
A API do Kinesis Data Firehose oferece duas operações para enviar dados para o fluxo de entrega. O PutRecord envia um registro de dados em uma chamada. O PutRecordBatch pode enviar vários registros de dados em uma chamada e pode atingir maior taxa de transferência por produtor. Em cada método, é necessário especificar o nome do fluxo de entrega e o registro de dados, ou matriz de registros de dados, ao usar esse método. Para obter mais informações e código de exemplo para as operações da API do Kinesis Data Firehose, consulte Gravar em um fluxo de entrega do Firehose usando o AWS SDK.
O Kinesis Data Firehose também é executado com o Kinesis Data Firehose, o CloudWatch Logs, o CloudWatch Events, o Amazon Simple Notification Service
Processar dados antes da entrega ao destino
Em alguns cenários, é recomendável transformar ou aprimorar seus dados de streaming antes que eles sejam entregues ao destino. Por exemplo, os produtores de dados podem enviar texto não estruturado em cada registro de dados, e você precisa transformá-lo em JSON antes de entregá-lo ao OpenSearch Service
O Kinesis Data Firehose tem capacidade de conversão de formato de dados integrada. Com isso, você pode converter facilmente seus fluxos de dados JSON em formatos de arquivo Apache Parquet ou Apache ORC.
Fluxo de transformação de dados
Para habilitar transformações de dados de streaming, o Kinesis Data Firehose usa uma função do Lambda criada por você para transformar seus dados. O Kinesis Data Firehose armazena os dados recebidos em um tamanho de buffer especificado para a função e, depois, chama a função do Lambda especificada de forma assíncrona. Os dados transformados são enviados do Lambda ao Kinesis Data Firehose, e o Kinesis Data Firehose entrega os dados ao destino.
Conversão de formato de dados
Você também pode habilitar a conversão de formato de dados do Kinesis Data Firehose, que converterá seu fluxo de dados JSON em Apache Parquet ou Apache ORC. Esse recurso só pode converter JSON em Apache Parquet ou Apache ORC. Se você tiver dados em CSV, poderá transformá-los em JSON com o uso de uma função do Lambda e, depois, aplicar a conversão do formato de dados.
Entrega de dados
Como um fluxo de entrega quase em tempo real, o Kinesis Data Firehose armazena os dados recebidos em buffer. Depois que os limites de buffer do fluxo de entrega forem atingidos, seus dados serão entregues ao destino configurado. Há algumas diferenças na forma como o Kinesis Data Firehose entrega dados para cada destino que serão analisadas nas próximas seções deste artigo.
Amazon S3
O Amazon S3
Entrega de dados para o Amazon S3
Para a entrega de dados para o Amazon S3, o Kinesis Data Firehose concatena vários registros de entrada com base na configuração de buffer do fluxo de entrega e os entrega ao Amazon S3 como um objeto do S3. A frequência de entrega de dados para o S3 é determinada pelo tamanho do buffer do S3 (1 MB a 128 MB) ou pelo intervalo do buffer (60 segundos a 900 segundos), o que ocorrer primeiro.
A entrega de dados para o bucket do S3 pode apresentar falha por vários motivos. Por exemplo, o bucket pode não existir mais ou a função do AWS Identity and Access Management
Amazon Redshift
O Amazon Redshift
Entrega de dados para o Amazon Redshift
Para a entrega de dados ao Amazon Redshift, o Kinesis Data Firehose primeiro entrega os dados recebidos ao bucket do S3 no formato descrito anteriormente. Depois, o Kinesis Data Firehose emite um comando COPY do Amazon Redshift para carregar os dados do bucket do S3 para o cluster do Amazon Redshift.
A frequência das operações COPY de dados do S3 para o Amazon Redshift é determinada de acordo com a velocidade com a qual o cluster do Amazon Redshift consegue finalizar o comando COPY. Para um destino do Amazon Redshift, você pode especificar uma duração de repetição (0 a 7.200 segundos) ao criar um fluxo de entrega para lidar com falhas de entrega de dados. O Kinesis Data Firehose faz novas tentativas pelo período especificado e ignorará esse lote específico de objetos do S3 se não for bem-sucedido. As informações dos objetos ignorados são entregues ao bucket do S3 como um arquivo manifesto na pasta errors/, que você pode usar para alocação manual.
Veja a seguir um diagrama de arquitetura do fluxo de dados do Kinesis Data Firehose para o Amazon Redshift. Embora esse fluxo de dados seja exclusivo do Amazon Redshift, o Kinesis Data Firehose segue padrões semelhantes para os outros destinos.
Fluxo de dados do Kinesis Data Firehose para o Amazon Redshift
Amazon OpenSearch Service (OpenSearch Service)
OpenSearch Service
Entrega de dados ao OpenSearch Service
Para entrega de dados ao OpenSearch Service, o Kinesis Data Firehose armazena os registros recebidos em buffer com base na configuração de armazenamento em buffer do fluxo de entrega e, depois, gera uma solicitação em massa do OpenSearch para indexar vários registros no cluster do OpenSearch. A frequência de entrega de dados ao OpenSearch Service é determinada pelos valores de tamanho do buffer do OpenSearch (1 MB a 100 MB) e do intervalo de buffer (60 segundos a 900 segundos), o que ocorrer primeiro.
No destino do OpenSearch Service, você pode especificar uma duração de nova tentativa (0 a 7.200 segundos) ao criar um fluxo de entrega. O Kinesis Data Firehose executa novas tentativas pelo período especificado e, depois, ignora essa solicitação de índice específica. Os documentos ignorados são entregues ao bucket do S3 na pasta elasticsearch_failed/, que você pode usar para alocação manual.
O Amazon Kinesis Data Firehose pode alternar o índice do OpenSearch Service com base em uma duração. Dependendo da opção de rotação escolhida (NoRotation, OneHour, OneDay, OneWeek ou OneMonth), o Kinesis Data Firehose anexa uma parte do carimbo de data/hora de chegada no Tempo Universal Coordenado (UTC) ao nome de índice especificado.
Endpoint HTTP personalizado ou provedor de serviços de terceiros compatível
O Kinesis Data Firehose pode enviar dados para endpoints HTTP personalizados ou provedores terceiros compatíveis, como Datadog, Dynatrace, LogicMonitor, MongoDB, New Relic, Splunk e Sumo Logic.
Endpoint HTTP personalizado ou provedor de serviços de terceiros compatível
Para que o Kinesis Data Firehose forneça dados com êxito a endpoints HTTP personalizados, esses endpoints devem aceitar solicitações e enviar respostas usando determinados formatos de solicitação e resposta do Kinesis Data Firehose.
Ao fornecer dados a um endpoint HTTP de propriedade de um provedor de serviços terceiro compatível, você pode usar o serviço AWS Lambda integrado para criar uma função com o objetivo de transformar o(s) registro(s) de entrada no formato esperado pela integração do provedor de serviços.
Para a frequência de entrega de dados, cada provedor de serviços tem um tamanho de buffer recomendado. Trabalhe com seu provedor de serviços para obter mais informações sobre o tamanho recomendado do buffer. Para o tratamento de falhas na entrega de dados, o Kinesis Data Firehose estabelece uma conexão com o endpoint HTTP primeiro aguardando uma resposta do destino. O Kinesis Data Firehose continua estabelecendo conexão até que a duração da nova tentativa expire. Depois, o Kinesis Data Firehose considera isso uma falha de entrega e faz backup dos dados no bucket do S3.
Resumo
O Kinesis Data Firehose pode entregar persistentemente seus dados de streaming a um destino compatível. É uma solução totalmente gerenciada, que requer pouco ou nenhum desenvolvimento. Para a empresa ABC2Badge, o uso do Kinesis Data Firehose foi uma escolha natural. Eles já estavam usando o Amazon Redshift como sua solução de data warehouse. Como suas origens de dados faziam gravações contínuas em logs de transações, conseguiram utilizar o Amazon Kinesis Agent para fazer streaming desses dados sem escrever nenhum código adicional. Agora que a empresa ABC2Badge criou um fluxo de registros de sensores e está recebendo esses registros por meio do Kinesis Data Firehose, eles podem usar isso como base para o caso de uso da equipe de segurança.