1,Flume概述

Flume是Cloudera提供的一款高可用,高可靠的,分布式海量日志采集软件。

Flume的核心是把数据从数据源(source)收集过来,再将收集到的数据送到指定的目的地(sink)。为了保证数据的成功传输,在数据传送到目的地(sink)之前会先将数据缓存下来(channel),在数据真正到达目的地后,再将缓存的数据删除。

2,架构图

flume实现mysql数据采集 flume数据源_hadoop

Agent:Flume的核心角色是Agent,Agent本身是一个JAVA进程他运行在Flume所在的节点。

Source:采集源,数据源负责采集数据

Sink:下沉地,采集数据的目的地,用于想下一级Agent传递数据或者往最终存储系统中存储数据。

Channel:Agent内部的传输通道。用于把数据从Source传输到Sink,传输单位为event。

Event:Event是Flume内部传输的基本单元。Event将传输的数据进行封装,如果是文本文件,通常是一行记录。Event也是事物的基本单位。event从Source流向Channel,再到Sink。本身是一个字节数组。并可携带 headers(头信息)信息。event 代表着一个数据的最,小完整单元,从外部数据源来,向外部的目的地去。
一个完整的Event包括Event headers,Event body,Event 信息。其中Event信息就是Flume采集的日志记录。

3,Flume采集系统结构图。

flume实现mysql数据采集 flume数据源_flume实现mysql数据采集_02


flume实现mysql数据采集 flume数据源_hadoop_03

4,安装部署。

上传安装包到所需要采集数的节点。
然后解压安装
tar -zxvf apache-flume-1.8.0-bin.tar.gz


进入安装目录下的conf目录修改flume-env.sh,添加JAVA_HOME即可

5,入门案例

监听本地44444端口的数据变化。
在Flume安装目录下新建job文件夹,进入此文件夹,
vi netcat-logger.conf 编辑
# 定义这个 agent 中各组件的名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# 描述和配置 source 组件:r1
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# 描述和配置 sink 组件:k1
a1.sinks.k1.type = logger
# 描述和配置 channel 组件,此处使用是内存缓存的方式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# 描述和配置 source channel sink 之间的连接关系
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

启动Flume,在Flume安装目录下输入命令

bin/flume-ng agent -c conf -f job/netcat-logger.conf -n a1 -Dflume.root.logger=INFO,console

-c conf 指定 flume 自身的配置文件所在目录
-f conf/netcat-logger.con 指定我们所描述的采集方案
-n a1 指定我们这个 agent 的名字
测试
Xshell重新开一个窗口
输入 telnet localhost 44444 后输入hello Flume
查看Flume打印数据是否又hello Flume输出。