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目录下,然后解压缩
把解压得到的apache-flume-1.5.0-bin文件夹改名成flume,所以我们flume的路径是/home/flume
网上很多说要设置flume home环境变量,其实不用的
这里我们新增一个配置文件到/home/flume/conf/netcat.conf(其中的agent2/source2/sink2/channel2都是自己定义的名称,随便改)
数据源是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
大致解释一下:
--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亲密接触拉
--------------------
Kafka消费者MongoDB——Java示例
为了使MongoDB成为一个Kafka消费者,必须要保证所接收的信息在存入数据库之前,已被转换成BSON文档。此处,事件是代表JSON文档的字符串。而字符串则被转换成Java对象,故而便于Java开发者应用;这些对象随后被转换为BSON文档。
完成源码Maven配置,会发现测试数据更低,但仍有一些重点;从主循环开始,依据Kafka主题接收并处理事件信息。
Fish class包括隐藏对象转换成BSON文档路径的辅助方法:
在实际应用中,有关信息的接收还有更多事情有待解决——这些信息和MongoDB参考数据读数相结合,然后通过发布到附加主题,沿着流水线操作并传递信息。此处,最后一步是通过mongo shell来确认数据已存入数据库: