Flume NG简介及配置
Flume下载地址:http://apache.fayea.com/flume/
官方使用文档: http://flume.apache.org/documentation.html
与RocketMQ的结合使用扩展:Rocket-Flume:https://github.com/apache/rocketmq-externals/tree/master/rocketmq-flume
Flume简介
1、Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.94.0 中,日志传输不稳定的现象尤为严重,为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation);改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume
特点:
- Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase等)的能力,即是日志采集和汇总的工具
- Logstash、FileBeat是ES栈的日志数据抽取工具,他们和Flume很类似,前者是轻量级、后者是重量级,若项目组使用的是ES栈技术,那完全可以使用Logstash取代Flume。
2、Flume 的一些核心概念:
| 组件 | 功能 |
|---|---|
| Agent | 使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。 |
| Client | 生产数据,运行在一个独立的线程。 |
| Source | 从Client收集数据,传递给Channel。 |
| Sink | 从Channel收集数据,运行在一个独立线程。 |
| Channel | 连接 sources 和 sinks ,这个有点像一个队列。 |
| Events | 可以是日志记录、 avro 对象等。 |
Flume以agent为最小的独立运行单位。一个agent就是一个JVM。单agent由Source、Sink 和 Channel 三大组件构成,如下图

这是一个flume-ng 最简单的图。flume-ng 是由一个个agent组成的。一个agent就像一个细胞一样。当然可以自由组合,如下图:

上面是两个agent链接在一起的,再看看更多的......

你会发现帅呆了。就像拼积木一样........ 没错,整个flume-ng 架子是由一个一个agent拼接而成的,支持多层次多项扩展。这样非常灵活。
Flume支持用户建立多级流,也就是说,多个agent可以协同工作,并且支持Fan-in、Fan-out、Contextual Routing、Backup Routes。如下图所示:

