Flume定义
系统
流式处理架构
海量日志采集、聚合、传输
基础架构
Agent:Source -> Channel -> Sink
一个 JVM 进程
以 event(事件)的形式将数据从源头送至目的地
整体架构
Source -> ChannelProcess -> Channel -> SinkProcess -> Sink
event:Flume 数据传输的基本单元
Header:key = value
存放属性
Body:byte array
存放数据
Source
接收数据
Avro Source
收集来自 Apache Avro 的数据
Netcat Source
从网络套接字读取数据
Taildir Source
从日志数据中读取数据
ChannelProcess
处理事件
Source -> ChannelProcess -> Interceptor -> ChannelSelector -> Channel
Interceptor:拦截器
自定义 Java 拦截规则
ChannelSelector:选择器
Replicating: 复制 <默认选择:default>
Multiplexing:多路复用
Channel
缓冲区
Memory Channel
基于内存
File Channel
基于磁盘
Kafka Channel
使用kafka
可以同时处理几个Source的写入操作和几个Sink的读取操作
SinkProcessor
Channel -> SinkProcessor -> sink1、sink2、sink3
defaultSinkProcess
默认:一个Channel对应一个Sink
LoadBalancingSinkProcess
负载均衡
FailoverSinkProcess
故障转移,实现Sink错误恢复的功能
Sink
HDFS Sink:
将数据写入 HDFS
Hive Sink:
将数据写入 Hive 表
Logger Sink:
将数据写入日志
轮询Channel中的事件
将事件批量写入到存储或索引系统
或者被发送到另一个Flume Agent
Flume事务
put事务
Source -> transaction -> Channel
transaction: doPut -> putList ->doCommit ------------- batch data --- doRollback -----------------
doPut
:将批数据写入临时缓冲区 putList
doCommit
:检查内存队列是否足够合并
doRollback
:内存队列空间不足,回滚数据
take事务
Channel -> transaction -> Sink
transaction: doTake -> takeList ->doCommit ------------- batch data --- doRollback -----------------
doTake
:将数据提取到临时缓冲区takeList
,并将数据发送到HDFS
doCommit
:如果数据全部发送成功,则清除临时缓冲区 takeList
doRollback
:数据发送过程出现异常,Rollback
将临时缓冲区takeList
的数据归还给Channel
内存队列