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分发 |