Flume面试题

1、Flume组成

1.1 taildir source

断点续传、多目录

1.哪个flume版本产生的?

Apache1.7、CDH1.6

2.没有断点续传功能时怎么做的?

自定义

3.taildir挂了怎么办?

不会丢数:断点续传

4.怎么处理重复数据?

不处理:生产环境通常不处理,因为会影响传输效率

处理:自身(在taildirsource里面增加自定义事务);找兄弟(下一级处理(hive dwd sparkstreaming flink布隆)、去重手段(groupby、开创取窗口第一条、redis))

5.是否支持递归遍历文件夹读取文件?

不支持

自定义:递归遍历文件夹 + 读取文件
1.2 file/memory/kafka channel
  1. file channel

    数据存储于磁盘

    优势:可靠性高

    劣势:传输速度低

    默认容量:100万event

    注意:FileChannel可以通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量

  2. memory channel

    数据存储于内存

    优势:传输速度快

    劣势:可靠性差

    默认容量:100个event

  3. kafka channel

    数据存储于Kafka,基于磁盘

    优势:可靠性高,传输速度快(kafka channel > memory channel + kafka sink:原因省去了sink阶段)

    kafka channel哪个版本产生的?

    Flume1.6版本产生,但是并没有火,因为有bug
    
    topic-start、topic-event数据内容,true和false都不起作用,增加了额外清洗的工作量
    
    Flume1.7解决了这个问题,开始火了
    
  4. 生产环境如何选择?

    如果下一级是kafka,优先选择kafka channel
    
    如果是金融、对钱要求准确的公司,选择file channel
    
    如果就是普通的日志,通常可以选择memory channel
    
1.3 HDFS sink

时间(1-2小时)or 大小128m、event个数(0禁止)

具体参数:

hdfs.rollInterval=3600
hdfs.rollSize=134217728
hdfs.rollCount=0

2、Flume有哪些事务机制?

  1. Put事务:Source到Channel

    比如spooling directory source为文件的每一行创建一个事件,一旦事务中所有的事件全部传递到Channel且提交成功,那么Source就将该文件标记为完成

  2. Take事务:Channel到Sink

    事务以类似的方式处理从Channel到Sink的传递过程,如果没有某种原因使得事件无法记录,那么事务将会回滚,且所有的事件都会保持到Channel中,等待重新传递

3、Flume的Source,Sink,Channel的作用?你们Source是什么类型?

  1. 作用

    Source组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,包括avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy;

    Channel组件对采集到的数据进行缓存,可以存放在Memory或File中;

    Sink组件是用于把数据发送到目的地的组件,目的地包括hdfs、logger、avro、thrift、ipc、file、hbase、solr、自定义。

  2. 我们公司采用的Source类型为:

    监控后台日志:exec

    监控后台产生日志的端口:netcat

4、Flume采集数据会丢失吗?(防止数据丢失的机制)

根据Flume的架构原理,Flume是不可能丢失数据的,其内部有完善的事务机制,Source到Channel是事务性的,Channel到Sink是事务性的,因此这两个环节不会出现数据的丢失,唯一可能丢失数据的情况是Channel采用memoryChannel,agent宕机导致数据丢失,或者Channel存储数据已满,导致Source不再写入,未写入的数据丢失

Flume不会丢失数据,但是有可能造成数据的重复,例如数据已经成功由Sink发出,但是没有接收到响应,Sink会再次发送数据,此时可能会导致数据的重复

5、你是如何实现Flume数据传输的监控的?

使用第三方框架Ganglia实时监控Flume

监控到flume尝试提交的次数远远大于最终成功的次数,说明flume运行比较差

解决方法?
1. 自身:增加内存flume-env.sh 4-6g

   -Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响

   如果设置不一致容易导致频繁fullgc

2. 找朋友:增加服务器台数

   搞活动618 --> 增加服务器 --> 用完再退出

   日志服务器配置:8-16g内存、磁盘8T

6、Flume的有哪些Channel Selectors(选择器)?

Channel Selectors:可以让不同的项目日志通过不同的Channel到不同的Sink中去

Channel Selectors有两种类型:Replicating Channel Selector(default)和Multiplexing Channel Selector

两者的区别是:Replicating会将source过来的events发往所有channel,而Multiplexing可以选择该发往哪些channel

7、Flume的拦截器是做什么的?

拦截器是简单的插件式组件,设置在source和channel之间

source接收到的时间,在写入channel之前,拦截器都可以进行转换或者删除这些事件

每个拦截器只处理同一个source接收到的事件

1.可以自定义拦截器

  1. 创建一个类,实现(implements)Interceptor

  2. 需要自己实现4个方法

    initialize():初始化

    public Event intercept(Event event):处理单个Event

    public List<Event> intercept(List<Event> events):处理多个Event

    close()

  3. 静态内部类,实现Interceptor.Builder

2.拦截器可以不用么?

可以不用:需要在下一级hive的dwd层和sparkstreaming里面处理

优势:只处理一次,轻度处理

劣势:影响性能,不适合做实时推荐这种对实时要求比较高的场景

8、Flume有哪些参数调优?

8.1 Source

增加Source个数(使用Tair Dir Source时可增加FileGroups个数),可以增大Source的读取数据的能力

batchSize参数决定Source一次批量运输到Channel的event条数,适当调大这个参数可以提高Source搬运Event到Channel时的性能

8.2 Channel

type选择memeoy时channel的性能最好,但是如果Flume进程意外挂掉可能会丢失数据

type选择file时channel的容错性更好,但是性能上会比memory channel差;

使用file channel时通过配置DataDir指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量;
checkpointDir和backupCheckpointDir也尽量配置在不同硬盘对应的目录中,保证checkpoint坏掉后,可以快速使用backupCheckpointDir恢复数据

Capacity参数决定Channel可容纳最大的event条数

transactionCapacity参数决定每次Source往Channel里面写的最大event条数和每次Sink从Channel里面读的最大event条数

transactionCapacity需要大于Source和Sink的batchSize参数

8.3 Sink

增加Sink的个数可以增加Sink消费event的能力

Sink也不是越多越好,够用就行,过多的Sink会占用系统资源,造成刺痛资源不必要的浪费

batchSize参数决定Sink一次批量从Channel读取的event条数,适当调大这个参数可以提高Sink从Channel搬出event的性能

HDFS存入大量小文件,有什么影响?

元数据层面:
每个小文件都有一份元数据,其中包括文件路径、文件名、所有者、所属组、权限、创建时间等
这些信息都保存在NameNode内存中
所以小文件过多,会占用NameNode服务器大量内存,影响NameNode性能和使用寿命

计算层面:
默认情况下MR会对每个小文件启用一个Map任务计算,非常影响计算性能
同时也影响磁盘寻址时间

在数据进入到hdfs之前,用flume采集,hdfs sink相关的配置HDFS小文件处理?

hdfs.rollInterval、hdfs.rollSize、hdfs.rollCount,官方默认的这三个参数配置写入HDFS后会产生小文件

基于以上hdfs.rollInterval=3600,hdfs.rollSize=134217728,hdfs.rollCount =0几个参数综合作用,效果如下:

1、文件在达到128M时会滚动生成新文件

2、文件创建超3600s时会滚动生成新文件
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值