Flume面试题【详细】

1.Flume 采集数据会丢失吗?

不会,Channel 存储可以存储在 File 中,数据传输自身有事务。

2.Flume 与 Kafka 的选取?

采集层主要可以使用 Flume、Kafka 两种技术。
Flume:Flume 是管道流方式,提供了很多的默认实现,让用户通过参数部署,及扩展 API。
Kafka:Kafka 是一个可持久化的分布式的消息队列。
Kafka 是一个非常通用的系统。你可以有许多生产者和很多的消费者共享多个主题Topics。相比之下,Flume 是一个专用工具被设计为旨在往 HDFS,HBase 发送数据。它对HDFS 有特殊的优化,并且集成了 Hadoop 的安全特性。所以,Cloudera 建议如果数据被多个系统消费的话,使用 kafka;如果数据被设计给 Hadoop 使用,使用 Flume。
Kafka 和 Flume 都是可靠的系统,通过适当的配置能保证零数据丢失。然而,Flume 不支持副本事件。于是,如果 Flume 代理的一个节点奔溃了,即使使用了可靠的文件管道方式,你也将丢失这些事件直到你恢复这些磁盘。如果你需要一个高可靠行的管道,那么使用Kafka 是个更好的选择。
Flume 和 Kafka 可以很好地结合起来使用。如果你的设计需要从 Kafka 到 Hadoop 的流数据,使用 Flume 代理并配置 Kafka 的 Source 读取数据也是可行的:你没有必要实现自己的生产者。你可以直接利用Flume 与HDFS 及HBase 的结合的所有好处。你可以使用ClouderaManager 【官方解释:Cloudera Manager是业界公认的用于管理生产中Hadoop的工具。Cloudera Manager是一个管理CDH的端到端的应用。作用: 管理 监控 诊断 集成】对消费者的监控,并且你甚至可以添加拦截器进行一些流处理。

3.数据怎么采集到 Kafka,实现方式?

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

4.flume 管道内存,flume 宕机了数据丢失怎么解决?

1)Flume 的 channel 分为很多种,可以将数据写入到文件。
2)防止非首个 agent 宕机的方法数可以做集群或者主备

5. flume 和 kafka 采集日志区别,采集日志时中间停了,怎么记录之前的日志?

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

6.flume 有哪些组件,flume 的 source、channel、sink 具体是做什么的?你们公司的source是什么类型的

在这里插入图片描述

1)source:用于采集数据,Source 是产生数据流的地方,同时 Source 会将产生的数据
流传输到 Channel,这个有点类似于 Java IO 部分的 Channel。
2)channel:用于桥接 Sources 和 Sinks,类似于一个队列。
3)sink:从 Channel 收集数据,将数据写到目标源(可以是下一个 Source,也可以是 HDFS
或者 HBase)
4)我们公司采用的是exec、netcat。exec作用是 实时监控文件中的数据更新。NetCat 用来监听一个指定端口,并将接收到的数据的每一行转换为一个事件。

7.为什么使用Flume?

在这里插入图片描述

8.Flume组成架构?

在这里插入图片描述

9.FlumeAgent内部原理?

在这里插入图片描述

10.Flume Event 是数据流的基本单元

它由一个装载数据的字节数组(byte payload)和一系列可选的字符串属性来组成(可选头部).
在这里插入图片描述

11.Flume agent

(1)Flume source 消耗从类似于 web 服务器这样的外部源传来的 events.

外部数据源以一种 Flume source 能够认识的格式发送 event 给 Flume source.

Flume source 组件可以处理各种类型、各种格式的日志数据,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy.

flume source 是负责接收数据到 Flume Agent 的组件
在这里插入图片描述

(2)Flume channel
当 Flume source 接受到一个 event 的时, Flume source 会把这个 event 存储在一个或多个 channel 中.

Channel 是连接Source和Sink的组件, 是位于 Source 和 Sink 之间的数据缓冲区。

Flume channel 使用被动存储机制. 它存储的数据的写入是靠 Flume source 来完成的, 数据的读取是靠后面的组件 Flume sink 来完成的.

Channel 是线程安全的,可以同时处理几个 Source 的写入操作和几个 Sink 的读取操作。

