目录
- flume 定义
- flume 组成架构
- flume Agent
- flume Source
- flume Channel
- flume Sink
- flume Event
- flume Agent 内部原理
- 拦截器
- 选择器
- 监控器
flume 定义
Flume是一个高可用的分布式海量日志采集、聚合和传输的系统
官网下载地址:http://archive.apache.org/dist/flume/
flume 组成架构
flume Agent
Agent是一个JVM进程
,flume 框架运行时,会一个进程的形式运行
Agent主要有3个部分组成
,Source、Channel、Sink
flume Source
Source是负责接收数据的组件
,Source的类型有Taildir Source、exec、netcat
(1)exec:监控后台日志
(2)netcat:监控后台产生日志的端口
(3)Taildir Source:断点续传;动态监控多目录,多文件
flume Channel
Channel是负责缓冲数据的组件
,Channel的类型有Memory Channel、File Channel
和kafkaChannel
(1)MemoryChannel:基于内存可靠性低,传输效率高( 默认容量:100万个event)
(2)FileChannel:基于磁盘,可靠性高,传输效率低(默认容量:100个event)
注意:
FileChannel可以通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量
(3)kafkaChannel:可靠性高,数据存储在kafka里面,基于磁盘,传输速度大于Memory Channel + Kafka Sink,因为省去了Sink 阶段
选型:
- 如果下一级是Kafka,优先选择Kafka Channel
- 如果是金融、对钱要求准确的公司,选择File Channel
- 如果就是普通的日志,通常可以选择Memory Channel
flume Sink
Sink是负责发送数据的组件
,Sink 的类型有hdfs 、HBase
flume Event
数据传输的最小单元
,以事件的形式将数据从源头送至目的地。例如
一行数据可封装为一个事件event
flume Agent 内部原理
拦截器
功能:
预清洗数据
自定义拦截器大致步骤:
- 定义一个类,实现Interceptor接口
- 实现四个方法:initialize、close、单event处理,多event处理
项目中拦截器主要有
(1)ETL拦截器:主要是用来判断json是否完整。没有做复杂的清洗操作主要是防止过多的降低传输速率
(2)时间戳拦截器:主要是解决零点漂移问题
拦截器可以不用吗?
ETL拦截器可以不用;需要在下一级Hive的dwd层和SparkSteaming里面处理。但是时间戳拦截器建议使用,如果不用需要采用延迟15-20分钟处理数据的方式,比较麻烦
选择器
Replicating:默认选择器。功能:将数据发往下一级所有通道
Multiplexing:选择性发往指定通道(根据event头部决定发送到哪个通道)
监控器
Ganglia