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. No bean named 'sessionFactory' is defined

    1.错误描述 严重:Servlet service() for servlet default threw exception . org.springframework.beans.factory. ...

  2. 获取JSON对象的属性值

    1.问题背景 有一个json对象,其中有键值对,那怎样获取json对象中属性值 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  3. Error:dojo.data.ItemFileWriteStore:Invalid item argument

    1.错误描述 dijit.form.ComboBox TypeError:_4e is undefined                                            Sea ...

  4. ASP.NET性能调试

    该文转自mx5721的博客:http://blog.csdn.net/mx5721/article/details/9138135 设计考虑 性能和安全的考虑 应用程序逻辑划分的考虑:逻辑分层,然后使 ...

  5. bit 和 byte

    bit bit是计算机的最小的存储单元,一切数据最终都以bit的形式存放在计算机之中. 一个bit有且只有两种状态.要么是0,要么是1.像这样: 多个bit组合在一起就可以构成更复杂的数据.例如,8个 ...

  6. java实现马踏棋盘问题

    1.问题描述: 在国际象棋中,马走日,用户输入棋盘的起始位置从x:0-4,y:0-3输出从这一点开始,马走完整个棋盘的各个方案,并输出方案数 2.输入样式: 请输入棋盘马起始位置: 0 0 3.输出样 ...

  7. springboot入门的一点基础

    什么是SpringBoot java问世20年由于,发展到现在从技术角度来说已经很成熟,开发过程中我们总是在想如何去提高团队开发规范性.减少重复配置.避免低效开发.部署发布时流程的复杂度以及第三方技术 ...

  8. P2500 - 【DP合集】背包 bound

    题面 Description N 种物品,第 i 种物品有 s i 个,单个重量为 w i ,单个价值为 v i .现有一个限重为 W 的背包,求能容 纳的物品的最大总价值. Input 输入第一行二 ...

  9. PHP 获取访问来源

    原文:http://www.upwqy.com/details/16.html $_SERVER['HTTP_REFERER'] 通过这个全局变量可以获取访问的链接是来源于哪里 比如说从博客园 htt ...

  10. mysql大小写敏感问题

    问题: 在创建mysql表的时候发现不论表明是大写或小写,建完之后统一被变成了小写. 原因: MySQL在windows下是不区分大小写的,将script文件导入MySQL后表名也会自动转化为小写. ...