Flume是一个{分布式的、可靠的、高可用}的海量日志采集、聚合和传输的系统
原型图
基本概念
-
Event:消息的基本单位,由Header与Body组成
-
Agent:JVM进程,负责将一端外部来源产生的消息转发到另一端外部的保存地
- Source:数据源,Flume由外部来源读入Event,并写入Channel
- Channel:event的暂存组件,会一直保存写入的Event
- Sink:由Channel读取Event,并且写入目的地
Source:数据源
Flume可以使用的数据源有很多,用户也可以自己定制数据源
| Source | Type | 用途 |
|---|---|---|
| Avro Source | avro | 启动一个Avro Server,可与上一级Agent连接 |
| HTTP Source | http | 启动一个HttpServer |
| Exec Source | exec | 执行unix命令,获取标准输出,如tail -f |
| TailDir Source | TAILDIR | 监听目录或文件 |
| Spooling Directory Source | spooldir | 监听目录下新增文件 |
| Kafka Source | org.apache.flume.source.kafka.KafkaSource | 读取Kafka数据 |
| JMS Source | JMS | 从JMS源读取数据 |
Channel:通道
Channel被设计为Event中转暂存区,存储Source中传来的,没有被Sink消费的Event
为了平衡Source收集与Sink读取数据的速度,可视为Flume内部的消息队列
Channel是线程安全的并且具有事务性,支持Source Write Error的重复写,以及Sink Read Error的重复读等操作
常用的Channel类型:
- Memory Channel
- File Channel
- Kafka Channel
- JDBC Channel
Memory Channel
使用内存作为Channel,读写速度快,但是存储数据量小
Flume进程挂掉,服务器停机、重启都会导致数据丢失
部署Flume Agent的线上服务器内存资源充足、不关心数据丢失的场景下可以使用
关键参数如下
- type:Channel类型,值为memory
- capacity:Channel中存储的最大Event数,默认值100
- transactionCapacity:一次事务中写入和读取的最大Event数,默认值100
- keep-alive:在Channel中写入或读取Event等待完成的超时时间,默认3秒
- byteCapacity:Channel占用内存的最大容量,默认值为Flume堆内存的80%
- byteCapacityBufferPercentage:缓冲空间占Channel容量(byteCapacity)的百分比,为Event中的Header保留了空间,默认值20(单位%)
File Channel
将Event写入磁盘中,与Memory Channel相比存储容量大,无数据丢失风险
存储路径可配置多磁盘文件路径,提高写入文件性能
将Event顺序写入到File Channel文件的末尾
当一个已关闭的只读数据文件中的Event被完全读取完成,并且Sink已经提交读取完成的事务,则Flume将删除存储该数据文件
通过设置检查点和备份检查点在Agent重启之后能够快速将File Channel中的数据按顺序回放到内存中
关键参数如下
-
checkpointDir:检查点目录,默认在启动Flume的用户目录下创建
-
useDualCheckPoint:是否开启备份检查点,默认false,建议开启
- 备份检查点的作用是当Agent出现意外出错导致写入检查点文件异常,在重启File Channel时通过备份检查点将数据回放到内存中
- 若不开启备份检查点,在数据回放的过程中发现检查点文件异常会对所有数据进行全回放,全回放的过程相当耗时
-
backupCheckpointDir:备份检查点目录,最好不要跟检查点目录在同一块磁盘上
-
checkpointInterval:每次写检查点的时间间隔,默认值30000ms
-
dataDirs:数据文件磁盘存储路径,建议配置多块盘的多个路径,通过磁盘的并行写入来提高File Channel的性能,多个磁盘路径逗号分隔
-
transactionCapacity:一次事务中写入和读取的最大Event数,默认值10000
-
maxFileSize:每个数据文件的最大大小,默认值:2146435071字节
-
minimumRequiredSpace:磁盘路径最小剩余空间,若磁盘空间小于设定值,则不再写入数据
-
capacity:File Channel可容纳的最大Event数
-
keep-alive:在Channel中写入或读取Event等待完成的超时时间,默认3秒
Sink:数据下沉
从Channel消费Event,输出到外部存储,或者输出到下一阶段的Agent
一个Sink只能从一个Channel消费Event
当Sink消费Event成功后,就会向Channel提交事务
Sink事务提交成功,处理完成的Event将会被Channel删除,否则Channel会等待Sink重新消费处理失败的Event
常用的Sink组件
- Avro Sink
- HDFS Sink
- HBase Sink
- Kakfa Sink
- File Roll Sink
- HTTP Sink