Flume配置参数详解
Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Flume架构
对Flume进行配置需要先清楚Flume的架构
Agent
Flume以agent为最小的独立运行单位,一个Agent包含多个source、channel、sink和其他组件
flume提供多种source供用户进行选择,尽可能多的满足大部分日志采集的需求,常用的source的类型包括avro、exec、netcat、spooling-directory和syslog等。具体的使用范围和配置方法详见source.
flume中的channel不如source和sink那么重要,但却是不可忽视的组成部分。常用的channel为memory-channel,同时也有其他类型的channel,如JDBC、file-channel、custom-channel等,详情见channel.
flume的sink也有很多种,常用的包括avro、logger、HDFS、Hbase以及file-roll等,除此之外还有其他类型的sink,如thrift、IRC、custom等。具体的使用范围和使用方法详见sink.
Sources
Flume 中常用的 Source 有NetCat,Avro,Exec,Spooling Directory,也可以根据业务需要自定义Source,具体如下
avro source
avro可以监听和收集指定端口的日志,使用avro的source需要说明被监听的主机ip和端口号
例子:
agent1.sources = r1
#描述source
agent1.sources.r1.type = avro (类型为avro source)
agent1.sources.r1.bind = 0.0.0.0 (指定监听的主机ip.本机是0.0.0.0.)
agent1.sources.r1.port = 16667 (指定监听的端口号)
exec source
可以通过指定的操作对日志进行读取,使用exec时需要指定shell命令,对日志进行读取
例子:
agent1.source = r2
#描述source
agent1.sources.r2.type = exec
agent1.sources.r2.command =tail -F /root/flume/log/event.txt (监听的文件的路径)
Spooling-directory source
可以读取文件夹里的日志,使用时指定一个文件夹,可以读取该文件夹中的所有文件,当出现新文件时
会读取该文件并获取数据.需要注意的是该文件夹中的文件在读取过程中不能修改,同时文件名也不能修改。
1、spoolDirectory是监控目录,不能为空,没有默认值。这个source不具有监控子目录的功能,不能递归监控。
2、completedSuffix是文件读取完毕后给完成文件添加的标记后缀,默认是".COMPLETED";
3、deletePolicy这是是否删除读取完毕的文件,默认是"never",就是不删除,目前只支持"never"和“IMMEDIATE”;
4、fileHeader是否在event的Header中添加文件名,boolean类型, 默认false
5、fileHeaderKey这是event的Header中的key,value是文件名
6、batchSize这个是一次处理的记录数,默认是100;
7、inputCharset编码方式,默认是"UTF-8";
8、ignorePattern忽略符合条件的文件名
9、trackerDirPath被处理文件元数据的存储目录,默认".flumespool"
10、deserializerType将文件中的数据序列化成event的方式,默认是“LINE”
---org.apache.flume.serialization.LineDeserializer
11、deserializerContext这个主要用在Deserializer中设置编码方式outputCharset和
文件每行最大长度maxLineLength。
例子:
agent1.sources = r3
#描述source
agent1.sources.r3.type = spooldir
agent1.sources.r3.spoolDir = /root/flume/log (监听的文件目录)
agent1.sources.r3.fileHeader = true
NetCat source
用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。
例子:
agent1.sources = r4
#描述source
agent1.sources.r4.type = netcat (source类型)
agent1.sources.r4.bind = 0.0.0.0 (指定绑定的ip或主机名)
agent1.sources.r4.port = 16668 (指定绑定的端口号)
HTTP source
接受HTTP的GET和POST请求作为Flume的事件,其中GET方式应该只用于试验。
type 类型,必须为"HTTP"
port– 监听的端口
bind 0.0.0.0 监听的主机名或ip
handler org.apache.flume.source.http.JSONHandler处理器类,需要实现HTTPSourceHandler接口
handler.* – 处理器的配置参数
Selector.type
selector.*
interceptors –
interceptors.*
enableSSL false 是否开启SSL,如果需要设置为true。注意,HTTP不支持SSLv3。
excludeProtocols SSLv3 空格分隔的要排除的SSL/TLS协议。SSLv3总是被排除的。
keystore 密钥库文件所在位置
keystorePassword Keystore 密钥库密码
例子:
agent1.sources.r1.type = http
agent1.sources.r1.port = 66666
channel
使用内存memory存储
Memory Channel是使用内存来存储Event,使用内存的意味着数据传输速率会很快,但是当Agent挂掉后,
存储在Channel中的数据将会丢失。
例子:
agent1.channels = c1
agent1.channels.c1.type = memory
agent1.channels.c1.capacity = 100000
agent1.channels.c1.transactionCapacity = 100000
使用文件file存储
File Channel使用磁盘来存储Event,速率相对于Memory Channel较慢,但数据不会丢失。
例子:
agent1.channels = c1
agent1.channels.c1.type = file
agent1.channels.c1.capacity = 100000
agent1.channels.c1.transactionCapacity = 100000
sink
Flume常用Sinks有Log Sink,HDFS Sink,Avro Sink,Kafka Sink,当然也可以自定义Sink
logger sink
logger sink:将收集到的日志写到flume的log中
例子:
agent1.sinks = k1
agent2.sinks.k1.type = logger
avro sink
avro sink:可以将接受到的日志发送到指定端口,供级联agent的下一跳收集和接受日志,使用时需要指定目的ip和端口
例子:
agent1.sinks=k1
agent1.sinks.k2.type = avro
agent1.sinks.k2.channel = c2
agent1.sinks.k2.hostname = hadoop03 (指定的主机名或ip)
agent1.sinks.k2.port = 16666 (指定的端口号)
file_roll sink
file_roll sink:可以将一定时间内收集到的日志写到一个指定的文件中,具体过程为用户指定一个文件夹和一个周期,然后启动agent,这时该文件夹会产生一个文件将该周期内收集到的日志全部写进该文件内,直到下一个周期再次产生一个新文件继续写入,以此类推,周而复始。
例子:
agent1.sinks=k1
agent1.sinks.k1.type = file_roll
agent1.sinks.k1.channel = c1
agent1.sinks.k1.sink.directory=/root/flumelog (指定文件所在目录的路径)
hdfs sink
hdfs sink:将收集到的日志写入到新创建的文件中保存起来,存储路径为分布式的文件系统hdfs的路径,同时hdfs创建新文件的周期可以是时间,也可以是文件的大小,还可以是采集日志的条数
配置参数说明:
例子:
agent1.sinks = k1
agent1.sinks.k1.type = hbase
agent1.sinks.k1.table = flume
agent1.sinks.k1.columnFamily=fl_conf
agent1.sinks.k1.serializer=org.apache.flume.sink.hbase.RegexHbaseEventSerializer
Kafka Sink
传输数据到Kafka中,需要注意Flume版本和Kafka版本的兼容性