Flume 核心架构 (Agent内部)

Flume 核心架构

生活比喻:智能快递分拣中心

把 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 数据流拓扑 —— 单Agent/多Agent/汇聚模式

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。

更多推荐