Uma breve introdução ao Apache NiFi
Resumo
Assim como uma catarata lida com um grande fluxo de água, o NiFi lida com um grande fluxo de dados. Quando se está tentando mover qualquer conteúdo de um local para outro, inúmeros problemas podem acontecer, a internet pode falhar, programas podem apresentar erros, pessoas podem intervir. Muitas vezes esse cenário pode se tornar muito complexo. Aplicar validação de dados, governança de dados e confiabilidade em um ecossistema de Big Data é difícil se for feito sozinho. Vamos conhecer o Apache NiFi, ferramenta que auxilia na resolução desses problemas, facilitando o desenvolvimento de seus pipelines de dados.
O que é Apache NiFi?
NiFi é uma estrutura de fluxo de dados de código aberto. Funciona como um transportador de dados entre o produtor e o consumidor de dados. Produtor significa o sistema que gera dados e consumidor significa o outro sistema que consome dados.
No site do projeto Apache Nifi, você encontra a seguinte definição:
“An easy to use, powerful, and reliable system to process and distribute data.”
Por que utilizar Apache NiFi?
Em primeiro lugar, quero deixar claro que não estou aqui para evangelizar o NiFi. Meu objetivo é apresentar a ferramenta e fornecer informações suficientes para que você possa tomar uma decisão.
Os principais usos de NiFi incluem ingestão de dados. Em qualquer projeto de Big Data, o maior desafio é trazer diferentes tipos de dados de diferentes fontes para um data lake centralizado. Apache NiFi vem com mais de 280 processadores integrados que são capazes de transportar dados entre sistemas.
No entanto, o NiFi não se limita apenas à ingestão de dados. Ele pode também realizar proveniência de dados, limpeza de dados, evolução de esquema, agregação de dados, transformação, agendamento de tarefas, além de muitos outros recursos.
NiFi é uma ferramenta fácil de usar para quem prefere configuração à codificação.
Adentrando no Apache Nifi
Simplificando, a sua lógica consiste em dois pontos:
Configurar:
Realizar a configuração dos processors para captura de dados, realização de conversões e outras transformações de dados.
Interligar:
Interligar os processors realizando connections entre eles para desenhar o pipeline de dados.
Entendendo a terminologia Nifi
Os processors trocam pedaços de informações chamados FlowFiles por meio de filas que são chamadas de connections.
• FlowFile
O FlowFile é o pacote de informações que se move pelos processors do pipeline. Esse pacote é dividido entre duas partes: conteúdo e atributo.
O conteúdo mantém as informações reais do fluxo de dados que podem ser lidas usando GetFile, GetHTTP etc., enquanto o atributo está na forma de par de valores-chave e contém todas as informações básicas sobre o conteúdo.
É importante entender que o FlowFile não contém os dados em si pois limitaria severamente a taxa de transferência.
• Processor
Um processor é uma caixa preta que executa uma operação. Os processors têm acesso aos atributos e ao conteúdo do FlowFile para realizar todos os tipos de ações. Eles permitem que você execute muitas operações nos dados, tarefas de transformação, validação de dados e salvando esses dados em vários sistemas. Também podemos construir processors personalizados no NiFi de acordo com nossos requisitos.
• Connections
A queue mantém os dados processados de um processor depois que são processados. Como os processors consomem e produzem dados em taxas diferentes, dependendo das operações que executam, as connections atuam como buffers de FlowFiles.
Alguns dos recursos do NiFi
• Entrega garantida
NiFi garante a entrega de dados. Isso é obtido por meio do uso eficaz de um repositório de conteúdo e log de write-ahead persistente desenvolvido para esse fim.
• Buffer de dados / liberação de pressão
Nifi pode armazenar dados em buffer quando uma determinada fonte de dados ultrapassa alguma parte da cadeia de processamento ou entrega. NiFi também suporta a capacidade de excluir dados enfileirados após um determinado período.
• Enfileiramento priorizado
NiFi permite a configuração de um ou mais esquemas de priorização de como os dados são recuperados de uma fila. O padrão é o mais antigo primeiro, mas há momentos em que os dados devem ser obtidos os mais recentes primeiro, os maiores primeiro ou algum outro esquema personalizado.
• Qualidade de serviço
Há momentos em que os dados devem ser processados e entregues em segundos para terem qualquer valor. NiFi permite que o administrador priorize a latência sobre o rendimento ou tolerância a perdas etc.
Conclusão
Depois de saber todos esses conceitos, sugiro que você pratique bastante, afinal, a melhor forma de aprender é fazendo. Simplifique e faça funcionar primeiro.
Uma ótima maneira de aprender e verificar projetos prontos, no https://github.com/deniswoliveira/meetup-eng-dados-apache-nifi temos uma demonstração de como utilizar o Apache NiFi para ler a API da Marvel e salvar o resultando em um banco de dados.
Obrigado por ler meu post e espero que gostem. Sinta-se à vontade para entrar em contato comigo se tiver alguma dúvida.