Streaming de dados com Kinesis Stream e Kinesis Firehose

Rubens Sôto
Data Hackers
Published in
7 min readMay 10, 2020

Nos últimos dias venho estudando bastante a respeito da AWS e acho que a melhor forma de fixar o que eu aprendi e também me aprofundar mais, é escrevendo.

Hoje foi dia de aprender sobre Streaming na AWS, utilizei duas ferramentas: o Kinesis Stream que é um serviço de fila altamente escalável, com alto throughput, podendo receber uma imensa quantidade de dados por segundo e o Kinesis Firehose que facilita muito a vida quando queremos carregar os dados de streaming, por exemplo, em um data lake.

Guia Passo a Passo de Como Configurar um Streaming de Dados para o S3 na AWS

Arquitetura

Nossa arquitetura vai ser algo bem simples, a nossa ideia, é que temos uma aplicação que envia dados para um Kinesis Stream e nós queremos que esses dados fiquem disponíveis no nosso data lake, que será um AWS S3.

Arquitetura

Criando o Data Lake

A partir de agora eu vou levar em consideração que você já tem uma conta na AWS(da pra usar de graça).

Pagina Oficial do AWS S3: https://aws.amazon.com/pt/s3/

Após logar no console vamos procurar pelo serviço S3:

Criação do Data Lake no S3

No lado superior direito, tem uma botão laranja “Create Bucket”, clica nele, seremos enviados para a tela a seguir:

Vamos dar um nome para o nosso bucket e escolher a região que ele ficará localizado, vou utilizar us-east-1, é a região que normalmente tem todos os produtos da AWS e também os mais atualizados.

Obs: Só para lembrar, o nome do bucket tem que ser único globalmente, então não adiantar colocar “teste” ou coisas do gênero, provavelmente alguém já esta usando.

As demais opções, deixa como esta, não queremos que nosso data lake tenha acesso externo, só clicar em “Create Bucket” e ser feliz.

Criando o Kinesis Stream

Vamos criar nosso Stream, ele que vai receber a massa de dados que iremos gerar com uma aplicação em python.

Pagina Oficial do AWS Kinesis Stream: https://aws.amazon.com/pt/kinesis/data-streams/

No console da AWS, procure por Kinesis:

Se você não tem nenhum serviço do Kinesis habilitado, você provavelmente irá se deparar com a tela abaixo, só clicar em “Get started

O Kinesis oferece alguns tipos de serviços, hoje nós iremos utilizar o Kinesis Stream e o Firehose, mas agora, clica em “Create data stream

Agora também é bem simples, vamos dar um nome para o nosso Stream, o meu vai se chamar “kinesis_streamrs”. Também vamos configurar o número de Shards, para os nossos testes 1 shard já é mais do que o suficiente.

Clica em “Create Kinesis stream” e pronto, Stream criado.

Criando o Kinesis Firehose

Já temos o Stream pronto para receber os dados, temos o data lake também para armazenar, falta só o cara que irá jogar os dados do Stream para o S3.

Pagina Oficial do AWS Kinesis Firehose: https://aws.amazon.com/pt/kinesis/data-firehose/

Clica no nome do seu stream, na tela seguinte, canto superior esquerdo, clique em “Connect Kinesis consumers

Na tela que vai aparecer, clica em “Connect to delivery stream”, a partir dai vamos começar a configurar o Firehose.

Vamos dar uma nome para esse cara, e deixar marcado o source como “Kinesis Data Stream”, só não alterar nada, essa parte ele já pega sozinho.

Clicando em Next, na próxima tela algumas opções são apresentadas: com o Firehose é possível chamar uma Lambda para fazer algumas transformações nos dados e também alterar o formato do arquivo que será gravado no S3. Por hoje, vamos deixar tudo como esta e clicar em Next.

Chegou a hora de escolher o destino dos nossos dados, tem algumas opções bem legais, como Redshift, Elasticsearch e o Splunk, mas hoje vamos jogar tudo direto no S3.

Abaixo, escolha o nome do nosso bucket e depois Next.

O Firehose te da algumas opções para saber quanto tempo que os dados serão armazenados no buffer, antes de serem gravados no s3.

Vamos deixar as seguintes configurações:
Buffer Size: 5MB
Buffer Interval: 300

Falando de forma bem clara, se o tamanho do Buffer chegar a 5MB, o Firehose vai e grava um arquivo ou se passarem 300 segundos, ele faz a mesma coisa, nesse caso, é o que ocorrer primeiro.

As demais opções, vou deixar tudo como padrão.

Lá no final da tela em “Permissions” ele esta pedindo uma “IAM Role”, que nada mais é uma permissão para o Kinesis Firehose escrever no S3 e também ler dados do Stream.
Clica em “Create new or choose

Na tela a seguir, só dar um nome para sua IAM Role e clicar em ALLOW.

Obs: Em um ambiente produtivo, essas permissões teriam de ser analisadas como muito mais carinho, mas como aqui é teste, segue o jogo!

Ele vai voltar para a nossa tela de configuração, já com a Role selecionada, só clicar em Next.

Na última tela, só clicar em “Create delivery stream” e pronto, todos os nossos recursos finalmente estão criados!!!!

Enviando Dados para o Stream

Agora chegou a hora da verdade!!! Vamos ver se esse monte de configurações funcionam mesmo.

Eu fiz uma pequena aplicação em python para enviar dados de um arquivo csv para o Kinesis Stream. A aplicação envia dados em batchs de 500 em 500 linhas ou até o Batch atingir o tamanho de 800Kb, isso tudo é para respeitar os limites do Stream e não ocorrerem erros.

Em 5 minutos consegui enviar, a partir da minha máquina, 212.000 eventos, uma performance bastante interessante, 706 eventos por segundo.

Olhando os dados de monitoramento do Kinesis Stream, da para ver algumas coisas interessantes, como a quantidade de bytes ingeridos, latência, eventos ingeridos e por último se houve algum erro por Throughput excedido.

No Firehose conseguimos ver as mesmas coisas, no caso abaixo a quantidade de registros lidos do Stream e também a quantidade de Bytes lidos.

Por último, mas não menos importante, será que os arquivos foram criados no S3? Vamos lá dar uma olhada.

Missão dada é missão cumprida rs…Arquivos Criados!

O código da aplicação esta no GitHub: https://github.com/rubenssoto/kinesis_producer

Conclusão

Ao final de todos os passos, conseguimos criar um streaming de dados em realtime tendo o S3 como destino.

Após os dados estarem no S3, o céu é o limite, podemos usar o Spark para processar os dados e jogar no Redshift ou dar acesso a um equipe de ciência de dados para realizar a exploração.

Estou totalmente aberto a dúvidas e também a sugestões, todos estamos aqui para aprender, muito obrigado por ter lido até aqui!

--

--

Rubens Sôto
Data Hackers

Sou apaixonado por tecnologia, especialmente pela área de dados. Os assuntos que mais gosto de escrever e ler são relacionados a Big Data e Cloud.