Solução de Streaming Analytics do Grupo Boticário
Com a crescente evolução no modelo Data Driven, as áreas de negócio estão tendo a necessidade de obter repostas para suas perguntas por meio de dados atualizados, onde a análise batch já não satisfaz mais, havendo necessidade da evolução para um modelo real time, entregando a informação mais rápido possível na ponta para o consumo.
Primeiramente, para entender como podemos ajudar as áreas de negócio, precisamos definir o que é real time. Buscando a definição no dicionário inglês veremos que real time é: “communicated, shown, presented, etc. at the same time as events actually happen” — Fonte: https://dictionary.cambridge.org/
A partir dessa definição, é importante capturar do projeto qual é esse “momento que o evento acontece”. Há cenários em que o usuário deseja obter insights sobre os dados nos últimos segundos, minutos, horas, etc… Nesses cenários, é necessário aguardar pelo tempo desejado para fazer a análise de um grupo de dados que chegam por streaming, para que seja possível fazer a análise dos dados e obter a reposta sobre um evento em um período de tempo. A fim de suprir essa demanda, uma arquitetura próxima ao tempo real (Near Real Time) atenderá os requisitos. Essa arquitetura é considerada Near Real Time, pois ela “aguarda os dados chegarem” em um intervalos de tempo para fazer a análise, mesmo que isso leve alguns segundos.
Há outros cenários em que há a necessidade de obter a informação no momento em que o evento acontece e não está relacionada a um intervalo de tempo específico, e sim ao evento em si, por exemplo: uma venda, um clique, um log, atingir um threshold, etc… Nesses casos consideramos o cenário de tratamento do dado como um evento streaming, em que o dado chega e precisa de uma ação, que pode ser o enriquecimento com outros dados já persistidos previamente na plataforma de dados.
Para atender ambos os cenários o Grupo Boticário desenvolveu a arquitetura de Streaming Analytics, onde o engenheiro de dados pode entregar a reposta que o usuário precisa no exato momento que ela acontece, seja ela relacionada a um período de tempo (NRT) ou a um evento (streaming).
O fluxo de dados chegando a plataforma de dados: todo o processo analítico e a entrega são mostrados na imagem e detalhado logo em seguida.
1 — Dados oriundos de diferentes fontes são recebidos por um gerenciador de mensagem, no caso um tópico do Pub/Sub, e ficam disponíveis para que as ferramentas de análise e armazenamento possam utilizar esse dado.
2 — Os dados são persistidos no BigQuery, através da feature Pub/Sub Subscription, que escreve o dado via streaming em uma camada destinado a dados brutos (raw) .
3 — Paralelamente, uma cópia do dado bruto é enviada ao DataFlow, assim o dado streaming pode se manipulado e enriquecido com outros dados previamente persistidos nas camadas produtivas. Para a manipulação e o enriquecimento do dado, o Dataflow disponibiliza ferramentas como o Apache Beam ou SQL Workspace.
4 — O dado já preparado e enriquecido é gravado no BigQuery em uma camada de dados confiável (trusted).
5 — Com os dados persistidos em real time, um ETL pode ser agendado via composer para refinamento do dado e armazenado na camada refined ou, se necessária uma latência menor, uma View ou Materialized View pode ser criado na camada refined, trazendo dados refinados da trusted.
6 —Os dados já estão disponíveis para serem consumidos, por exemplo via dashboards.
O desenho da arquitetura pode parecer complexo, mas seu desenvolvimento e implantação são relativamente simples. É possível usar a linguagem SQL para manipulação dos dados em streaming no Dataflow, o que torna ainda mais simples. Para soluções que exigem maior complexidade na manipulação dos nos dados, o Apache Beam com SDK do Python pode ser usado, mas isso é um tema para um próximo artigo :).
Referências
Dados em Streaming: Publicação e Ingestão
Como unir dados de streaming com o Dataflow SQL