Flume-interview-questions

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:减少了FlumeSink阶段,提高了传输效率;

4️⃣事物详解
SourceChannelPut事务;
ChannelSinkTake事务;


Flume拦截器

1️⃣拦截器注意事项
 项目中自定义了 :ETL拦截器和区分类型拦截器。
 采用两个拦截器的优缺点:
  优点 : 模块化开发和可移植性;
  缺点,性能会低一些

2️⃣自定义拦截器步骤
 a)实现 Interceptor
 b)重写四个方法
   - initialize : 初始化;
   - public Event intercept(Event event) : 处理单个Event;
   - public List intercept(List events) : 处理多个Event,在这个方法中调用Event intercept(Event event);
   - close : 方法;
 c)静态内部类,实现Interceptor.Builder


Flume Channel选择器

Flume-interview-questions_第1张图片
FlumeChannel选择器

Flume监听器

Ganglia : 查看写入和消费的数量是否一致;


Flume采集数据会丢失吗?

1️⃣不会丢失;
2️⃣Channel可以将数据存储在File中,数据传输自身有事务(Put事物和Task事物).


Flume内存

 1️⃣ 开发中在flume-env.sh中设置JVM heap4G或更高,部署在单独的服务器上(48线程16G内存);
 2️⃣ -Xmx-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc;


FileChannel优化

 1️⃣ 通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量;
 2️⃣ checkpointDirbackupCheckpointDir也尽量配置在不同硬盘对应的目录中,保证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.rollSizehdfs.roundValue : 这两个参数一次只会执行一个,哪个先触发就执行哪个;

你可能感兴趣的:(Flume-interview-questions)