我在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还没出监控和图形界面。现在出没出我不知道,不过我自己写了个。什么?你想听听怎么做?下次吧......

你的flume-ng的第一篇博客的更多相关文章

  1. 第一篇博客:Hello World

    2016年10月10日,双十,好日子,决定开始写第一篇博客,标题想了会,就叫Hello World 吧,哈哈^_^. 首先感谢博客园的管理们能批准我的申请,记得在14年的时候申请过一次,竟然没申请通过 ...

  2. 我的第一篇博客 ——【ToDoList】小程序开发

    我是一只即将大四的大三狗,这是我的第一篇博客,说来惭愧.今年1月份,学校放寒假的时候开始自学的IOS,放假的时候比较起劲,看了一堆Object-C的视频,然后照着中英文对照的IOS基础开发教程,做了两 ...

  3. Hello World -- 第一篇博客

    今年注定是不寻常的一年,因为技术,接触了许多大牛.通过一篇篇博文,看到了大牛们勤奋好学.孜孜不倦的精神,于是决定也开个博客,向大牛学习. 博客开了,写点什么呢?奈何肚子里墨水不多,吐出来也多是白沫,不 ...

  4. Ginger的第一篇博客

    怀着无感的心情,没有技术的身体,写下第一篇博客作为标记. 目前应该会搞清楚数据结构上相关的操作.算法,然后用c语言实现后记录在博客. 我是有目标的咸鱼! 2019/4/19

  5. “Hello, my first blog”------第一篇博客的仪式感

    本人在校大学生一枚,开通博客,主要是想记录自己的学习过程,分享自己的学习经历.记得大一的时候,很多不懂的操作和知识,都是在博客上找到了相应的解决办法.但比较讽刺的是,很多时候,曾经解决了的问题,当再次 ...

  6. 我的第一篇博客。(JavaScript的声明和数据类型的一些笔记)

    这是我的第一篇博客,务必请大家多多关照. 下面是前端js的变量和数据类型的一些笔记,不是很全请多多包涵. 1.变量 变量的声明 var 变量名 变量这个容器中放的是数据 变量的赋值 变量名 = 数据 ...

  7. 我的第一篇博客:不用sizeof求int的bit数

    我的第一篇博客..  还不会什么高端的东西就来点基础的. 不用sizeof求int的bit数 //不用sizeof求int的bit数 #include<stdio.h> int main( ...

  8. 第一篇博客 安装open live writer

    第一篇博客安装open live writer http://openlivewriter.org/ 有的人可能会打不开,所以我准备了一个百度云的链接地址 链接:https://pan.baidu.c ...

  9. C博客作业00—我的第一篇博客

    C博客作业00-我的第一篇博客 1. 你对网络专业或者计算机专业了解是怎样? 泛泛了解 - 原先只知道网络工程隶属于计算机工程学院,与院中其他专业一样,同样都需要学习大量的计算机基础知识,然后再分支学 ...

  10. Hello World -- 第一篇博客 -- 活着的意义

    今年注定是不寻常的一年,因为技术,接触了许多大牛.通过一篇篇博文,看到了大牛们勤奋好学.孜孜不倦的精神,于是决定也开个博客,向大牛学习. 博客开了,写点什么呢?奈何肚子里墨水不多,吐出来也多是白沫,不 ...

随机推荐

  1. 【iOS发展-81】setNeedsDisplay刷新显卡,并CADisplayLink它用来模拟计时器效果

    (1)效果 (2)源码下载(假设提示没有小图片的话,自己找一个替换一下即可,看到效果即可) http://download.csdn.net/detail/wsb200514/8176339 (3)总 ...

  2. TCP在三次握手协议和四波(图)

    设定TCP需要建立一个三次握手的能力,断开需要握手.整步骤,如看到下面的附图: 先来看看怎样建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资 ...

  3. 迷宫的最短路径 (BFS)

    N*M的迷宫,从起点到终点,求最短距离 宽度优先搜索按照距开始状态由近及远的顺序进行搜索,因此可以很容易的用来求最短路径,最少操作之类问题的答案.  (可以构造成pair或者编码成int来表达状态) ...

  4. React.js再探(二)

    上文中说到了组件了. 我们使用组件的目的最大莫过于复用,提供生产效率. 那么,这时候组件就应该能够提供一些”api”出来,让开发者去定义在不同场景下的不同表现,比如,行为或外观等. 而这些“api”就 ...

  5. Session与Caching

    Session与Caching 在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了A ...

  6. F4107Usart数据处理程序

    解决:Cortex-M4上,usart自己主动发送数据计划. 1. usart快速突破.数据还没有被处理.usart中断会把盖掉的数据不被处理. 数据丢失. 2.此过程需要main处理4一个usart ...

  7. 堆VS栈

    c#堆VS栈(Part One) 前言 本文主要是讲解C#语言在内存中堆.栈的使用情况,使读者能更好的理解值类型.引用类型以及线程栈.托管堆. 首先感谢原文作者:Matthew Cochran 为我们 ...

  8. RPC和RMI的区别(Difference Between RPC and RMI)

    RPC和RMI的区别(Difference Between RPC and RMI) RPC vs RMI RPC (Remote Procedure Call) and RMI (Remote Me ...

  9. mysql 千分位 Format

    原文:mysql 千分位 Format select Format(123456789) 结果:123,456,789

  10. The Swift Programming Language-官方教程精译Swift(3)基本运算符

    运算符是检查, 改变, 合并值的特殊符号或短语. 例如, 加号 + 把计算两个数的和(如 let i = 1 + 2). 复杂些的运行算包括逻辑与&&(如 if enteredDoor ...