flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
flume可以采集文件,socket数据包、文件、文件夹、kafka等各种形式源数据,有可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中。
一般的采集需求。通过对flume的简单配置即可实现flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景。
flume分布式系统中最核心的角色是agent,flume采集系统就是由一个个agent所连接起来形成。每个agent相当于一个数据传递员,Source到Channel到Sink之间传递数据的形式是Event事件;Event事件是一个数据流单元。
Agent内部有三个组件:
a)Source:采集组件,用于跟数据源对接,以获取数据
b)Sink:下沉组件,用于往下一级agent传递数据或者往最终存储系统传递数据
c)Channel:传输通道组件,用于从source将数据传递到sink(其实可以理解为一个缓冲区,防止数据溢出导致宕机)
3.1、简单结构
a.下载flume
Flume官网,找到download即可下载
b.配置Flume
为什么需要配置Flume的文件呢?
因为各个机器都不相同,配置也就不相同。其中,还有将Flume的log输出到控制台,输出到hdfs,输出到kafka,输出到物理文件和mongodb等等等… 这些都需要配置进行,Flume运行时会将这些配置进行解析,以达到简单配置即可使用的目的。大大降低了软件的使用难度和部署、维护难度。
首先,我们当然要解压flume文件包,这里我已经准备好了四台虚拟机(其实学flume一台虚拟机就够用了)
解压完之后的样子;当然这是我已经改过名字的了,名字很简单,mv空格加上本来的名字空格再加上想要改的名字就完成了。
mv apache-flume-1.6.0-bin apache-flume-1.6.0
随后,我们便要进入Flume文件夹,对于配置文件进行编辑了。当然和往常一样,在进行编辑之前,我们需要将原文件进行保存备份(保持这个好习惯,以后会少掉头发)。
cd flume-1.6.0/conf
scp flume-conf.properties.template flume-conf.properties
这样在conf目录就有flume-conf.properties这个文件了,也是我们接下来需要配置的这个文件,启动Flume的时候会使用到。
接着,我们将官方的配置写入其中,官方配置如下:
# example.conf: A single-node Flume configuration
# Name the components on this agent
# The name of the agent is defined as a1.
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
# 内存模式
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
# 传输参数设置。
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
# The sources->channels->sinks config , the channels and the channel name must be defined.
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
没有接触过Linux的小伙伴,可以通过vim 命令进行操作Esc->:x
,或者Esc->:wq进行保存。(不懂的,可以搜索下vim命令,反正我们的目的是在里面创建一个叫做“flume-conf.properties“的文件,并且将上述的配置内容写入即可。)
c. Flume启动命令及其解析
配置好一切之后,就可以启动Flume了。启动命令是在flume的bin目录下(当然在以后学的技术中启动命令大多都是在bin目录下的)
./flume-ng agent -C conf -f …/flume-1.6.0/conf/flume-conf.properties -n a1 -Dflume.root.logger=INFO,console
如果看到如下的输出,就代表启动成功啦。
这边可以解析下启动命令:
./flume-ng agent -C conf -f …/flume-1.6.0/conf/flume-conf.properties -n a1 -Dflume.root.logger=INFO,console
d、输出 和 测试
为了测试,我们重新打开一个命令框,输入命令”telnet localhost 44444”,预计得到下述结果:
当然下面测试用的是telnet插件如果你的虚拟机里没有安装过
当前命令窗:
localhost:~ xxx$ telnet localhost 44444
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
hello
OK
Flume命令窗:
2017-01-09 00:56:54,946 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 68 65 6C 6C 6F 0D hello. }
这边便是监控到了,在另一个页面输入到44444端口到hello信息。