文档章节

Flume

散关清渭
 散关清渭
发布于 2015/04/26 13:25
字数 1194
阅读 293
收藏 1

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

数据(日志信息)分布在N台机器上,想要把它们汇聚在一起来处理。

Flume支持在日志系统中定制各类数据发送方,用于收集数据;

同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。


Flume提供了从console(控制台)、RPC(Thrift-RPC)、text(文件)、tail(UNIX tail)、syslog(syslog日志系统,支持TCP和UDP等2种模式),exec(命令执行)等数据源上收集数据的能力。

Flume OG(original generation)和 Flume NG(next generation)是Flume的两个版本 NG在OG的基础之上,进行了里程碑式的改动:重构核心组件、核心配置以及代码架构。

Flume 的核心是把数据从数据源收集过来,再送到目的地。

为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。 

Flume 传输的数据的基本单位是 Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。

Event 从 Source,流向 Channel,再到 Sink,本身为一个 byte 数组,并可携带 headers 信息。

Event 代表着一个数据流的最小完整单元,从外部数据源来,向外部的目的地去。 

Flume 运行的核心是 Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是 SourceChannel、Sink。

Source 可以接收外部源发送过来的数据。不同的 Source,可以接受不同的数据格式。比如有目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。 

Channel 是一个存储地,接收 Source 的输出,直到有 Sink 消费掉 Channel 中的数据。

Channel 中的数据直到进入到下一个Channel中或者进入终端才会被删除。

Sink 写入失败后,可以自动重启,不会造成数据丢失,因此很可靠。 

Sink 会消费 Channel 中的数据,然后送给外部源或者其他 Source。如数据可以写入到 HDFS 或者 HBase 中。


记录一下Flume中的核心概念:

Agent Agent中包含多个sources和sinks。
Client 生产数据,运行在一个独立的线程。
Source 从Client收集数据,传递给Channel。用来消费传递到该组件的Event。
Sink 从Channel收集数据,将Event传递到Flow Pipeline中的下一个Agent
Channel 中转Event临时存储,保存Source传递过来Event,连接 sources 和 sinks 。
Events 一个数据单元,带有一个可选的消息头。可以是日志记录、 avro 对象等。


Agent是Flume中最小的运行单位,一个Agent中由Source、Sink和Channel三个组件构成。

如下图所示:

Event是Flume中基本数据单位,Event中包含有传输数据及数据头数据包


Flume 命令行参数:

global options:
  --conf,-c <conf>      use configs in <conf> directory
  --classpath,-C <cp>   append to the classpath
  --dryrun,-d           do not actually start Flume, just print the command
  --plugins-path <dirs> colon-separated list of plugins.d directories. See the
                        plugins.d section in the user guide for more details.
                        Default: $FLUME_HOME/plugins.d
  -Dproperty=value      sets a Java system property value
  -Xproperty=value      sets a Java -X option

agent options:
  --conf-file,-f <file> specify a config file (required)
  --name,-n <name>      the name of this agent (required)
  --help,-h             display help text

avro-client options:
  --rpcProps,-P <file>   RPC client properties file with server connection params
  --host,-H <host>       hostname to which events will be sent
  --port,-p <port>       port of the avro source
  --dirname <dir>        directory to stream to avro source
  --filename,-F <file>   text file to stream to avro source (default: std input)
  --headerFile,-R <file> File containing event headers as key/value pairs on each new line
  --help,-h              display help text

  Either --rpcProps or both --host and --port must be specified.


使用flume-ng脚本启动Flume Agent 运行配置文件中指定的source和sink  启动命令类似于:

bin/flume-ng agent -n $agent_name -c conf -f conf/flume-conf.properties.template

配置文件示例:

# example.conf: A single-node Flume configuration

# agent组件名称
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# source 配置
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# sink 配置
a1.sinks.k1.type = logger

# 使用内存中Buffer Event Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# 绑定 source 和 sink 到channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1



参考资料:

[0]  Flume NG:Flume 发展史上的第一次革命

http://www.ibm.com/developerworks/cn/data/library/bd-1404flumerevolution/index.html

[1]  Flume NG 简介及配置实战

http://my.oschina.net/leejun2005/blog/288136#OSC_h1_1



© 著作权归作者所有

共有 人打赏支持
散关清渭
粉丝 24
博文 238
码字总数 166498
作品 0
东城
程序员
flume 1.7 源码导入eclipse windows

安装maven,设置MAVEN_HOME等配置 下载flume源码 eclipse-oxygen,设置eclipse 使用外部maven,并配置settings.xml 遇到问题: 如果顺利,已将所需jar都下载下来了。 导入后遇到如下问题 fl...

柯里昂
2017/10/31
0
0
Cloudera Flume简介

Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。 Flume是一个分布式...

Javafans
2012/03/12
0
0
Flume日志收集分层架构应用实践

Flume作为一个日志收集工具,非常轻量级,基于一个个Flume Agent,能够构建一个很复杂很强大的日志收集系统,它的灵活性和优势,主要体现在如下几点: 1)模块化设计:在其Flume Agent内部可...

workming
06/29
0
0
Flume pull方式和push方式整合

Pull方式 Flume Agent 编写 启动Flume Push方式 Flume Agent的编写 启动flume ==注意在本地和服务器上切换的时候需要修改flume的sink的hostname== 本地测试总结 启动SparkStreaming作业 启动...

Meet相识_bfa5
06/20
0
0
Flume学习系列(一)----总体介绍

前言: 本文是flume学习系列的开篇,主要介绍了flume的各种组件及相关配置。但是本篇文章并不打算从环境搭建开始,因为比较简单而且网上资料也很详尽: So,研读了一下官方文档,特此把Flume...

小北觅
08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux使用ntfs-3g操作ntfs格式硬盘

Linux内核目前只支持对微软NTFS文件系统的读取。 NTFS-3G 是微软 NTFS 文件系统的一个开源实现,同时支持读和写。NTFS-3G 开发者使用 FUSE 文件系统来辅助开发,同时对可移植性有益。 安装 ...

linuxprobe16
今天
1
0
kubeadm部署kubernetes集群

一、环境要求 这里使用RHEL7.5 master、etcd:192.168.10.101,主机名:master node1:192.168.10.103,主机名:node1 node2:192.168.10.104,主机名:node2 所有机子能基于主机名通信,编辑...

人在艹木中
今天
10
0
Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
3
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
20
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部