1.简介

Flume是Cloudera提供的一个高可用、高可靠、分布式的海量日志采集、聚合和传输的系统。

Flume支持在日志系统中定制各类数据发送方用于收集数据,同时Flume提供对数据进行简单的处理并写到各种数据接受方的能力。

当前Flume有两个版本,Flume 0.9X版本的统称Flume-og,Flume1.X版本的统称Flume-ng (由于Flume-ng经过重大重构与Flume-og有很大不同,使用时需注意区分)

两个版本的区别

Flume-og采用了多Master的方式,为了保证配置数据的一致性,Flume引入了ZooKeeper用于保存配置文件,在配置文件发生变化时,ZooKeeper可以通知Flume Master节点,Flume Master间使用gossip协议同步数据。

Flume-og中读入线程同样做写操作,如果写出慢的话将阻塞 Flume 接收数据的能力。

Flume-ng最明显的改动就是取消了集中管理配置的 Master 和 Zookeeper,变为一个纯粹的传输工具。

Flume-ng读入数据和写出数据现在由不同的工作线程处理(Runner),这种异步的设计使读入线程可以顺畅的工作而无需关注下游的任何问题。

Flume的优势

1.Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS、HBase。

2.当收集数据的速度超过写入数据的时候,此时Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供平稳的数据。

3.Flume的管道是基于事务的,保证了数据在传送和接收时的一致性。

Flume的应用场景

1.Flume可以高效的将多个网站服务器的日志信息存入HDFS/HBase中。

2.除了日志信息以外,Flume也可以用来收集规模宏大的社交网络节点事件数据(比如facebook、twitter、亚马逊)

*本文只阐述Flume-ng版本的组件及使用。

2.Flume的结构模型

Flume由SourceChannelSink三大组件组成。

Source:从Client上收集数据并对数据进行格式化,以Event(事件)的形式传递给单个或多个Channel。

Flume的数据流由事件(Event)充当,事件是Flume的基本数据单位,事件携带日志数据(字节数组形式,包含头信息)

Channel:短暂的存储容器,将从Source接收到的Event进行缓存直到被Sink消费掉,Channel是Source和Sink之间的桥梁,Channal是一个完整的事务,能保证了数据在收发时的一致性,并且一个Channel可以同时和任意数量的Source和Sink建立连接。

Sink:从Channel中消费数据(Event)并传递到存储容器(Hbase、HDFS)或其他的Source中。

*Flume以Agent为最小的独立运行单元,Agent依赖于JVM,一个Agent的运行就伴随一个JVM实例的产生。

*一台机器可以运行多个Agent,一个Agent中可以包含多个Source和Sink。

3.各个组件的实现

*Flume提供了大量内置的Source、Channel和Sink类型,不同类型的Source,Channel和Sink可以自由组合,组合方式基于用户设置的配置文件。

Source组件

Channel组件

Sink组件

*不同类型的Source、Channel、Sink有其特定的属性,配置时需要根据实际情况去设置。

4.Flume的使用

1.安装

Flume依赖于JDK6以上的版本,因此首先要安装JDK并且添加环境变量JAVA_HOME。

Flume官网中下载对应的tar.gz安装包 ,将下载后的安装包放到Linux中并进行解压(系统软件放到/usr目录下)

添加Flume的bin目录到PATH环境变量中以便使用

2. 配置文件

在flume的conf目录下创建flume.conf,在该配置文件中进行组件的配置。

#指定Agent的组件名称
agentA.sources = x
agentA.sinks = z
agentA.channels = y #Source组件的相关配置
agentA.sources.x.type = spooldir
agentA.sources.x.spoolDir = /data #Sink组件的相关配置
agentA.sinks.z.type = logger #Channel组件的相关配置
agentA.channels.y.type = memory
agentA.channels.y.capacity =
agentA.channels.y.transactionCapacity = #绑定Source和Sink到Channel上
agentA.sources.x.channels = y
agentA.sinks.z.channel = y

使用Spooling Directory Source类型,监听/data目录下的文件.

使用Memory Channel,事件存储在内存中。

使用Logger Sink,将数据写入Flume的log中。

*当/data目录新增文件后,Spooling Directory Source就会读取文件中的数据,然后将数据以Event形式传给Channel,Logger Sink再消费Channel中的事件将数据写入Log中。

3 .启动

flume-ng agent -c $指定flume的conf目录 -f $指定使用的配置文件 --name $指定要启动的agent名称

