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 ...
随机推荐
- WampServe修改默认网站目录的方法(转)
1wamp简介 WampServe集成了Apache.MySQL.PHP.phpmyadmin,支持Apache的mod_rewrite,PHP扩展.Apache模块只需要在菜单“开启/关闭”上点点就 ...
- 史上最详细Windows版本搭建安装React Native环境配置 转载,比官网的靠谱亲测可用
史上最详细Windows版本搭建安装React Native环境配置 2016/01/29 | React Native技术文章 | Sky丶清| 95条评论 | 33530 views ...
- bootstrap-11
下拉菜单(基本用法) 在使用Bootstrap框架的下拉菜单时,必须调用Bootstrap框架提供的bootstrap.js文件.当然,如果你使用的是未编译版本,在js文件夹下你能找到一个名为“dro ...
- bs结构socket(udp)通信
以前我所做的基于socket通信都是采用cs结构,现公司有一个项目需要在bs中反控设备,于是研究了一番,现将成果公布,方便以后查阅. 服务端: #region udp int recv; byte[] ...
- 快速开发CSS的利器-LESS
快速开发CSS的利器-LESS? 天下功夫,唯快不破!效率,在项目开发上,这是极其重要的.要做到快.精.准,在人任何时候都不是一件轻松容易的事.但是如果借助一些相应的工具,那就另当别论了!那么要想快速 ...
- Python 爬虫学习 urllib
网页抓取 # -*-coding: utf-8 -*- import urllib url = "http://www.cndzz.com/" html = urllib.urlo ...
- js 日期按年月日加减
<script> function isleapyear(year) { if(parseInt(year)%4==0 && parseInt(year)%100!=0)r ...
- sqlserver开窗函数
从 http://jimshu.blog.51cto.com/3171847/1376637/ 转 开窗函数是在 ISO 标准中定义的.SQL Server 提供排名开窗函数和聚合开窗函数. 在开窗函 ...
- 如何判断一条sql(update,delete)语句是否执行成功
如何判断一条sql(update,delete)语句是否执行成功 catch (SQLException e) { } catch不到错误应该就成功了. ============== ...
- Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据
背景 Python中,想要打开已经存在的excel的xls文件,然后在最后新的一行的数据. 折腾过程 1.找到了参考资料: writing to existing workbook using xlw ...