Introdução ao Apache Flume

O Apache Flume é o Data Ingestion Framework, que grava dados baseados em eventos no Hadoop Distributed File System. É um fato conhecido que o Hadoop processa Big Data, surge uma pergunta sobre como os dados gerados a partir de diferentes servidores da Web são transmitidos ao Hadoop File System? A resposta é Apache Flume. O Flume foi projetado para ingestão de dados de alto volume no Hadoop de dados baseados em eventos.

Considere um cenário em que o número de servidores web gera arquivos de log e esses arquivos de log precisam transmitir ao sistema de arquivos Hadoop. O Flume coleta esses arquivos como eventos e os ingere no Hadoop. Embora o Flume seja usado para transmitir ao Hadoop, não há uma regra rígida de que o destino deve ser o Hadoop. O Flume é capaz de gravar em outros Frameworks como Hbase ou Solr.

Arquitetura Flume

Em geral, a arquitetura do Apache Flume é composta pelos seguintes componentes:

  • Fonte do Flume
  • Flume Channel
  • Flume Sink
  • Flume Agent
  • Evento Flume

Vamos dar uma breve olhada em cada componente do Flume

1. Fonte de Flume

Uma fonte Flume está presente em geradores de dados como o Face Book ou o Twitter. A fonte coleta dados do gerador e os transfere para o Flume Channel na forma de Eventos do Flume. O Flume suporta vários tipos de fontes, como o Avro Flume Source - se conecta na porta Avro e recebe eventos do cliente externo Avro, o Thrift Flume Source - se conecta na porta Thrift e recebe eventos de fluxos externos do cliente Thrift, Spool Directory Source e Kafka Flume Source.

2. Canal de Flume

Um armazenamento intermediário que armazena em buffer os eventos enviados pelo Flume Source até que sejam consumidos pelo Sink é chamado Flume Channel. O canal atua como uma ponte intermediária entre o Source e o Sink. Os canais de canal são de natureza transacional.

O Flume fornece suporte para o canal File e o canal Memory. O canal do arquivo é de natureza durável, o que significa que, uma vez que os dados sejam gravados no canal, eles não serão perdidos, embora se o agente reiniciar. Na memória, os eventos do canal são armazenados na memória, por isso não é durável, mas é muito rápido por natureza.

3. Pia de Flume

Um Flume Sink está presente em repositórios de dados como HDFS, HBase. O Flume sink consome eventos do Channel e os armazena em lojas de destino como HDFS. Não existe uma regra que permita que o coletor entregue eventos ao Store. Em vez disso, podemos configurá-lo de forma que um coletor possa entregar eventos para outro agente. O Flume suporta vários coletores, como HDFS Sink, Hive Sink, Thrift Sink, Avro Sink.

Fig 1.1 Arquitetura básica do Flume

4. Agente Flume

Um agente do Flume é um processo Java de execução longa executado na combinação Source - Channel - Sink. O Flume pode ter mais de um agente. Podemos considerar o Flume como uma coleção de agentes conectados do Flume que são distribuídos na natureza.

5. Evento Flume

Um evento é a unidade de dados transportada no Flume . A representação geral do objeto de dados no Flume é chamada de evento. O evento é composto de uma carga útil de uma matriz de bytes com cabeçalhos opcionais.

Trabalho de Flume

Um agente do Flume é um processo java que consiste no Source - Channel - Sink em sua forma mais simples. A fonte coleta dados do gerador de dados na forma de Eventos e os entrega ao Canal. Uma fonte pode ser entregue em vários canais, conforme o requisito. Fan-out é o processo em que uma única fonte grava em vários canais para que eles possam ser entregues em vários coletores.

Um evento é a unidade básica de dados sendo transmitida no Flume. O canal armazena em buffer os dados até que sejam ingeridos pelo Sink. O Sink coleta os dados do Channel e os entrega ao armazenamento de dados centralizado, como o HDFS ou o Sink pode encaminhar esses eventos para outro agente do Flume, conforme o requisito.

O Flume suporta Transações. Para obter confiabilidade, o Flume usa transações separadas da origem para o canal e do canal para o coletor. Se os eventos não forem entregues, a transação será revertida e posteriormente devolvida.

Para entender o funcionamento do Flume, vamos dar um exemplo da configuração do Flume, em que source é diretório de spool e sink é Hdfs. Neste exemplo, o agente do Flume está na forma mais simples, isto é, topologia de fonte única - canal - coletor, configurada usando um arquivo de propriedades java.

agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1
agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir = /tmp/spooldir
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path = /tmp/flume
agent1.channels.channel1.type = file

No exemplo de configuração acima, agent é a base com a qual definimos outras propriedades. source1 e sink1 e channel1 são os nomes de source, sink e channel respectivamente e seus tipos e locais também são mencionados em conformidade.

Vantagens do Apache Flume

  • O Flume é escalável, confiável e tolerante a falhas por natureza. Essas propriedades são discutidas em detalhes abaixo
  • Escalonável - O Flume é escalável horizontalmente, ou seja, podemos adicionar novos nós conforme nossos requisitos
  • Confiável - O Apache Flume tem suporte para transações e garante que nenhum dado seja perdido no processo de transmissão de dados. Possui transações diferentes de origem para canal e de canal para origem.
  • O Flume é personalizável e fornece suporte para várias fontes e sumidouros como Kafka, Avro, diretório de spool, Thrift etc.
  • No Flume, a fonte única pode transmitir dados para vários canais e esses canais, por sua vez, transmitem os dados para vários coletores, assim, a fonte única pode transmitir dados para vários coletores. Esse mecanismo é chamado Fan out. O Flume também suporta o Fan out.
  • O Flume fornece um fluxo constante de transmissão de dados, ou seja, se a velocidade de leitura de dados aumenta e a velocidade de gravação de dados também aumenta.
  • Embora o Flume geralmente grave dados no armazenamento centralizado como HDFS ou Hbase, podemos configurá-lo de acordo com nossos requisitos, para que o Sink possa gravar dados em outro agente. Isso mostra flexibilidade do Flume
  • O Apache Flume é de código aberto por natureza.

Conclusão

Neste artigo do Flume, os componentes do Flume e o trabalho do Flume são discutidos em detalhes. O Flume é uma plataforma flexível, confiável e escalável para transmitir dados para um armazenamento centralizado como o HDFS. Sua capacidade de integrar-se a vários aplicativos como Kafka, Hdfs, Thrift torna sua opção viável para ingestão de dados.

Artigos recomendados

Este foi um guia para o Apache Flume. Aqui discutimos a arquitetura, o funcionamento e as vantagens do Apache Flume. Você também pode consultar os seguintes artigos para saber mais -

  1. O que é o Apache Flink?
  2. Diferença entre Apache Kafka e Flume
  3. Arquitetura de Big Data
  4. Ferramentas Hadoop
  5. Aprenda os diferentes eventos JavaScript

Categoria: