框架

image.png


Source

负责取数据到Flume Agent的组件。可处理各种格式的日志,
包括:avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy、
另外拦截器只能配合source使用,不能配合sink

命名规则:
根据采集的数据源进行命名,如taildir source是采集的类型和形式

三种常用source:
1、Exec source:适用于监控一个实时追加的文件,不能实现断点续传。原因:因为用了tail -F命令,只能采集最后10行数据
eg.有4000条数据,当读取到3000行数据的时候宕机,那么tail -F读取了最后10行数据,中间则有990行数据丢失了

2、spooldir source:适用于同步新文件,但不能用于实时追加日志文件

3、Taildir source : 适用于监听多个实时追加的文件(指定文件夹),并且能实现断点续传(偏移量保存成json文件)

*断点续传:
重新执行监控命令后会继续从之前读到的位置继续读取文件,而不会重新再读文件,
记录偏移量(保存成json文件(tail_dir.json)):
image.png

多文件夹的优劣:
优:每个磁盘的io是有限的,设置多文件,就是增加磁盘数量,提升io能力
劣:多文件夹有可能造成数据量太大,导致内存不足,可以改为filechannal


Sink

不断轮询(一个一个拿数据)Channel中的事件并批量地移除他们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume agent
目的地包括:hdfs、logger、avro、thrift、ipc、file、HBase、solr、自定义

命名规则
根据数据输出方向命名,如输出方向是hdfs则叫 hdfs sink,输出方向是kafka则叫kafka sink


channel

缓冲区(消风)
是线程安全的,可以同时处理几个Source的写入操作和几个Sink的读取操作。
一般两种Channel:Memory Channel(内存缓存)【公司90%用】和File Channel(磁盘永久)

命名规则:
根据自身数据存储方还命名,如kafka channel存储在kafka中、file channel存储在磁盘中、memory channel 存储在内存中。

新:kafka channel
image.png


event

image.png
传输单元,
flume:数据传输的基本单元,以event的形式将数据从源头送至目的地,
event:由Header和Body两部分组成,
Header用来存放该event的一些属性,为K-V结构(判定去向,如下图的浏览、收藏、下单、支付)
Body用来存放该条数据,形式为字节数组

image.png
image.png