Apache Flume介绍

来源:互联网 发布:windows打印服务 编辑:程序博客网 时间:2024/06/14 18:46

本文是我发表在大华Share Or Out俱乐部中的文章,希望读者阅读后能初步了解flume的基本概念和用途,限于本人能力,有错误之处还请指出,谢谢!


介绍:

FlumeApache下面的一个分布式组件,它提供高效,可靠的收集,整合,传输日志数据的服务。Flume可以理解成一个管道,它连接数据的生产者和消费者,它从数据的生产者(Source)获取数据,保存在自己的缓存(Channel)中,然后通过Sink发送到消费者。它不对数据做保存和复杂的处理(可以做简单过滤和改写)。

架构:

Flume在版本0.9x以前的版本统称为Flume-og,1.X之后的版本统称为Flume-ng,也就是Origion GenerationNew Generation的区别,相对于老的版本来说,Flume-ng版本在架构上面做了很大的改动,由于时间仓促,本文仅对Flume-ng版本做介绍。

由于Flume-og版本中Flume的角色过多,比如agent, collector,master等,导致用户使用起来存在困难,因此新的Flume-ng只设计了一个角色Agent,如下图:

agent结构

FlumeAgent有如下特点:

  1. 一个Agent是一个单独的进程。
  2. 一个Agent由一个或多个管道组成。
  3. 一个管道由三个内部模块组成Source,Channel,Sink
  4. 用户可以随意指定AgentSource,Channel,Sink的类型,只要该类型符合用户自己的使用场景,Flume提供了相当大的灵活度,用户可以随意搭配。

Source

SourceFlume里面的数据生成模块,它一般有三种方式:
1. Source作为服务的,开启端口,接收其他服务发来的数据,如AvroNetCat
2. Source作为客户端,从其他服务获取数据,如Kafka。
3. Source自动生成数据,一般做调试/测试使用,如Seq,StressSource。

Flume内置提供了很多开箱即用的Source供用户选择,包括Avro,Kafka,NetCat,
Exec,SyslogTcp,StressSource等。另外,Flume也支持用户自定义Source。

Channel

Channel是Flume里面的数据缓存模块,它只提供数据的临时缓存。
Source将收到的数据放到Channel中,待Sink从Channel中取走该数据后,
Channel将清除该数据。

Flume内置了一些Channel供用户选择使用,比如Memory, File, Kafka, JDBC。
大体上分为内存,文件,外部存储系统,其中内存方式是最快速的。当然,用户也可以定制化自己的Channel。

Sink

Sink是Flume里面的数据处理模块,它负责从Channel中消费数据,可以存到HDFS,HBASE等数据库中,也有可以发给下一级Agent。

Flume内置了一些Channel供用户选择使用,比如Kafka,HBase, AsyncHBase,Logger,null等,当然,用户也可以定制化自己的Sink。

使用场景:

Flume灵活的架构设计,让用户可以根据自己的需要,任意的搭建。
总的来说有如下一些使用方式。

级联

在某些场景下,我们需要将两个agent级联起来。如果一个agent的Source为选为Avro类型,而另一个agent的Sink也选为Avro类型,那么我们可以将两个agent级联起来,只需要将下一级agent的IP信息配置到上一级的Sink配置中即可。

agent级联

当然,是由于内置的Avro的Sink和内置的Avro类型的Source能对接起来,才能完成级联,如果用户有其他自定义的Source和Sink也能完成对接,那么也可以会用自定义的类型。

聚合

在一些场景下,我们需要收集多个系统的日志聚合到一个地方,因此需要将agent合并到一起。我们只需要将多个agent的sink指向一个agent即可。

agent聚合

分发

在某些场景下,我们需要将一个系统的日志收集后,f存到多个目的地,Flume支持这种应用。事实上,从一个source出来的数据,我们可以选择数据是简单的复制分发到所有的channel,,还是有针对数据做选择性的分发,比如图片发送到Channel A, 文本发送到Channel B等类似的功能。如下图:

agent分发


1 0
原创粉丝点击