Flume 自带两种 Channel:

Memory Channel

Memory Channel是内存中的队列。

Memory Channel在不需要关心数据丢失的情景下适用。

如果需要关心数据丢失,那么Memory Channel就不应该使用,因为程序死亡、机器宕机或者重启都会导致数据丢失。

File Channel。

File Channel将所有事件写到磁盘。

因此在程序关闭或机器宕机的情况下不会丢失数据。

还可以有其他的 channel: 比如 JDBC channel.

在这里插入图片描述

(3) Flume sink
Sink 不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者发送到另一个Flume Agent。

Sink 是完全事务性的。

在从 Channel 批量删除数据之前,每个 Sink 用 Channel 启动一个事务。批量事件一旦成功写出到存储系统或下一个Flume Agent,Sink 就利用 Channel 提交事务。事务一旦被提交,该 Channel 从自己的内部缓冲区删除事件。如果写入失败,将缓冲区takeList中的数据归还给Channel。

Sink组件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定义。
在这里插入图片描述
12.flume中的channel选择器介绍,有什么类型,两者区别是什么,它在什么时候用?
channel选择器用于决定source接收的事件写入哪个channel,由其通知channel,并将事件写入。
relicating(复制选择器【默认使用】)和multiplexing(多路复用选择器)。
复制选择器会复制每个source接收的事件,将事件复制并分发到所有channel,可通过配置参数,控制分发的channel。
多路复用选择器常通过报头的某个值来选择写入哪一个channel。
一个source对应几个channel时用。

13.你是如何实现Flume数据传输的监控的

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

13.Ganglia框架是如何监控flume数据传输的?
(1)安装完Ganglia后在flume配置文件中与Ganglia关联,配置监控参数,类型,主机
(2)启动flume任务
(3)打开Ganglia Web页面查看flume相关参数,通过往flume放的Event条数和拿出的Event条数做对比是否丢失数据或出现异常

14.Flume如何保证数据传输的完整性?
一:Flume的事务机制
Flume的事务机制(类似数据库的事务机制):Flume使用两个独立的事务分别负责从soucrce到channel,以及从channel到sink的事件传递。spooling directory source 为文件的每一行创建一个事件,一旦事务中所有的事件全部传递到channel且提交成功,那么source就将该文件标记为完成。同理,事务以类似的方式处理从channel到sink的传递过程,如果因为某种 原因使得事件无法记录,那么事务将会回滚。且所有的事件都会保持到channel中,等待重新传递。

二:Flume的At-least-once提交方式
Flume的事务机制,总的来说,保证了source产生的每个事件都会传送到sink中。但是值得一说的是,实际上Flume作为高容量并行采集系统采用的是At-least-once(传统的企业系统采用的是exactly-once机制)提交方式,这样就造成每个source产生的事件至少到达sink一次,换句话说就是同一事件有可能重复到达。这样虽然看上去是一个缺陷,但是相比为了保证Flume能够可靠地将事件从source,channel传递到sink,这也是一个可以接受的权衡。spooldir的使用,Flume会对已经处理完的数据进行标记。

三:Flume的批处理机制
为了提高效率,Flume尽可能的以事务为单位来处理事件,而不是逐一基于事件进行处理。spooling directory source以100行文本作为一个批次来读取(BatchSize属性来配置,类似数据库的批处理模式)。批处理的设置尤其有利于提高file channle的效率,这样整个事务只需要写入一次本地磁盘,或者调用一次fsync,速度回快很多。

15.flume 调优 :
source :
1 ,增加 source 个数,可以增大 source 读取能力。
2 ,具体做法 : 如果一个目录下生成的文件过多,可以将它拆分成多个目录。每个目录都配置一个 source 。
3 ,增大 batchSize : 可以增大一次性批处理的 event 条数,适当调大这个参数,可以调高 source 搬运数据到 channel 的性能。
channel :
1 ,memory :性能好,但是,如果发生意外,可能丢失数据。
2 ,使用 file channel 时,dataDirs 配置多个不同盘下的目录可以提高性能。
3 ,transactionCapacity 需要大于 source 和 sink 的 batchSize 参数
sink :
增加 sink 个数可以增加消费 event 能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值