Flume的介绍就不多说了,大家可以自己搜索。但是目前网上大都是Flume 1.4版本或之前的资料,Flume 1.5感觉变化挺大的,如果你准备尝试一下,我这里给大家介绍一下最小化搭建方案,并且使用MongoSink将数据存入mongodb。完全单机运行,没有master,没有collector(说白了collector也就是一个agent,只是数据来源于多个其他agent),只有一个agent。把这套东西理解了你就可以自由发挥了


Flume是必须要求java运行环境的哈,jdk安装就不解释了,推荐yum安装。

另外JDK安装好以后不用设置什么环境变量,flume其实可以自己找到的,只是会发出一个警告而已,无视之


首先去下载Flume 1.5安装包

http://flume.apache.org/download.html

只需要下载apache-flume-1.5.0.1-bin.tar.gz就可以了,32位64位系统通吃


这里我们把安装包放到/home目录下,然后解压缩

tar zxvf apache-flume-1.5.0-bin.tar.gz



把解压得到的apache-flume-1.5.0-bin文件夹改名成flume,所以我们flume的路径是/home/flume


网上很多说要设置flume home环境变量,其实不用的


这里我们新增一个配置文件到/home/flume/conf/netcat.conf(其中的agent2/source2/sink2/channel2都是自己定义的名称,随便改)

# 定义组件名称
agent2.sources = source2
agent2.sinks = sink2
agent2.channels = channel2

# 定义数据入口
agent2.sources.source2.type = netcat
agent2.sources.source2.bind = 192.168.6.198
agent2.sources.source2.port = 44444
agent2.sources.source2.channels = channel2

# 定义数据出口
agent2.sinks.sink2.type = org.riderzen.flume.sink.MongoSink
agent2.sinks.sink2.host = 192.168.6.222
agent2.sinks.sink2.port = 27017
agent2.sinks.sink2.model = single
agent2.sinks.sink2.collection = events
agent2.sinks.sink2.batch = 100
agent2.sinks.sink2.channel = channel2



# 使用内存管道
agent2.channels.channel2.type = memory
agent2.channels.channel2.capacity = 1000
agent2.channels.channel2.transactionCapacity = 100


以上配置文件相信大家一看就很明了了,我简单介绍一下:

数据源是source2,而source2的定义是接收本机192.168.6.198:44444端口发过来的数据,然后存放到channel2缓冲管道里面去
channel2是什么呢?看最下面对channel2的定义,它是一个内存缓冲队列,容量是1000条数据,满100条就会被sink处理掉

那么sink的定义呢?这里我们用到了Leon Lee(李龙?可能是国内哪位大神,感谢你哈)编写的一个MongoSink,作用是把从channel2取出的数据存入MongoDB,并且累计100条数据才提交

MongoSink请到这里下载:https://github.com/leonlee/flume-ng-mongodb-sink


MongoSink我简单说一下,只需要把他打成jar包丢到/home/flume/lib里面就行了,当然别忘了把mongodb驱动也丢进去。以后你要是开发其他扩展包都是丢到lib里面就好


好,那么我们就清楚了,flume的作用就是从source获取数据,存入channel缓冲队列,最后由sink放入永久存储


运行以下命令启动flume

/home/flume/bin/flume-ng agent --conf /home/flume/conf --conf-file /home/flume/conf/netcat.conf --name agent2 -Dflume.monitoring.type=http -Dflume.monitoring.port=34545



大致解释一下:

--name agent2                指定当前运行的这个agent的名称

--conf /home/flume/conf        这个参数最好指定绝对路径,说明你的配置文件存放目录,不单单指agent的配置,其中还有log4j的配置,不然无法记录日志

--conf-file /home/flume/conf/netcat.conf         这个是指当前要运行的agent所使用的配置文件

-Dflume.monitoring.type=http          指定开启HTTP监控,可以通过浏览器直接访问本机HTTP地址查看flume运行状态

-Dflume.monitoring.port=34545            指定HTTP监控的端口


如果你需要在控制台显示一些调试信息的话请自行配置/home/flume/conf/log4j.properties

OK,等着成功吧


现目前我们主要是解决了日志数据不必直接写mongo库,只要把IP和端口告知其他项目团队,他们直接往这里发送数据就行了


后期考虑到mongodb可能有些局限性,我们可以非常灵活的改写sink,把数据存入hdfs,然后就和高大上的hadoop亲密接触拉