Nesse artigo vou apresentar os conceitos principais da ferramenta Apache Nifi e depois seguiremos para um simples tutorial de como instalar localmente e configurar um fluxo de dados básico, que será mover conteúdo de um arquivo para outro.
Como o NiFi é uma ferramenta gráfica, recomendo ler esse artigo em uma tela grande (desktop) pois esse artigo terá muitas imagens.
Esse texto foi escrito com base na versão 1.11.4 do NiFi.
Principais definições
O Apache NiFi é um programa usado para automatizar fluxo de dados usando uma interface gráfica acessada através de um navegador. Isso quer dizer que não dependemos de código para criar por exemplo, uma tarefa recorrente (cron) que move dados novos de um banco para outro banco ou mesmo para uma fila (ex.: Apache Kafka).
Para compreendermos melhor o tutorial que virá a seguir temos que entender algumas terminologias que existem no contexto do NiFi:
Processor
Um processor é um elemento atômico que faz uma tarefa simples. O próprio NiFi já possui uma infinidade de processors, bastando apenas configurá-lo de acordo com o seu data flow. Por exemplo, se quisermos usar o PutMongoRecord, temos que configurar a connection string, usuário e senha do banco Mongo que queremos usar.
FlowFile
É uma abstração do próprio dado no ambiente do NiFi. Um processor pode gerar um FlowFile a partir de um datasource como um arquivo ou transformar um FlowFile em outro, por exemplo de XML para JSON.
Connection
É a ligação entre dois processors, gerando uma Queue (fila). Possui um tipo, normalmente success ou failure, referente ao procssor origem e nele é possível ver a quantidade que FlowFiles enfileirado (queued) assim como o tamanho deles em bytes.
Instalação
Como pré-requisito, é necessário ter o Java 8 ou 11 instalado. Se você está usando um sistema operacional baseado em UNIX, recomendo usar o SDKMAN para instalar o Java.
Em seguida, vá até a página de downloads do NiFi e baixe a versão binária.
Para o rodar o NiFi, basta rodar comando:
bin/nifi.sh start
A partir desse ponto já conseguimos acessar o NiFi acessando o endereço http://localhost:8080/nifi/ através do navegador.
Criando seu dataflow
Primeiro precisamos criar dois diretórios localmente, um servirá como entrada e o outro como saida. Nesse tutorial usarei respectivamente os diretórios /home/fabiohiroki/nifi-test/input
e /home/fabiohiroki/nifi-test/output
.
GetFile processor
O primeiro processor que vamos criar se chama GetFile
que é responsável por criar FlowFiles
a partir de arquivos criados em diretórios específicos.
Para fazer isso basta clicar e arrastar o ícone de Processors
na barra superior, depois filtramos por GetFile
. Uma caixa representando o processor recém adicionado irá aparecer no meio da tela.
PutFile processor
Similar ao passo acima, vamos adicionar um segundo processor chamado PuFile
, responsável por efetivamente criar um arquivo em um diretório específico.
Conectando processors
Para conectar dois processors e gerar uma queue entre eles, basta escolher o processor de origem, clicar no ícone de seta, segurar e soltar o botão esquerdo do mouse no processor destino, e em seguida clicar em Add
. Nesse caso uma conexão automaticamente será gerada uma vez que o processor GetFile possui apenas um tipo de relacionamento chamado success.
Configuração dos processors
Até agora ainda não é possível rodar e testar esse dataflow devido a algumas configurações mínimas que precisamos adicionar em cada processor. Cada um deles possui uma infinidade de opções de customização, então uma dica é verificar as mensagens de erro mostradas quando colocamos o mouse sob o ícone de alerta. Dessa forma conseguimos saber exatamente o que temos que configurar para conseguir rodar cada processor.
No caso do processor GetFile só precisamos então adicionar o caminho para o diretório de entrada. Para fazer isso, clique duas vezes no processor, depois na aba Properties e depois coloque o caminho absoluto no campo Input Directory
. Ao fazer isso o ícone de alerta desaparecerá.
Seguindo o mesmo processo para o PutFile, adicionamos um caminho absoluto de destino e também indicamos que ele não terá relacionamentos em caso de sucesso ou falha.
Teste dos processors
Para ligar um processor basta clicar com o botão direito e depois em Start. Para fins didáticos vamos começar ligando primeiro apenas o processor GetFile
.
Coloque um arquivo qualquer no diretório definido como Input Folder
do processor GetFile
. Se você estiver em um sistema operacional UNIX, pode usar o comando touch
no terminal:
touch /home/fabiohiroki/nifi-test/input/exemplo.txt
Se as configurações estiverem corretas até agora, veremos um novo FlowFile na fila, referente ao arquivo que acabamos de criar.
Agora se ligarmos o processor PutFile, veremos a fila se esvaziar e o arquivo sendo criado na pasta destino.
Conclusão
O fluxo apresentado dificilmente será um caso de uso real em produção, mas é suficiente para apresentar os conceitos iniciais do Apache NiFi e seu funcionamento na prática.