Flume[1] - 基本概念

528 阅读4分钟

Flume是一个{分布式的、可靠的、高可用}的海量日志采集、聚合和传输的系统

原型图

71ee26141233aca47a0bad11c8f145cc-56951-1173x382.png

基本概念

  • Event:消息的基本单位,由Header与Body组成

  • Agent:JVM进程,负责将一端外部来源产生的消息转发到另一端外部的保存地

    • Source:数据源,Flume由外部来源读入Event,并写入Channel
    • Channel:event的暂存组件,会一直保存写入的Event
    • Sink:由Channel读取Event,并且写入目的地

Source:数据源

Flume可以使用的数据源有很多,用户也可以自己定制数据源

SourceType用途
Avro Sourceavro启动一个Avro Server,可与上一级Agent连接
HTTP Sourcehttp启动一个HttpServer
Exec Sourceexec执行unix命令,获取标准输出,如tail -f
TailDir SourceTAILDIR监听目录或文件
Spooling Directory Sourcespooldir监听目录下新增文件
Kafka Sourceorg.apache.flume.source.kafka.KafkaSource读取Kafka数据
JMS SourceJMS从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