一 Flume组成
1️⃣ 组成部分
1.Source
2.Channel
3.Sink
4.Put事务
5.Take事务2️⃣ 常用
Source
Taildir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传3️⃣ 常用
Channel
File Channel:数据存储在磁盘,宕机数据可以保存。但是传输速率慢。适合对数据传输可靠性要求高的场景,比如,金融行业;
Memory Channel:数据存储在内存中,宕机数据丢失。传输速率快。适合对数据传输可靠性要求不高的场景,比如,普通的日志数据;
Kafka Channel:减少了Flume的Sink阶段,提高了传输效率;4️⃣事物详解
Source到Channel是Put事务;
Channel到Sink是Take事务;
二 Flume拦截器
1️⃣拦截器注意事项
项目中自定义了 :ETL拦截器和区分类型拦截器。
采用两个拦截器的优缺点:
优点 : 模块化开发和可移植性;
缺点,性能会低一些2️⃣自定义拦截器步骤
a)实现Interceptor
b)重写四个方法
-initialize: 初始化;
-public Event intercept(Event event): 处理单个Event;
-public List<Event> intercept(List<Event> events): 处理多个Event,在这个方法中调用Event intercept(Event event);
-close: 方法;
c)静态内部类,实现Interceptor.Builder
三 Flume Channel选择器
FlumeChannel选择器
四 Flume监听器
Ganglia: 查看写入和消费的数量是否一致;
五 Flume采集数据会丢失吗?
1️⃣不会丢失;
2️⃣Channel可以将数据存储在File中,数据传输自身有事务(Put事物和Task事物).
六 Flume内存
1️⃣ 开发中在
flume-env.sh中设置JVM heap为4G或更高,部署在单独的服务器上(4核8线程16G内存);
2️⃣-Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc;
七 FileChannel优化
1️⃣ 通过配置
dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量;
2️⃣checkpointDir和backupCheckpointDir也尽量配置在不同硬盘对应的目录中,保证checkpoint坏掉后,可以快速使用backupCheckpointDir恢复数据;
八 HDFS Sink小文件处理
1️⃣
HDFS存入大量小文件,有什么影响?
1. 元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在Namenode内存中。所以小文件过多,会占用Namenode服务器大量内存,影响Namenode性能和使用寿命;
2. 计算层面:默认情况下MR会对每个小文件启用一个Map任务计算,非常影响计算性能,同时也影响磁盘寻址时间;2️⃣
HDFS小文件处理
1.hdfs.rollSize= 134217728 : 文件在达到128M时滚动生成一个正式文件;
2.hdfs.roundValue= 10,hdfs.roundUnit= second : 文件创建超过10秒时会滚动生成正式文件;
3.hdfs.rollCount= 0;
4.hdfs.rollSize和hdfs.roundValue: 这两个参数一次只会执行一个,哪个先触发就执行哪个;

FlumeChannel选择器




网友评论