Flume快速入门
1.Flume简介
ApacheFlume是一个分布式的、可靠的、可用的系统,用于高效地收集、聚合和将大量不同来源的日志数据移动到集中的数据存储区。 Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,Flume可用于传输大量事件数据,包括但不限于网络流量数据、社交媒体生成的数据、电子邮件和几乎所有可能的数据源。 官网原文如下: Apache Flume is a distributed, reliable, and available system for efficiently collecting, aggregating and moving large amounts of log data from many different sources to a centralized data store. The use of Apache Flume is not only restricted to log data aggregation. Since data sources are customizable, Flume can be used to transport massive quantities of event data including but not limited to network traffic data, social-media-generated data, email messages and pretty much any data source possible.
2. 简单看看Flume的架构
重途中可一看到Flume它的主要组成部分有Source、Channel、Sink, 其中还有一个Agent这是一个JVM进程它包含了Source、Channel、Sink这三个重要组件。并且Flume在这三个组件间传递数据的基本单位是事件(Event)。
Source: 其主要是用于接收数据到Flume agent
Channel:Source和Sink之间的一个缓冲区, Source向Channel中添加数据,Sink到Channel中获取数据
Sink: 主要用于将数据存储到我们的存储系统,或则另外一个Flume Agent
3.Flume安装
下载地址
[Flume下载] http://archive.apache.org/dist/flume/
注意: 以下步骤需要Java基础环境, 若虚拟机没有安装Jdk请自行安装
3.1 具体安装步骤
将下载的apache-flume-1.7.0-bin.tar.gz包上传至Linux服务器中, 并进行解压
tar -zxf apache-flume-1.7.0-bin.tar.gz -C /root/app/Flume
将文件夹重命名为flume
mv apache-flume-1.7.0-bin flume解压之后进入到flume,执行以下代码,以此创建自己的环境配置文件
cp conf/flume-env.sh.template conf/flume-env.sh编辑文件修改里面的JAVA_HOME设置为你机器的JAVA_HOME
export JAVA_HOME=/root/app/jdk8到这里基本上Flume的安装完成了, 接下来实现一个一个简单的demo
4.实现一个简单的demo
4.1 需求
我们需要实现实时监控一个文件的内容变化, 并将变化的内容打印到控制台显示。
4.2 实现
4.2.1 编写一个flume配置文件
首先创建一个file-logger.conf文件在/flume/conf文件下,我们重前面的架构分析知道,我们需要一个Source来获取文件的变化,此处采用的是exec source;并且需要一个Sink来向控制台打印文件变化的内容, 此处采用的是logger source; 最后一个组件就是channel,此处channel只是一个缓冲区直接使用内存作为缓冲区。
exec source: 就相当于执行一条命令来获取数据,此处我们使用的tail命令来获取文件尾部的变化数据
logger: 就相当于我们平时使用的日志一样
#此处相当于定义变量, 需要source、sink、channel各一个
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#source的具体定义
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /root/hello.log
#sink的具体定义
a1.sinks.k1.type = logger
#channel定义
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.sources.r1.channels = c1
#注意此处channel没有s,具体原因后续分析
a1.sinks.k1.channel = c1
4.2.2测试运行
根据你当前的目录执行一下命令:
./bin/flume-ng agent -n a1 -c conf/ -f conf/file-logger.conf -Dflume.root.logger=INFO,console
重新打开一个窗口通过echo 想文件中追加内容
echo "hello world" >> /root/hello.log
若启动Flume的控制台打印了Event类似日志说明测试成功