一、flume的组成
1.source
1)taildir source :
·断点续传,多目录
·apache flume 1.7 ,CDH1.6
·自定义source实现断点续传
·用offset落盘判定传入量,所以不会丢失数据,但会产生重复数据。
·自身效率低,在企业中不常在source端进行对重复数据的清洗去重。
·去重在下一级进行处理:redis,flink,group by , dwd
2.channel
1)file channel:
磁盘,效率低,可靠性高
2)memory channel
内存,效率高,可靠性低
3)kafka channel
存kafka -> 磁盘,可靠性高,效率高file,低于memory。kafka channel -> memory channel + kafka sink
4)下一级是kafka:kafka channel
5)下一级不是kafka,看求效率还是可靠性
传输日志,memory
传输业务/金融,file
3.sink
只用HDFS sink:
1)小文件
2)大小 -> 128m
时间 -> 1H
event -> 0个
二、flume的三个器
1.拦截器
两个地方用到了拦截器:
1)kafka前的flume:ETL拦截器
进行ETL清洗,将json不完整的数据干掉
2)kafka后的flume:时间戳拦截器
hive中的数据存储是按照是时间进行分区的
零点漂移问题:1月4号中23.59写入的数据在1月5号00:00被接收到,但是数据仍然属于4号,需要将5号中数据转到4号。
3)自定义拦截器步骤
3-1:自定义类实现interceptor接口
3-2:重写4个方法
3-3:初始化
3-4:关闭
3-5:单event处理
3-6:多event处理
2.选择器
2-1:M:把日志选择性的发送到制定通道
2-2:RE(默认): 全部往下发送
3.监控器
·如果发现put 或者take尝试提交的次数 ,远远大于最终提交成功的次数, 说明发生了事务回滚
·解决方法:增加内存
·怎么增加:
1)flume-env.sh -> 默认2000M,提升到4-6G
2)考虑增加flume台数
三、flume的优化和挂了怎么办
1)file channel 能配置多目录,尽可能配置多块磁盘
2)HDFS Sink
2-1:小文件
2-2:大小 ---> 128m
时间 ---> 1H
envent个数 ---> 0
3)挂了怎么办?
重启