Flume中的总结

  • Post author:
  • Post category:其他


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一文深入浅出


https://mp.weixin.qq.com/s/0KbmZP1MShcRyoZcqlalRQ



版权声明:本文为qq_36213530原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。