Flume日志采集系统的更多相关文章

  1. Flume日志采集系统——初体验(Logstash对比版)

    这两天看了一下Flume的开发文档,并且体验了下Flume的使用. 本文就从如下的几个方面讲述下我的使用心得: 初体验--与Logstash的对比 安装部署 启动教程 参数与实例分析 Flume初体验 ...

  2. Flume日志采集框架的使用

    文章作者:foochane  原文链接:https://foochane.cn/article/2019062701.html Flume日志采集框架 安装和部署 Flume运行机制 采集静态文件到h ...

  3. 【转】Flume日志收集

    from:http://www.cnblogs.com/oubo/archive/2012/05/25/2517751.html Flume日志收集   一.Flume介绍 Flume是一个分布式.可 ...

  4. Apache Flume日志收集系统简介

    Apache Flume是一个分布式.可靠.可用的系统,用于从大量不同的源有效地收集.聚合.移动大量日志数据进行集中式数据存储. Flume简介 Flume的核心是Agent,Agent中包含Sour ...

  5. flume日志采集框架使用

    flume日志采集框架使用 本次学习使用的全部过程均不在集群上,均在本机环境,供学习参考 先决条件: flume-ng-1.6.0-cdh5.8.3.tar  去cloudrea下载flume框架,笔 ...

  6. Net分布式系统之七:日志采集系统(1)

    日志对大型应用系统或者平台尤其重要,系统日志采集.分析是系统运维.维护及用户分析的基础. 一.系统日志分类 一般系统日志可分为三大类: 1.用户行为日志:通过采集系统用户使用系统过程中,一系列的操作日 ...

  7. 生产系统ELK日志采集系统

    总结下,生产在运转的日志采集系统!后续的扩展在于elasticsearch节点与logstash节点与kafka+zookeeper,目的提高吞吐量!

  8. Hadoop生态圈-flume日志收集工具完全分布式部署

    Hadoop生态圈-flume日志收集工具完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   目前为止,Hadoop的一个主流应用就是对于大规模web日志的分析和处理 ...

  9. scribe、chukwa、kafka、flume日志系统对比

    scribe.chukwa.kafka.flume日志系统对比   1. 背景介绍许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理 这些日志需要特定的日志系统,一 ...

随机推荐

  1. (十七)java冒泡排序和compareto

    java中的排序有:冒泡排序.快速排序.选择排序.插入排序和希尔排序,还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等.     冒泡排序法:利用双重for循环,重复走访要排序的数列,两两比较大 ...

  2. JDBCTemplate简化JDBC的操作(三)需要注意的地方

    一,代码 List<String> cols = orgJdbcTemplate .queryForList( "SELECT COLUMN_NAME FROM informat ...

  3. Java百度地图经纬度纠偏

    在国内使用电子地图获取到的经纬度都不是真实的经纬度,而是经过一定的算法在真实的经纬度上添加了一个偏移量,且不同的地图有不同的算法.现在告诉大家在java中怎样对百度地图进行纠偏,主要实现将真实的经纬度 ...

  4. C#总结(六)EventBus事件总线的使用-自己实现事件总线

    在C#中,我们可以在一个类中定义自己的事件,而其他的类可以订阅该事件,当某些事情发生时,可以通知到该类.这对于桌面应用或者独立的windows服务来说是非常有用的.但对于一个web应用来说是有点问题的 ...

  5. 使用asyncio实现redis客户端

    redis协议格式请参考,http://doc.redisfans.com/topic/protocol.html 这里简单介绍下: *<参数数量> \r\n $<参数 的字节数量& ...

  6. Python模块之hashlib模块、logging模块

    一.hashlib模块 hashlib模块介绍:hashlib这个模块提供了摘要算法,例如 MD5.hsa1 摘要算法又称为哈希算法,它是通过一个函数,把任意长度的数据转换为一个长度固定的数据串,这个 ...

  7. 记录一个前端bug的解决过程

    人在江湖飘,哪能不挨刀. 我挨了重重一bug.严格来讲这可能是我职业生涯以来的首个悲惨经历,因为凭我的知识储备和经验,基本上任何可重现的bug都是可解的.然而这个bug却困扰了我三个月之久,它具有以下 ...

  8. 11.python线程

    基本概念 1.进程       定义: 进程就是一个程序在一个数据集上的一次动态执行过程. 组成:  进程一般由程序.数据集.进程控制块三部分组成. 程序:  我们编写的程序用来描述进程要完成哪些功能 ...

  9. js备战春招の四のjs函数

    1.普通函数声明: 2.函数表达式:函数表达式可以存储在变量中,在函数表达式存储在变量后,变量也可作为一个函数使用: 以上函数实际上是一个 匿名函数 (函数没有名称).函数存储在变量中,不需要函数名称 ...

  10. Scala学习笔记(一)

    scala 版HelloWorrld object HelloWorld{ def main(args:Array[String]){ println("Hello World!!!&quo ...