Introdução ao Apache NiFi

Fabio Hiroki - May 10 '20 - - Dev Community

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.

Um gato lendo código no computador

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.

NiFi PutMongo Processor

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.

NiFi Queue

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
Enter fullscreen mode Exit fullscreen mode

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.

Animação mostrando a adição de um novo processor

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.

Animação mostrando a adição do processor PutFile

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.

Animação mostrando como conectar dois processors

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.

Mensagem indicando que o processor GetFile está inválido

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á.

Animação mostrando como adicionar o caminho de origem no processor GetFile

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.

Configuração do processor PutFile

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
Enter fullscreen mode Exit fullscreen mode

Se as configurações estiverem corretas até agora, veremos um novo FlowFile na fila, referente ao arquivo que acabamos de criar.

Fila sendo populate com arquivo criado

Agora se ligarmos o processor PutFile, veremos a fila se esvaziar e o arquivo sendo criado na pasta destino.

Fluxo todo ligado

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.

. . . . . . . . . . . . . . . . . . . . .