这是我参与更文挑战的第9天,活动详情查看:更文挑战
一、FLume组成部分
1. taildir source
- 断点续传、多目录
- Flume
Apache1.7
CDH1.6
版本产生的 - 没有断点续传功能时怎么做的? 自定义
- taildir挂了怎么办?
- 不会丢数:断点续传
- 重复数据:怎么处理重复数据?
- 不处理:生产环境通常不处理,出现重复的概率比较低。处理会影响传输效率。
- 处理
- 自身:在taildirsource里面增加自定义事务,影响效率
- 下一级借助其他框架处理:(hive dwd sparkstreaming flink布隆),(groupby、开窗取窗口第一条、redis)
- 是否支持递归遍历文件夹读取文件?
- 不支持.
可自定义 递归遍历文件夹 + 读取文件
- 不支持.
2. file channel
memory channel
kafka channel
- File Channel
- 数据存储于磁盘,优势:可靠性高;劣势:传输速度低
- 默认容量:100万event
注意
:FileChannel可以通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量。
- Memory Channel
- 数据存储于内存,优势:传输速度快;劣势:可靠性差
- 默认容量:100个event
- Kafka Channel
- 数据存储于Kafka,基于磁盘;
- 优势:可靠性高;
- 传输速度快 Kafka Channel 大于Memory Channel + Kafka Sink 原因省去了Sink阶段
- Kafka Channel 哪个版本产生的
- Flume1.6 版本产生, 因为有bug并没有火;
- topic-start 数据内容
- topic-event 数据内容 ture 和false 很遗憾,都不起作用。
- 增加了额外清洗的工作量。
- Flume1.7 解决了这个问题,开始火了
生产环境选择
- 如果下一级是Kafka,优先选择Kafka Channel
- 如果是金融、对钱要求准确的公司,选择File Channel
- 如果就是普通的日志,通常可以选择Memory Channel
- pb级每天丢几百万数据 -> 类如:首付,会在乎那几块钱?
3. HDFS sink
- 如何配置生成文件策略:
时间(1小时-2小时)
或者文件大小128m
、event个数要禁止(0禁止)
- 具体参数:
- hdfs.rollInterval=3600
- hdfs.rollSize=134217728
- hdfs.rollCount=0
- 具体参数:
4. 事务
- Source到Channel是Put事务
- Channel到Sink是Take事务
二、Flume拦截器
1. 拦截器注意事项
- 多个拦截器的优缺点:
- 优点,模块化开发和可移植性
- 缺点,性能会低一些
2. 自定义拦截器步骤
- 实现 Interceptor
- 重写四个方法
- initialize 初始化
- public Event intercept(Event event) 处理单个Event
- public List intercept(List events) 处理多个Event,在这个方法中调用Event intercept(Event event)
- close方法
- 静态内部类,实现Interceptor.Builder
3. 拦截器可以不用吗?
- 可以不用;需要在下一级hive的dwd层和sparksteaming里面处理
- 优势:只处理一次,轻度处理
- 劣势:影响性能,不适合做实时推荐这种对实时要求比较高的场景
三、Flume Channel选择器
1. Replicating
- 默认选择器, 功能:将数据发往下一级所有通道
2. Multiplexing
- 选择性发往指定通道
四、Flume监控器
- 采用Ganglia监控器
- 监控到Flume尝试提交的次数远远大于最终成功的次数,说明Flume运行比较差,解决办法?
- 增加内存flume-env.sh
4-6g
-Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc - 增加服务器数量
- 增加内存flume-env.sh
- 监控到Flume尝试提交的次数远远大于最终成功的次数,说明Flume运行比较差,解决办法?
五、Flume数据会丢失吗
- FileChannel : 不会, 存储在File中,数据传输自身有事务
- MemoryChannel : 有可能丢