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 ...
随机推荐
- spring整合hibernate配置文件
Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibernate.cfg.xml的配置 spring对hibernate配置文件hibernate.cfg.x ...
- Qt资源下载、安装、配置
(一)资源下载: 硕士毕业论文要做一个仿真平台,在linux环境下利用Qt开发. 自己有一定的c/c++基础,Qt是零基础接触.所以,经过一番查找,发现youtube一个外国友人Bryan从零开始教Q ...
- Spring概况
1. Spring是什么 Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的,但现在已经不止于企业应用. 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. ——从大小与开 ...
- 几个排序算法的python实现
几个排序算法 几个排序算法 几个排序算法 冒泡排序 选择排序 插入排序 快速排序 quick sort 冒泡排序 冒泡排序是比较简单的排序方法,它的思路是重复的走过要排序的序列,一次比较两个元 ...
- 理解Linux系统负荷
一.查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在苹果公司的Mac电脑上也适用 ...
- pt-online-schema-change 实例
pt-pmp (http://www.cnblogs.com/ivictor/p/6012183.html) pt-online-schema-change (http://blog.csdn.net ...
- elasticsearch【更新】操作
基于上一篇博文基础上,进行es的操作,document的新增比较简单,就不说了,这里主要说说更新操作. 更新操作,有两大类,一个是Replace,一个是Update,就是说一个是替换,一个是更新. 替 ...
- JavaScript引用方法说明
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 在sql语句中添加php变量
在sql语句中使用{}将php变量扩起来,php就会解析{}中的内容. //案件统计 function getCount($dsql,$tableName,$year){ //诉讼案件总数,总金额 $ ...
- VG vs SS WE vs IM [20160815]
上单:慎,纳尔,艾克,艾瑞莉娅,普朗克 中单:弗拉基米尔,玛尔扎哈,卡尔玛,丽桑卓,索尔,崔斯特,辛德拉 打野:雷克赛,奈德丽,古拉加斯,伊莉丝,赫卡里姆,玛尔扎哈 下路:艾希,克格莫,烬,希维尔,布 ...