我在flume-ng 1.1.0 孵化版的时候就开始接触了,自己也搞了一段时间,没事扯扯心得吧。
先说在前面,flume-ng 后面的版本,我没仔细读change log ,比较农民 , 不知道新添了哪些特别NB的功能,有说错的地方,还请多多指教。
首先,介绍一个非常全的文章,http://flume.apache.org/FlumeUserGuide.html 看了这篇文章,基本上别的都不用看了。(囧~~~~) 没错是官网文章,flume 其实很简单,所以官网上的文章已经介绍的很全了,如果你懒得看英文,那么就听我扯扯吧。
先讲讲flume是啥东西。可能大家都遇到过类似的问题,数据(日志信息)分布在N台机器上,想要把它们汇聚在一起组成一个大文件,来处理。在google,每台机器都装GFS,直接存本地就ok了。但是不是所有的公司都是这种架构,那怎么办?这时候类似于flume这样的日志收集工具就闪亮登场了。flume主要起到以下几个作用:收集、聚合和搬运数据。正如文档一开头说的:Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregating and moving large amounts of log data from many different sources to a centralized data store.
你可以说我传数据用scp, rysnc 也可以啊。没错,是没问题。但是那些是指的传文件,要是流式数据呢?还有传输过程中出错了呢?包括到底传了多少有监控吗?最后有个变态的需求,数据以XXXX开头的给我放在一个地方,以AAAAA开头的放在另一个地方,你怎么办?
然后说说为啥是ng,这里就不说为啥是flume了,因为我也没用过其他的。没试用过就没有发言权........各位可以自己去找找比较的文章。不过我感觉说的都是很笼统,就闭着眼自己调一个吧。
当时我们在技术选型的时候有0.9X版本和ng版本,我们毅然决然地选了ng。原因很简单,ng的架构很简单,很好懂。越简单的东西越稳定!
说说flume的架构:
这是一个flume-ng 最简单的图。flume-ng 是由一个个agent组成的。一个agent就像一个细胞一样。当然可以自由组合,如下图:
上面是两个agent链接在一起的,再看看更多的......
你会发现帅呆了。就像拼积木一样........
没错,整个flume-ng 架子是由一个一个agent拼接而成的,支持多层次多项扩展。这样非常灵活。
当然,也可以这么配:
下面说说 每个agent的构造:
每个agent里都有三部分构成:source、channel和sink。
就相当于source接收数据,通过channel传输数据,sink把数据写到下一端。这就完了,就这么简单。其中source有很多种可以选择,channel有很多种可以选择,sink也同样有多种可以选择,并且都支持自定义。哇塞,太灵活了。想怎么玩就怎么玩。
同时,如上上图所示,agent还支持选择器,就是一个source支持多个channel和多个sink,这样就完成了数据的分发。
这就完了,flume-ng就这么简单........
从看到最后用,一天足可以搞定。剩下的就是怎么组织你的agent的问题了。也就是搭积木的过程......
另外有一点需要强调的是,flume-ng提供了一种特殊的启动方式(不同于agent),那就是client启动。cilent是一个特殊的agent, 他的source是文件,channel是内存,sink是arvo。实际上是为了方便大家用,直接来传递文件的。具体可以看看官方使用手册。
估计到这儿,应该对flume-ng有了解了吧。
等等,好像少了点儿什么...........你说监控? 不好意思,当时我用的时候,flume-ng还没出监控和图形界面。现在出没出我不知道,不过我自己写了个。什么?你想听听怎么做?下次吧......