Introdução ao Apache Flume
O Apache Flume não se restringe apenas à coleta de logs, e pode ser usado para transportar grandes quantidades de dados, como os gerados em social media, e-mails…
Logs são uma fonte básica de informação e ajudam a monitorar a ‘saúde’ de sistemas, detectando falhas em hardware e serviços. Podem ajudar também na solução de problemas. Embora, de uma forma geral, um log represente registro de eventos, esta é uma ferramenta importante na administração de sistemas.
Com o surgimento de tecnologias e ferramentas para Big Data, a geração e utilização dos logs se tornaram cada vez mais importantes, uma vez que agora é possível ‘prever’ quando um equipamento precisa de manutenção, o comportamento de um indivíduo em um e-commerce e a geração de recomendações, entre outras coisas.
Administrar o volume de logs que é gerado por diversos sistemas/ dispositivos não é uma tarefa fácil. Em 2011, a Cloudera criou o Flume, um sistema distribuído, confiável e disponível para coletar, agregar e mover grandes quantidades de dados de muitas fontes diferentes para um armazenamento de dados centralizado. Em 2012, esse passou a ser um projeto top level na Apache Software Foundation.
O Apache Flume não se restringe apenas à coleta de logs, e pode ser usado para transportar grandes quantidades de dados, como os gerados em social media, e-mails e qualquer fonte de dados possível.
O objetivo principal do Flume é ingerir dados de eventos no HDFS (Hadoop Distributed File System) de forma simples e automatizada. Porém, seu uso não se limita apenas ao HDFS; é possível enviar também dados para um arquivo ou banco de dados, entre outros.
Abaixo, o modelo de fluxo de dados do flume:
Um agente Flume roda na JVM (Java Virtual Machine) e possui os seguintes componentes:
- Source: responsável pela entrada de dados;
- Channel: armazena os dados que passam do source para o sink. Seu comportamento é parecido com uma fila;
- Sink: responsável por enviar os dados ao destino/ saída. A saída pode ser outro agente Flume.
A configuração de um agente é feita por meio de um arquivo local que tem o formato de um arquivo properties utilizado em Java.
Abaixo, um exemplo de configuração de um agente com um source e um sink:
No exemplo, a1 é o nome do agente. Nele, está sendo configurado um source (r1), um channel (c1) e um sink (k1).
O tipo do source é netcat – captura qualquer dado enviado a um socket em uma porta tcp -, o endereço e portão são localhost:44444.
O tipo do sink é logger, o que significa que os dados serão gravados em um arquivo. Este tipo é útil para fins de teste.
O tipo do canal é memory com capacidade para armazenar 1000 eventos no buffer e 100 eventos por transação.
Por fim, tanto source como sink são ligados ao canal c1.
Este é apenas um exemplo simples de configuração. Caso quiséssemos configurar mais de um agente, isso poderia ser feito no mesmo arquivo, alterando apenas o nome do agente. Isso pode ser bem útil a quem precisa coletar e analisar logs de diversos sistemas e máquinas, uma vez que configurados esses agentes, os dados estariam disponíveis em HDFS, banco de dados ou outro repositório (definido no sink), trazendo agilidade na análise e processamento.
Apache Flume é uma ferramenta flexível, podendo ser usada para diversas situações, o que a torna bem poderosa apesar de sua simplicidade.
Ficou alguma dúvida ou tem alguma contribuição? Aproveite os campos abaixo! Até a próxima.









