Flume面试题整理

2021年11月22日 阅读数:3
这篇文章主要向大家介绍Flume面试题整理,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

关注公众号:大数据技术派,回复“资料”,领取1000G资料。
本文首发于个人我的博客:Flume面试题整理面试

一、Flume使用场景(☆☆☆☆☆)

线上数据通常主要是落地(存储到磁盘)或者经过socket传输给另一个系统,这种状况下,你很难推进线上应用或服务去修改接口,实现直接向kafka里写数据,这时候你可能就须要flume这样的系统帮你去作传输。 redis

二、Flume丢包问题(☆☆☆☆☆)

单机upd的flume source的配置,100+M/s数据量,10w qps flume就开始大量丢包,所以不少公司在搭建系统时,抛弃了Flume,本身研发传输系统,可是每每会参考Flume的Source-Channel-Sink模式。
一些公司在Flume工做过程当中,会对业务日志进行监控,例如Flume agent中有多少条日志,Flume到Kafka后有多少条日志等等,若是数据丢失保持在1%左右是没有问题的,当数据丢失达到5%左右时就必须采起相应措施。 缓存

三、Flume与Kafka的选取

采集层主要可使用Flume、Kafka两种技术。
Flume:Flume 是管道流方式,提供了不少的默认实现,让用户经过参数部署,及扩展API。
Kafka:Kafka是一个可持久化的分布式的消息队列。
Kafka 是一个很是通用的系统。你能够有许多生产者和不少的消费者共享多个主题Topics。相比之下,Flume是一个专用工具被设计为旨在往HDFS,HBase发送数据。它对HDFS有特殊的优化,而且集成了Hadoop的安全特性。因此,Cloudera 建议若是数据被多个系统消费的话,使用kafka;若是数据被设计给Hadoop使用,使用Flume。
正如大家所知Flume内置不少的source和sink组件。然而,Kafka明显有一个更小的生产消费者生态系统,而且Kafka的社区支持很差。但愿未来这种状况会获得改善,可是目前:使用Kafka意味着你准备好了编写你本身的生产者和消费者代码。若是已经存在的Flume Sources和Sinks知足你的需求,而且你更喜欢不须要任何开发的系统,请使用Flume。
Flume可使用拦截器实时处理数据。这些对数据屏蔽或者过量是颇有用的。Kafka须要外部的流处理系统才能作到。
Kafka和Flume都是可靠的系统,经过适当的配置能保证零数据丢失。然而,Flume不支持副本事件。因而,若是Flume代理的一个节点奔溃了,即便使用了可靠的文件管道方式,你也将丢失这些事件直到你恢复这些磁盘。若是你须要一个高可靠性的管道,那么使用Kafka是个更好的选择。
Flume和Kafka能够很好地结合起来使用。若是你的设计须要从Kafka到Hadoop的流数据,使用Flume代理并配置Kafka的Source读取数据也是可行的:你没有必要实现本身的消费者。你能够直接利用Flume与HDFS及HBase的结合的全部好处。你可使用Cloudera Manager对消费者的监控,而且你甚至能够添加拦截器进行一些流处理。 tomcat

四、数据怎么采集到Kafka,实现方式

使用官方提供的flumeKafka插件,插件的实现方式是自定义了flume的sink,将数据从channle中取出,经过kafka的producer写入到kafka中,能够自定义分区等。 安全

五、flume管道内存,flume宕机了数据丢失怎么解决

1)Flume的channel分为不少种,能够将数据写入到文件。
2)防止非首个agent宕机的方法数能够作集群或者主备。 markdown

六、flume配置方式,flume集群(详细讲解下)

Flume的配置围绕着source、channel、sink叙述,flume的集群是作在agent上的,而非机器上。 session

七、flume不采集Nginx日志,经过Logger4j采集日志,优缺点是什么?

优势:Nginx的日志格式是固定的,可是缺乏sessionid,经过logger4j采集的日志是带有sessionid的,而session能够经过redis共享,保证了集群日志中的同一session落到不一样的tomcat时,sessionId仍是同样的,并且logger4j的方式比较稳定,不会宕机。
缺点:不够灵活,logger4j的方式和项目结合过于紧密,而flume的方式比较灵活,拔插式比较好,不会影响项目性能。 socket

八、flume和kafka采集日志区别,采集日志时中间停了,怎么记录以前的日志?

Flume采集日志是经过流的方式直接将日志收集到存储层,而kafka是将缓存在kafka集群,待后期能够采集到存储层。
Flume采集中间停了,能够采用文件的方式记录以前的日志,而kafka是采用offset的方式记录以前的日志。 分布式

九、flume有哪些组件,flume的source、channel、sink具体是作什么的(☆☆☆☆☆)

flume的source、channel、sink

1)source:用于采集数据,Source是产生数据流的地方,同时Source会将产生的数据流传输到Channel,这个有点相似于Java IO部分的Channel。
2)channel:用于桥接Sources和Sinks,相似于一个队列。
3)sink:从Channel收集数据,将数据写到目标源(能够是下一个Source,也能够是HDFS或者HBase)。
注意:要熟悉source、channel、sink的类型 ide