Flume · 大数据世界的“超级水管工”
Flume 核心架构 (Agent内部)
生活比喻:智能快递分拣中心
把 Flume 想象成快递物流系统:
Source= 收货窗口,从各个网站服务器接收日志“包裹”。
Channel= 自动分拣流水线+暂存区,保证包裹不丢失。
Sink= 送货卡车,把包裹送到HDFS/Kafka大数据仓库。
如果没有 Flume:每台服务器自己写脚本上传,网络故障会丢数据,管理混乱。
有了 Flume:高可靠事务机制 + 各种现成组件,日志实时、安全送达,而且支持负载均衡+故障转移。
Source
“水管进水口”,负责从各种数据源收集数据:监控日志文件、监听网络端口、读取Kafka等。常用的有:Exec Source (tail -F)、SpoolDir (自动读目录)、Avro Source。
Channel
“蓄水池 + 可靠队列”,Source 写入 Channel,Sink 从 Channel 取数据。可选 Memory Channel (快但易失)、File Channel (磁盘持久化,安全)、Kafka Channel (基于消息队列)。
Sink
“出水口”,把数据写到最终目的地:HDFS、HBase、Kafka、Elasticsearch、Hive 等。支持批量写入,提高性能。例如 HDFS Sink 自动按时间或大小滚动文件。
拦截器 Interceptor
在 Source 和 Channel 之间做“实时加工”:添加时间戳/主机名、过滤掉DEBUG日志、正则替换、分流等。让数据进入通道前就变“干净”。
Flume vs 其他日志采集工具 (入门版对比)
Flume
- 与Hadoop/HBase 天生一对
- 事务机制+持久化,不丢数据
- 支持拦截器灵活处理
- Java栈,适合大数据平台
Logstash (ELK)
- 插件丰富,适合搜索/可视化
- 对HDFS支持较弱(需插件)
- 资源占用稍高
Filebeat
- 轻量级,Go语言
- 资源占用极少
- 简单场景,保证程度中等
Flume配置:Source、Channel、Sink
实验目的
1.了解Flume的多种Source、Channel、Sink组合配置,实现多种需求
2.了解Flume的执行原理以及流程
实验原理
Flume的Agent主要是由三个重要的组件组成:分别为Source、Channel、Sink。
(1)Source:完成对日志数据的收集,分成transtion和event导入到Channel之中。
(2)Channel:主要提供一个队列的功能,对Source提供的数据进行简单的缓存。
(3)Sink:取出Channel中的数据,相应的存储到文件系统,数据库,或者提交到远程服务器。
Source、Channel、Sink的组合形式举例:

Source的类型主要有:Exec、Avro、Netcat、Spooldir、 Http 、Syslogtcp 、Seq、Thrift等。

Channel的类型主要有File、 Memory 、JDBC等。

Sink的类型主要有:Null、HDFS、 HBase、 Hive、Thrift、 Avro、Logger等。

实验环境
Linux Ubuntu 16.04
jdk-7u75-linux-x64
hadoop-2.6.0-cdh5.4.5
flume-ng-1.5.0-cdh5.4.5
zookeeper-3.4.5-cdh5.4.5
实验内容
下面我们令Source为exec类型,搭配Channel的memory或file类型,Sink的logger或hdfs类型进行Flume配置实验。

实验步骤
1. 检查Hadoop相关进程,是否已经启动。若未启动,切换到/apps/hadoop/sbin目录下,启动Hadoop。
jps
cd /apps/hadoop/sbin
./start-all.sh
2. 切换到/data/flume2目录下,如不存在需提前创建flume2文件夹,使用wget命令,在此目录下下载http://192.168.1.105:60001/allfiles/flume2中的文件。
mkdir /data/flume2
cd /data/flume2
wget http://192.168.1.105:60001/allfiles/flume2/goods
wget http://192.168.1.105:60001/allfiles/flume2/exec_mem_logger.conf
wget http://192.168.1.105:60001/allfiles/flume2/exec_mem_hdfs.conf
wget http://192.168.1.105:60001/allfiles/flume2/exec_file_hdfs.conf
wget http://192.168.1.105:60001/allfiles/flume2/syslog_mem_logger.conf
3.实验场景1:source:exec,channel:memory,sink:logger,数据是/data/flume2/目录下的goods文件。
场景1是最简单的一个Flume配置,它的结构是由以下几部分组成:首先定义各个组件,其次配置Source的类型为exec,并定义了命令command为tail -n 20 /data/flume2/goods(查看/data/flume2目录下的goods文件里的倒数20行记录),然后配置Channel的类型为memory,Sink的类型为logger,最后将各个组件关联起来(设置Source的Channel为ch,Sink的Channel也为ch)。
切换到/apps/flume/conf目录下,使用vim编辑conf文件,名为:exec_mem_logger.conf。
cd /apps/flume/conf
vim exec_mem_logger.conf
将以下内容写入exec_mem_logger.conf文件中。
#定义各个组件
agent1.sources = src
agent1.channels = ch
agent1.sinks = des
#配置source
agent1.sources.src.type = exec
agent1.sources.src.command = tail -n 20 /data/flume2/goods
#配置channel
agent1.channels.ch.type = memory
#配置sink
agent1.sinks.des.type = logger
##下面是把上面设置的组件关联起来(把点用线连起来)
agent1.sources.src.channels = ch
agent1.sinks.des.channel = ch
启动flume命令:
flume-ng agent -c /conf -f /apps/flume/conf/exec_mem_logger.conf -n agent1 -Dflume.root.logger=DEBUG,console
参数说明:# source:exec、channel:memory、 sink:logger
-c 配置文件存放的目录
-f 所使用的配置文件路径
-n agent的名称
开启flume后,查看输出效果

按ctrl+c停止flume。
更多推荐
所有评论(0)