Flume收集日志(logback)--》 kafka缓冲队列--》永久存储mongodb (二)

本文介绍 Flume 1.5 单机版的部署过程及配置,利用 netcat 模块收集数据,并通过自定义的 MongoSink 将数据存储到 MongoDB 中。此外还介绍了如何配置 Flume 来启用 HTTP 监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


原创  2014年11月13日 16:08:17

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目录下,然后解压缩

[plain]  view plain  copy
  1. 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都是自己定义的名称,随便改)

[plain]  view plain  copy
  1. # 定义组件名称  
  2. agent2.sources = source2  
  3. agent2.sinks = sink2  
  4. agent2.channels = channel2  
  5.   
  6. # 定义数据入口  
  7. agent2.sources.source2.type = netcat  
  8. agent2.sources.source2.bind = 192.168.6.198  
  9. agent2.sources.source2.port = 44444  
  10. agent2.sources.source2.channels = channel2  
  11.   
  12. # 定义数据出口  
  13. agent2.sinks.sink2.type = org.riderzen.flume.sink.MongoSink  
  14. agent2.sinks.sink2.host = 192.168.6.222  
  15. agent2.sinks.sink2.port = 27017  
  16. agent2.sinks.sink2.model = single  
  17. agent2.sinks.sink2.collection = events  
  18. agent2.sinks.sink2.batch = 100  
  19. agent2.sinks.sink2.channel = channel2  
  20.   
  21.   
  22.   
  23. # 使用内存管道  
  24. agent2.channels.channel2.type = memory  
  25. agent2.channels.channel2.capacity = 1000  
  26. 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

[plain]  view plain  copy
  1. /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亲密接触拉

--------------------

Kafka消费者MongoDB——Java示例

为了使MongoDB成为一个Kafka消费者,必须要保证所接收的信息在存入数据库之前,已被转换成BSON文档。此处,事件是代表JSON文档的字符串。而字符串则被转换成Java对象,故而便于Java开发者应用;这些对象随后被转换为BSON文档。

完成源码Maven配置,会发现测试数据更低,但仍有一些重点;从主循环开始,依据Kafka主题接收并处理事件信息。

Fish class包括隐藏对象转换成BSON文档路径的辅助方法:

在实际应用中,有关信息的接收还有更多事情有待解决——这些信息和MongoDB参考数据读数相结合,然后通过发布到附加主题,沿着流水线操作并传递信息。此处,最后一步是通过mongo shell来确认数据已存入数据库:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值