Flume 整体架构介绍
Flume架构整体上看就是 source-->channel-->sink 的三层架构(参见最上面的 图一),类似生成者和消费者的架构,他们之间通过queue(channel)传输,解耦。
Source:完成对日志数据的收集,分成 transtion 和 event 打入到channel之中。
Channel:主要提供一个队列的功能,对source提供中的数据进行简单的缓存。
Sink:取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器。
对现有程序改动最小的使用方式是使用是直接读取程序原来记录的日志文件,基本可以实现无缝接入,不需要对现有程序进行任何改动
一、Flume下载安装
1、官网下载地址: http://flume.apache.org/download.html
下载后解压到指定目录,例如 /usr/local/flume
# tar -zxvf apache-flume-1.8.0-bin.tar.gz ; mv apache-flume-1.8.0-bin /usr/local/flume
2、配置环境变量
Java运行时环境一定要匹配(譬如flume1.8.0,使用jdk 1.8或更高版本)
# vim /etc/profile
export FLUME_HOME=/usr/local/flume
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=.:$PATH:$FLUME_HOME/bin
# vim flume-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8.0_171
3、验证是否安装成功:/usr/local/flume/bin/flume-ng version 出现以下提示说明安装成功。
Flume 1.6.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: 2561a23240a71ba20bf288c7c2cda88f443c2080
Compiled by hshreedharan on Mon May 11 11:15:44 PDT 2015
From source with checksum b29e416802ce9ece3269d34233baf43f
二、配置Flume
1、vim flume-house-log.properties
agenthouse.sources=sourcehouse
agenthouse.channels=chanelhouse
agenthouse.sinks=channels=sinkhouse agenthouse.sources.sourcehouse.channels=channelhouse
agenthouse.sources.sourcehouse.type=avro
agenthouse.sources.sourcehouse.bind=0.0.0.0
agenthouse.sources.sourcehouse.port= agenthouse.channels.channelhouse.type=memory
agenthouse.channels.channelhouse.capacity=
agenthouse.channels.channelhouse.transactionCapactiy= agenthouse.sinks.sinkhouse.channel=channelhouse
agenthouse.sinks.sinkhouse.type=FILE_ROLL
agenthouse.sinks.sinkhouse.sink.rollInterval=
agenthouse.sinks.sinkhouse.sink.directory=/data/logs/flume-out
2、vim flume-house-hdfs.properties
agenthousehdfs.sources=sourcehousehdfs
agenthousehdfs.sinks=sinkhousehdfs
agenthousehdfs.channels=channelhousehdfs agenthousehdfs.sources.sourcehousehdfs.type=spooldir
agenthousehdfs.sources.sourcehousehdfs.channels=channelhousehdfs
agenthousehdfs.sources.sourcehousehdfs.spoolDir=/data/logs/spool/house
agenthousehdfs.sources.sourcehousehdfs.fileHeader=true agenthousehdfs.channels.channelhousehdfs.type=memory
agenthousehdfs.channels.channelhousehdfs.capacity=
agenthousehdfs.channels.channelhousehdfs.transactionCapactiy= agenthousehdfs.sinks.sinkhousehdfs.type=hdfs
agenthousehdfs.sinks.sinkhousehdfs.hdfs.writeFormat=Text
agenthousehdfs.sinks.sinkhousehdfs.hdfs.fileType=DataStream
agenthousehdfs.sinks.sinkhousehdfs.channel=channelhousehdfs
agenthousehdfs.sinks.sinkhousehdfs.hdfs.useLocalTimeStamp=true
agenthousehdfs.sinks.sinkhousehdfs.hdfs.path=hdfs://dataMaster30:10001/logs/house/%Y/%m/%d/
agenthousehdfs.sinks.sinkhousehdfs.hdfs.filePrefix=house
agenthousehdfs.sinks.sinkhousehdfs.hdfs.rollInterval=
agenthousehdfs.sinks.sinkhousehdfs.hdfs.rollSize=
agenthousehdfs.sinks.sinkhousehdfs.hdfs.rollCount=
agenthousehdfs.sinks.sinkhousehdfs.hdfs.idleTimeout=
3、启动flume
# cd /usr/local/flume && nohup bin/flume-ng agent -n agenthouse -c conf -f conf/flume-house-log.properties &
# cd /usr/local/flume && nohup bin/flume-ng agent -n agenthousehdfs -c conf -f conf/flume-house-hdfs.properties &
4、设置开机自启动
vim /etc/rc.local
su - hadoop -c "/usr/local/hadoop/sbin/start-all.sh"
su - hadoop -c "/usr/local/spark/sbin/start-all.sh"
su - hadoop -c "cd /usr/local/flume && nohup bin/flume-ng agent -n agenthouse -c conf -f conf/flume-house-log.properties &"
su - hadoop -c "cd /usr/local/flume && nohup bin/flume-ng agent -n agenthousehdfs -c conf -f conf/flume-house-hdfs.properties &"
单节点Flume配置(官网实例):
# example.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1 # Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = # Describe the sink
a1.sinks.k1.type = logger # Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity =
a1.channels.c1.transactionCapacity = # Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
Channel参数解释:
capacity:默认该通道中最大的可以存储的event数量
trasactionCapacity:每次最大可以从source中拿到或者送到sink中的event数量
keep-alive:event添加到通道中或者移出的允许时间
在启动Flume之前,先根据实际情况对JVM进行一下合理分配
# vim bin/flume-ng
JAVA_OPTS="-Xmx2048m"
然后我们就可以启动 Flume agent 了:
bin/flume-ng agent -c conf -f example.conf -n a1 -Dflume.root.logger=INFO,console
PS:-Dflume.root.logger=INFO,console 仅为 debug 使用,请勿生产环境生搬硬套,否则大量的日志会返回到终端。。。
-c /--conf 后跟配置目录,-f /--conf-file 后跟具体的配置文件,-n /--name 指定agent的名称
-c (--conf): flume自身所需的conf文件路径
-f (--conf-file) :自定义的flume配置文件,也就是采集方案文件
-n (--name) : 自定义的flume配置文件中agent的name
然后我们再开一个 shell 终端窗口,创建指定测试文件:
# echo "hello world" > bin/log.002015-05-08 13:58:51,709 (New I/O worker #1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.handleUpstream(NettyServer.java:171)] [id: 0x9396f72c, /127.0.0.1:49978 => /127.0.0.1:44444] BOUND: /127.0.0.1:44444
2015-05-08 13:58:51,709 (New I/O worker #1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.handleUpstream(NettyServer.java:171)] [id: 0x9396f72c, /127.0.0.1:49978 => /127.0.0.1:44444] CONNECTED: /127.0.0.1:49978
2015-05-08 13:58:52,226 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:70)] Event: { headers:{} body: 68 65 6C 6C 6F 20 77 6F 72 6C 64 hello world }
另外有一点需要强调的是,flume-ng提供了一种特殊的启动方式(不同于agent),那就是client启动。cilent是一个特殊的agent, 他的source是文件,channel是内存,sink是arvo。实际上是为了方便大家用,直接来传递文件的。
参考文档:http://www.aboutyun.com/thread-11972-1-1.html
线上运行的时单行日志超7M时会导致Flume异常,导致无法正常提供服务
Caused by: com.google.protobuf.InvalidProtocolBufferException: Protocol message was too large. May be malicious. Use CodedInputStream.setSizeLimit() to increase the size limit.
在flume的conf文件夹下的 log2kafka.conf 加上 agent1.sinks.sink1.producer.max.request.size = 5271988 即可。
Flume NG简介及配置的更多相关文章
- Flume NG 简介及配置实战
Flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...
- 【转】Flume(NG)架构设计要点及配置实践
Flume(NG)架构设计要点及配置实践 Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Fl ...
- Flume NG 配置详解(转)
原文链接:[转]Flume NG 配置详解 (说明,名词对应解释 源-Source,接收器-Sink,通道-Channel) 配置 设置代理 Flume代理配置存储在本地配置文件.这是一个文本文件格式 ...
- Flume NG源代码分析(二)支持执行时动态改动配置的配置模块
在上一篇中讲了Flume NG配置模块主要的接口的类,PropertiesConfigurationProvider提供了基于properties配置文件的静态配置的能力,这篇细说一下PollingP ...
- FLUME NG的基本架构
Flume简介 Flume 是一个cloudera提供的 高可用高可靠,分布式的海量日志收集聚合传输系统.原名是 Flume OG (original generation),但随着 FLume 功能 ...
- Flume NG Getting Started(Flume NG 新手入门指南)
Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...
- 高可用Hadoop平台-Flume NG实战图解篇
1.概述 今天补充一篇关于Flume的博客,前面在讲解高可用的Hadoop平台的时候遗漏了这篇,本篇博客为大家讲述以下内容: Flume NG简述 单点Flume NG搭建.运行 高可用Flume N ...
- flume ng系列之——flume安装
flume版本:1.5.0 1.下载安装包: http://www.apache.org/dyn/closer.cgi/flume/1.5.0/apache-flume-1.5.0-bin.tar.g ...
- Flume环境部署和配置详解及案例大全
flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(比如文本.HDF ...
随机推荐
- C# button 去边框
Button属性里找到FlatStyle属性:Flat FlatAppearance BorderSize:0;
- Java设计模式(十一) 享元模式
原创文章,同步发自作者个人博客 http://www.jasongj.com/design_pattern/flyweight/.转载请注明出处 享元模式介绍 享元模式适用场景 面向对象技术可以很好的 ...
- css固定姓名显示长度,排列更整齐
white-space: nowrap 不换形 overflow: hidden 隐藏长度超出部分 text-overflow:ellipsis 文字长度超出用省略号代替 <p style=& ...
- maven项目修改java编译版本的方式
背景 使用 maven 3.x 安装到本地后,创建的项目一般都是基于JDK1.5版本.而目前大多数的项目已经升级到1.6或以上,尤其是Servlet3.0 已经要求Java6或以上版本的环境,往往需要 ...
- Yii2.0中文开发向导——Yii2中多表关联查询(join、joinwith)
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
- 解决Selenium Webdriver执行测试时,每个测试方法都打开一个浏览器窗口的问题
虽然把WebDriver定义为一个静态变量了,但是每次执行测试都要打开多个窗口,挺浪费时间的. 找了很多中方法,比如使用setUpClass, BeforeSuite都没有完全解决问题.后来无意间发现 ...
- 【C】 01 - 再学C语言
“C语言还用再学吗?嵌入式工程师可是每天都在用它,大家早就烂熟于心,脱离语言这个层面了”.这样说不无道理,这门古老的语言以其简单的语法.自由的形式的而著称.使用C完成工作并不会造成太大困扰,所以很少有 ...
- LeetCode "Russian Doll Envelopes"
An intuitive DP - should be 'medium'. class Solution { public: int maxEnvelopes(vector<pair<in ...
- HAProxy安装配置详解
简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要 ...
- 特效合集(原生JS代码)适合初学者
1.返回顶部(完全兼容各个浏览器,不含美化) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" & ...