Flume笔记

Flume 笔记

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

总体架构图

Flume笔记
flume的核心是把数据从数据源source收集过来,在将收集到的数据送到指定目的地(sink)。为了保证传输过程中不丢失数据,在送到目的地之前,会先缓存在通道中(channel),待数据发送到sink之,flume从通道中删除数据。

source不断的接收数据,将数据封装成一个一个event,然后将event发送给channel,sink会将channel中的event数据发送到指定的地方。

核心

event事件

数据从source采集,流向channel,最终流向sink的整个过程称之为一次事件。
event将传输数据进行封装,是flume传输数据的基本单位。

agent 进程

flume运行的核心就是agent,agent本身是一个java进程。
agent内部包含三个核心组件(source、channel、sink)

source

source组件是专门用来收集数据的。

channel

channel组件是专门用来存放临时数据的。

sink

sink组件是用于把数据发送到目的地的组件

特性

可靠性

事务型的数据传递,保证数据的可靠性

可恢复性

通道可以以内存或文件的方式实现,内存更快但不可恢复,文件较慢但提供了可恢复性。

source

类型 说明
avro 用于接收由flume发送的消息
exec 用于执行shell命令后,将命令结果发送到flume
spooling Directory 用于监听目录变化,读取变化目录名称信息
netcat 用于监听某个端口,将接口接收到的数据发送给flume
sequence generator source 自生成序号,将需要发送给flume
http 用于监听http请求,将请求内容接收到数据发送给flume

sink

类型 说明
logger sink 日志控制台输出
File Roll Sink 文件输出
hdfs sink hdfs输出

channel

类型 说明
memory 内存通道
jdbc 数据库通道
file 文件通道
内存溢出通道(正式环境不建议使用)

selector路由

source+selector可以实现根据event中不同的值,将event向不同的channel分发。

interceptors拦截器

flume在运行阶段可以通过interceptors对event进行修改和删除。
可以定义多个拦截器,多个拦截器之间按定义顺序执行

类型 说明
timestamp interceptors 时间戳拦截器,会在event的header中添加时间戳数据
host interceptors 主机名或ip拦截器,会在event的header中添加主机名或主机ip
static interceptors 静态值拦截器,会在event的header中添加自定义数据
UUID interceptors uuid拦截器,会在event的header中添加uuid
search and replace interceptors 查找与替换拦截器,会替换event的信息内容
regex filtering interceptors 正则过滤拦截器,满足的放过,不满足的丢弃
regex Extractor interceptors 将正则匹配分组结果添加到header中,次拦截器可以将event内部的内容提取到event外部的header中

process

flume允许将多个sink进行分组,组内按照process的设定控制数据的分发策略。

类型 说明
failover sink process 向优先级最高的sink发送event,其他的不发送,需要提前设定sink的优先级
load balancing sink process 以轮循或随机的方式实现负载均衡式的event分发