Flume参数配置详解
- source
采集日志数据,将采集到的日志数据传输给channel - channel
一个队列,存储source传递过来的数据 - sink
从channel中获取数据,将数据输出到目标位置(HDFS、HBase、Source) - Event
传输数据的单元,Flume中采集数据并传输的最小单位
Flume数据的传输过程

Sources
Flume 中常用的 Source 有NetCat,Avro,Exec,Spooling Directory,也可以根据业务需要自定义Source,具体如下。
NetCat Source
NetCat Source可以使用TCP和UDP两种协议方式,使用方法基本相同,通过监听指定的IP和端口来传输数据,它会将监听到的每一行数据转化成一个Event写入到Channel中。(红色标记为必须参数)
channels –
type – 类型指定为:netcat
bind – 绑定机器名或IP地址
port – 端口号
max-line-length
| Property Name | Default | Description |
|---|---|---|
channels | – | |
type | – | 类型指定为:netcat |
bind | – | 绑定机器名或IP地址 |
port | – | 端口号 |
| max-line-length | 512 | 一行的最大字节数 |
| ack-every-event | true | 对成功接受的Event返回OK |
| selector.type | replicating | 选择器类型replicating or multiplexing |
| selector.* | 选择器相关参数 | |
| interceptors | – | 拦截器列表,多个以空格分隔 |
| interceptors.* | 拦截器相关参数 |
Spooling Directory Source
通过监控一个文件夹将新增文件内容转换成Event传输数据,特点是不会丢失数据,使用Spooling Directory Source需要注意的两点是,
1)不能对被监控的文件夹下的新增的文件做出任何更改,
2)新增到监控文件夹的文件名称必须是唯一的。
由于是对整个新增文件的监控,Spooling Directory Source的实时性相对较低,不过可以采用对文件高粒度分割达到近似实时。
| Property Name | Default | Description |
|---|---|---|
channels | – | |
type | – | 类型指定:spooldir. |
spoolDir | – | 被监控的文件夹目录 |
| fileSuffix | .COMPLETED | 完成数据传输的文件后缀标志 |
| deletePolicy | never | 删除已经完成数据传输的文件时间:never or immediate |
| fileHeader | false | 是否在header中添加文件的完整路径信息 |
| fileHeaderKey | file | 如果header中添加文件的完整路径信息时key的名称 |
| basenameHeader | false | 是否在header中添加文件的基本名称信息 |
| basenameHeaderKey | basename | 如果header中添加文件的基本名称信息时key的名称 |
| includePattern | ^.*$ | 使用正则来匹配新增文件需要被传输数据的文件 |
| ignorePattern | ^$ | 使用正则来忽略新增的文件 |
| trackerDir | .flumespool | 存储元数据信息目录 |
| consumeOrder | oldest | 文件消费顺序:oldest, youngest and random. |
| maxBackoff | 4000 | 如果channel容量不足,尝试写入的超时时间,如果仍然不能写入,则会抛出ChannelException |
| batchSize | 100 | 批次处理粒度 |
| inputCharset | UTF-8 | 输入码表格式 |
| decodeErrorPolicy | FAIL | 遇到不可解码字符后的处理方式:FAIL,REPLACE,IGNORE |
| selector.type | replicating | 选择器类型:replicating or multiplexing |
| selector.* | 选择器其他参数 | |
| interceptors | – | 拦截器列表,空格分隔 |
| interceptors.* |
Channels
官网提供的Channel有多种类型可供选择,这里介绍Memory Channel和File Channel。
Memory Channel
Memory Channel是使用内存来存储Event,使用内存的意味着数据传输速率会很快,但是当Agent挂掉后,存储在Channel中的数据将会丢失。
| Property Name | Default | Description |
|---|---|---|
type | – | 类型指定为:memory |
| capacity | 100 | 存储在channel中的最大容量 |
| transactionCapacity | 100 | 从一个source中去或者给一个sink,每个事务中最大的事件数 |
| keep-alive | 3 | 对于添加或者删除一个事件的超时的秒钟 |
| byteCapacityBufferPercentage | 20 | 定义缓存百分比 |
| byteCapacity | see description | Channel中允许存储的最大字节总数 |
File Channel
File Channel使用磁盘来存储Event,速率相对于Memory Channel较慢,但数据不会丢失。
| Property Name | Default | Description |
|---|---|---|
type | – | 类型指定:file. |
| checkpointDir | ~/.flume/file-channel/checkpoint | checkpoint目录 |
| useDualCheckpoints | false | 备份checkpoint,为True,backupCheckpointDir必须设置 |
| backupCheckpointDir | – | 备份checkpoint目录 |
| dataDirs | ~/.flume/file-channel/data | 数据存储所在的目录设置 |
| transactionCapacity | 10000 | Event存储最大值 |
| checkpointInterval | 30000 | checkpoint间隔时间 |
| maxFileSize | 2146435071 | 单一日志最大设置字节数 |
| minimumRequiredSpace | 524288000 | 最小的请求闲置空间(以字节为单位) |
| capacity | 1000000 | Channel最大容量 |
| keep-alive | 3 | 一个存放操作的等待时间值(秒) |
| use-log-replay-v1 | false | Expert: 使用老的回复逻辑 |
| use-fast-replay | false | Expert: 回复不需要队列 |
| checkpointOnClose | true |
Sinks
Flume常用Sinks有Log Sink,HDFS Sink,Avro Sink,Kafka Sink,当然也可以自定义Sink。
HDFS Sink
Sink数据到HDFS,目前支持text 和 sequence files两种文件格式,支持压缩,并可以对数据进行分区,分桶存储。
| Name | Default | Description |
|---|---|---|
channel | – | |
type | – | 指定类型:hdfs |
hdfs.path | – | HDFS的路径 hdfs://namenode/flume/webdata/ |
hdfs.fileType | SequenceFile | 文件格式,包括:SequenceFile, DataStream,CompressedStre, 当使用DataStream时候,文件不会被压缩,不需要设置hdfs.codeC; 当使用CompressedStream时候,必须设置一个正确的hdfs.codeC值; |
| hdfs.filePrefix | FlumeData | 保存数据文件的前缀名 |
| hdfs.fileSuffix | – | 保存数据文件的后缀名 |
| hdfs.inUsePrefix | – | 临时写入的文件前缀名 |
| hdfs.inUseSuffix | .tmp | 临时写入的文件后缀名 |
| hdfs.rollInterval | 30 | 间隔多长将临时文件滚动成最终目标文件,单位:秒, 如果设置成0,则表示不根据时间来滚动文件 |
| hdfs.rollSize | 1024 | 当临时文件达到多少(单位:bytes)时,滚动成目标文件, 如果设置成0,则表示不根据临时文件大小来滚动文件 |
| hdfs.rollCount | 10 | 当 events 数据达到该数量时候,将临时文件滚动成目标文件,如果设置成0,则表示不根据events数据来滚动文件 |
| hdfs.idleTimeout | 0 | 当目前被打开的临时文件在该参数指定的时间(秒)内, 没有任何数据写入,则将该临时文件关闭并重命名成目标文件 |
| hdfs.batchSize | 100 | 每个批次刷新到 HDFS 上的 events 数量 |
| hdfs.codeC | – | 文件压缩格式,包括:gzip, bzip2, lzo, lzop, snappy |
| hdfs.maxOpenFiles | 5000 | 最大允许打开的HDFS文件数,当打开的文件数达到该值,最早打开的文件将会被关闭 |
| hdfs.minBlockReplicas | – | HDFS副本数,写入 HDFS 文件块的最小副本数。 该参数会影响文件的滚动配置,一般将该参数配置成1,才可以按照配置正确滚动文件 |
| hdfs.writeFormat | Writable | 写 sequence 文件的格式。包含:Text, Writable(默认) |
| hdfs.callTimeout | 10000 | 执行HDFS操作的超时时间(单位:毫秒) |
| hdfs.threadsPoolSize | 10 | hdfs sink 启动的操作HDFS的线程数 |
| hdfs.rollTimerPoolSize | 1 | hdfs sink 启动的根据时间滚动文件的线程数 |
| hdfs.kerberosPrincipal | – | HDFS安全认证kerberos配置 |
| hdfs.kerberosKeytab | – | HDFS安全认证kerberos配置 |
| hdfs.proxyUser | 代理用户 | |
| hdfs.round | false | 是否启用时间上的”舍弃” |
| hdfs.roundValue | 1 | 时间上进行“舍弃”的值 |
| hdfs.roundUnit | second | 时间上进行”舍弃”的单位,包含:second,minute,hour |
| hdfs.timeZone | Local Time | 时区。 |
| hdfs.useLocalTimeStamp | false | 是否使用当地时间 |
| hdfs.closeTries 0 | Number | hdfs sink 关闭文件的尝试次数;如果设置为1,当一次关闭文件失败后,hdfs sink将不会再次尝试关闭文件, 这个未关闭的文件将会一直留在那,并且是打开状态; 设置为0,当一次关闭失败后,hdfs sink会继续尝试下一次关闭,直到成功 |
| hdfs.retryInterval | 180 | hdfs sink 尝试关闭文件的时间间隔, 如果设置为0,表示不尝试,相当于于将hdfs.closeTries设置成1 |
| serializer | TEXT | 序列化类型 |
| serializer.* |
Kafka Sink
传输数据到Kafka中,需要注意Flume版本和Kafka版本的兼容性
| Property Name | Default | Description |
|---|---|---|
| type | – | 指定类型:org.apache.flume.sink.kafka.KafkaSink |
| kafka.bootstrap.servers | – | kafka服务地址 |
| kafka.topic | default-flume-topic | kafka Topic |
| flumeBatchSize | 100 | 批次写入kafka Event数 |