Flume概述
- Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
- Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到HDFS、hbase、hive、kafka等众多外部存储系统中
- 一般的采集需求,通过对flume的简单配置即可实现
- Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景
运行机制
Flume是一个分布式系统,每个节点叫做一个Agent。运行机制如下图所示:
- Source用于对接数据源
- Sink用于对接传输目的地
- Channel可以作为一个缓存。
多个Agent之间可以串联。示意图如下:
Flume的安装
安装包的下载地址为:http://www-us.apache.org/dist/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz
解压以后即可
使用示例
接下来我们利用Flume来实现一个从Socket中采集数据,然后保存到日志中的案例。
配置采集方案
在Flume的conf目录下面编写一个netcat-logger.conf文件,内容如下:
# Name the components on this agent
#给那三个组件取个名字
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
#类型, 从网络端口接收数据,在本机启动, 所以type=spoolDir采集目录源,目录里有就采
a1.sources.r1.type = netcat
a1.sources.r1.bind = amaster
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
#下沉的时候是一批一批的, 下沉的时候是一个个eventChannel参数解释:
#capacity:默认该通道中最大的可以存储的event数量
#trasactionCapacity:每次最大可以从source中拿到或者送到sink中的event数量
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
使用下面的命令启动Flume:
bin/flume-ng agent --conf conf --conf-file conf/netcat-logger.conf --name a1 -Dflume.root.logger=INFO,console
传入数据
在另一台机器上执行下面的命令:
root@anode1:~# telnet amaster 44444
Trying 192.168.37.143...
Connected to amaster.mrbcy.tech.
Escape character is '^]'.
Hello world!
OK
则Flume输出:
2017-04-03 14:01:46,839 (SinkRunner-PollingRunner-DefaultSinkProcessor) [INFO - org.apache.flume.sink.LoggerSink.process(LoggerSink.java:95)] Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D Hello world!. }