Flume 三件事
1、组成( source channel sink 2个事务)
1)taildir source
(1)断点续传、多目录
(2)在Apache flume1.7之后产生的;如果是CDH,1.6之后;
(3)自定义source实现断点续传的功能(只要能自定义,有很多想象空间了)
(4)taildir source挂了怎么办? 不会丢失、可能产生数据重复
(5)对重复数据怎么处理?
不处理;
处理:(自身:自定义source实现事务,额外增加了运算量)
在下一级处理:hive的数仓里面(dwd层,数据清洗ETL)
spark Streaming里面处理
去重的手段:group by (id) 开窗(id),只取窗口第一条
(6)是否支持递归读取文件?
不支持;自定义tail source(递归+读取) 消费kafka+上传hdfs
2)channel
(1)File Channel :基于磁盘、效率低、可靠性高
100万event
(2)memoryChannel:基于内存、效率高、可靠性低
100event
(3)KafkaChannel:数据存储在Kafka里面,基于磁盘、效率高于memoryChannel+kafkasink,因为省了sink
flume1.6时 topic + 内容; 无论true还是false都不起作用; bug
flume1.7解决bug,被大家广泛使用;
(4)在生产环境:
如果下一级是kafka的话,优先选择KafkaChannel;
如果不是kafka,如果更关心可靠性选择FileChannel;
如果更关心性能,选择memoryChannel
3)HDFS sink
(1)控制小文件;
时间(1-2小时)、大小(128m)、event个数(0禁止)
(2)压缩
开启压缩流;指定压缩编码方式(lzop/snappy)
2、三个器
1)拦截器
(1)ETL(判断json的完整性 { }; 服务器时间(13 全数字)) 、
(2)分类型(启动日志、事件日志) kafka(的topic要满足下一级所又消费者) 一张表一个topic
商品列表、商品详情、商品点击
广告
点赞、评论、收藏
后台活跃、通知
故障
启动日志
(3)自定义拦截器步骤
定义一个类 实现interceptor接口
重写4个方法:初始化、关闭、单event、多event()
创建一个静态内部类Builder
(4)拦截器不要行不行?
看需求
可以 =》 在hive的dwd层或者sparkstreaming内部解析
2)选择器
replication(默认) 把数据发往所有channel
mul(选择性发往下一级指定channel)
3)监控器
ganglia 发现尝试提交的次数 远远大于最终提交成功次数; 说明flume性能不行,需要优化。
自身;提高自己的内存 4-6g flume_env.sh
外援:增加flume台数 服务器配置(16g/32g 8T) 负载均衡Nginx->springboot->flume
3、优化
1)File Channel 能多目录就多目录(要求在不同的磁盘),提高吞吐量
2)控制小文件;
时间(1-2小时)、大小(128m)、event个数(0禁止)
3)监控器(百度、京东)
自身;增加内存 flume_env.sh
外援:加Flume
4、如果挂了怎么办
如果有menorychannel 有可能数据丢失100event
如果是taildirsource 不会对数据但会重复
Flume一文深入浅出