Flume面试题

1 Flum的应用场景?

线上数据存储在磁盘或通过socket传输给另外一个系统,很难推动线上应用和服务去修改接口,向kafka里面写数据,Flume是主要用来线上数据的传输。

2 Flum丢包问题

单机upd的flume source配置,100M/s数据量,10w qps flume就开始大量丢包,因此,很多公司在搭建自己的系统时,直接抛弃了flume,自己研发传输系统,但也会参考source-channel-sink.

一些公司在Flume工作过程中,会对业务日志进行监控,如果数据丢失在1%左右是没有问题的,当数据丢失在5%就会出现问题。

Flume:Flume是管道流方式,提供了很多默认实现,让用户通过参数部署,及扩展API

KafKa:Kafka是一个可持久化的分布式消息队列

Kafka是一个通用的系统,它允许多个生产者和多个消费者共享多个主题,相比之下Flum是一种专用的工具,被用来往HDFS,HBase发送数据。它对HDFS有特殊的优化,并且集成了Hadoop的安全性。如果数据被多个系统消费,使用Kafka,如果数据设计给Hadoop使用,则使用Flume。

Flume可以使用拦截器处理数据。这些对数据屏蔽或过量是很有用的。Kafka需要外部的流处理才能做到。

Kafka和flume是高可靠系统,可以通过配置实现数据的0丢失。但是flume不支持副本,一但某个Flume agent节点挂掉之后,即使使用了高可靠的管道传输,这些数据也会丢失,直到你恢复你的磁盘。如果需要可靠的管道传输,可以使用kafka.

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

使用Flume Kafka插件,插件自定义了flume和sink,数据从channel取出,通过kafka的Produce写入kafka中。

5、flume管道内存,flume宕机了数据怎么解决?

1)Flume的channel分为很多种,可以将数据写入到文件。

2)防止非首个agent宕机的方法数可以做集群或者主备。

尚硅谷

4.1你是如何实现Flum数据传输的监控的

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

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

1作用

1)Source可以用来收集数据,可以处理各种格式,日志数据

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

3)Sink组件是用于把数据发送到目的地的组件,目的地包括Hdfs,Hbase,avro,thrift,Hbase.

4.3 Flume的Channel Selectors(拦截器,监控器)

官方文档上Chann Selectors 有两种类型:Replicating Channel Selector 和Multiplexing,

这两种Selector的区别是Replicating会将source 过来的事件发送给所有的Channel,而Multiplexing可以选择该发往哪些Channel.

4.4 Flume参数调优

Source :batchsize可以影响Source运送envent到Channel的条数,适当的调节这个参数,可以提高Source运送到channel 的event性能。

2 Channel

type选择memory时Channel的性能最好,但是如果Flume如果意外挂掉可能丢失数据,这是type可以选择File,但性能比Memory差。

使用Channel时配置DataDir配置多个不同盘下的目录可以提高性能。

Capacity决定channel可容纳最大envent的条数。transactionCapacity决定Source往Channel写数据的最大的条数,其也决定sink往Channel读取数据的条数。

transanctionCapacity需要大于Source和Sink的batchSize参数。

3.Sink

增加sink,能提高数据消费的效率。但是也不是越多越好,多了话,也会造成系统资源的浪费。

bachsize决定sink读取Channel的envent的条数大小,适当增加batchsize可以跳高sink从channel搬运数据的大小。

4.5 Flume的事务机制

Flume有两个事务机制:这两个事务机制分别负责Source 到Channel,Channel到sink。

4.6 Flume采集数据会丢失吗?

根据Flume的架构原理,Flume是不可能丢失数据的,其内部有完善的事务机制,Source到Channel是事务性的,Channel到Sink是事务性的,因此不会丢失。唯一丢失的Channel的type是使用memory会丢失数据。或agent宕机导致数据丢失,或者Cahnnel存储的数据已满,导致Source不在写入,未写入的数据丢失。

上一篇:flume学习


下一篇:Flume面试知识总结