前面介绍了flume入门实例,介绍了配置netcat信源,以及memory信道,logger信宿,其实flume常见的信源信道信宿有很多,这里介绍flume常用信源的三种方式:netcat,avro,exec,信道的三种方式:memory,jdbc,file,信宿的两种方式FILE_ROLL,hdfs。理论上,这些组合在一起,可以构建十多种配置方式,这里我们就通过几个例子来展示这些配置,通过示例来了解他们的区别。
从信源类型来看,avro和netcat类似,都需要开启监听服务,而且模拟发送avro信息需要通过flume-ng命令,并且需要指定连接的主机和端口。exec这种信源,表示将一个命令执行的结果作为信源,交给flume来收集。
从信道类型来看,memory是最常用的方式,是将收集的数据缓存在内存中,但是他的可靠性不够,一旦出现故障,数据就难以恢复,而jdbc是将数据默认缓存在derby数据库中,file类型是将数据缓存在文件系统中,但是后两者的效率没有memory高。
从信宿类型来看,FILE_ROLL是将数据最终存储在文件系统中,但是大小会受到限制,因此一般是将数据存储在分布式系统如hadoop中,这里就是hdfs,指定了hdfs类型,就需要指定存储的路径。
在信源上,我们可以指定拦截器,让收集的数据更加的精确,更加的满足我们的系统分析需求。默认的拦截器有时间戳,正则等,同时也支持用户自定义拦截器,这就需要用户编码来定义拦截器,然后配置在信源中。
信源、信道、信宿这三个组件组成一个代理agent,他们在一个代理agent中,可以是多个信道,多个信宿的组合,在本文最后,我们会给出一个复杂的示例,展示两个信道memory对应两个信宿hdfs和FILE_ROLL的组合。下面我们给出几个实例,并运行。
1、将命令执行的结果保存到平面文件中的示例:
简单配置如下:
a2.sources=s2
a2.channels=c2
a2.sinks=k2
a2.sources.s2.type=exec
a2.sources.s2.command=cat /home/software/flume/flume-test
a2.sinks.k2.type=FILE_ROLL
a2.sinks.k2.sink.directory=/home/software/flume/files
a2.sinks.k2.sink.rollInterval=0
a2.channels.c2.type=file
a2.channels.c2.checkpointDir=/home/software/flume/fc/checkpoint
a2.channels.c2.dataDirs=/home/software/flume/fc/data
a2.sources.s2.channels=c2
a2.sinks.k2.channel=c2
启动flume,加载配置:
bin/flume-ng agent --conf conf --conf-file conf/exec.conf --name a2 -Dflume.root.logger=INFO,console
运行命令,打印日志ÿ