大数据面试题整理(一)---->>Flume

1、flume了解吗。简单介绍一下

Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,
Agent是flume流的基础部分,Agent是一个JVM进程,Agent的三大组成部分:source、channel、sink。传输数据的基本单元是Event。
优势:

  1. Flume可以将应用产生的数据存储到任何集中存储器中,比如HDFS,HBase。
  2. 当收集数据的速度超过将写入数据的时候,也就是当收集信息遇到峰值时,这时候收集的信息非常大,甚至超过了系统的写入数据能力,这时候,Flume会在数据生产者和数据收容器间做出调整,保证其能够在两者之间提供平稳的数据。
  3. Flume的管道是基于事务,保证了数据在传送和接收时的一致性。
  4. Flume是可靠的,容错性高的,可升级的,易管理的,并且可定制的。

2. 知道 Flume 的 Channel 是啥吗

Channel 被设计为 Event 中转临时缓冲区,存储 Source 收集并且没有被Sink 读取的 Event,为平衡 Source
收集和 Sink 读取的速度,可视为 Flume内部的消息队列。 Channel 线程安全并且具有事务性,支持 Source 写失败写,和Sink 读失败重复读的操作。常见的类型包括 Memory Channel,File Channel, Kafka Channel。

3. 介绍一下 Memory Channel(内存中的队列)

读写速度快,但是存储数据量小,Flume 进程挂掉、服务器停机或者重启都会导致数据丢失。资源充足、不关心数据丢失的场景下可以用。

4. 说说 File Channel

将 event 写入磁盘文件,与 Memory Channel 相比存储容量大,无数据丢失风险。File Channel
数据存储路径可以配置多磁盘文件路径,通过磁盘并行写入提高 File Channel 性能。Flume 将 Event 顺序写入到 File
Channel 文件的末尾。可以在配置文件中通过设置 maxFileSize
参数配置数据文件大小,当被写入的文件大小达到上限的时候,Flume 会重新创建新的文件存储写入 Event。当一个已经关闭的只读数据文件的
Event 被读取完成,并且 Sink 已经提交读取完成的事务,则 Flume 把存储该数据的文件删除。

5. 说说 Kafka Channel

Memory Channel 有很大的丢数据风险,而且容量一般,File Channel
虽然能缓存更多的消息,但如果缓存下来的消息还没写入 Sink,此时 Agent 出现故障则 File Channel
中的消息一样不能被继续使用,直到该 Agent 恢复。而 Kafka Channel 容量大,容错能力强。 有了 Kafka
Channel 可以在日志收集层只配置 Source 组件和 Kafka 组件,不需要再配置 Sink
组件,减少了日志收集层启动的进程数,有效降低服务器内存、磁盘等资源的使用率。而日志汇聚层,可以只配置 Kafka Channel
和Sink,不需要再配置 Source。
kafka.consumer.auto.offset.reset(配置kafka的consumer的策略),当 Kafka 中没有
Consumer 消费的初始偏移量或者当前偏移量在 Kafka 中不存在(比如数据已经被删除)情况下,Consumer 选择从 Kafka
拉取消息的方式,earliest 表示从最早的偏移量开始拉取,latest 表示从最新的偏移量开始拉取,none 表示如果没有发现该
Consumer组之前拉取的偏移量则抛出异常。

6. 介绍一下 Kafka 几种 Sink

  1. HDFS Sink: 将 Event 写入 HDFS 文件存储,能够有效长期存储大量数据。
  2. Kafka Sink: Flume 通过 Kafka Sink 将 Event 写入到 Kafka 中的主题,其他应用通过订阅主题消费数据。kafka.producer.acks 可以设置 Producer 端发送消息到 Broker
    之后不需要等待 Broker 返回成功送达的信号。
    (ACK机制)
    0表示Producer 发送消息到 Broker 之后不需要等待 Broker 返回成功送达的信号,这种方式吞吐量高,但存在丢失数据的风险。
    1表示 Broker 接收到消息成功写入本地 log 文件后向 Producer 返回成功 接收的信号,不需要等待所有的 Follower 全部同步完消息后再做回应,这种方式在数据丢失风险和吞吐量之间做了平衡。
    -1表示 Broker 接收到 Producer的消息成功写入本地log并且等待所有的Follower 成功写入本地 log 后向 Producer返回成功接收的信号,这种方式能够保证消息不丢失,但是性能最差(层层递进)。

7. 说说 Flume 的拦截器

Source 将 Event 写入到 Channel 之前可以使用拦截器对 Event 进行各种形式的处理,Source 和 Channel
之间可以有多个拦截器,不同拦截器使用不同的规则处理 Event,包括时间、主机、UUID、正则表达式等多种形式的拦截器。

8. 介绍一下什么是选择器

Source 发送的 Event 通过 Channel 选择器来选择以哪种方式写入到 Channel中,Flume 提供三种类型 Channel 选择器,分别是复制、复用和自定义选择器。

  1. 复制选择器(Replicating Channel Selector (default)): 一个 Source 以复制的方式将一个 Event 同时写入到多个Channel 中,不同的 Sink 可以从不同的 Channel 中获取相同的
    Event,比如一份日志数据同时写 Kafka 和 HDFS,一个 Event 同时写入两个Channel,然后不同类型的 Sink
    发送到不同的外部存储。
  2. 复用选择器(Multiplexing Channel Selector): 需要和拦截器配合使用,根据 Event 的头信息中不同键值数据来判断 Event 应该写入哪个 Channel 中。

9. 了解 Flume 的负载均衡和故障转移吗

目的是为了提高整个系统的容错能力和稳定性。简单配置就可以轻松实现,首先需要设置 Sink 组,同一个 Sink 组内有多个子Sink,不同 Sink 之间可以配置成负载均衡或者故障转移。

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

这个要看采用的flume Channel的类型, Memory Channel 数据存储在内存中,Flume进程挂掉、服务器停机或者重启都会导致数据丢失; File Channel,Channel 存储可以存储在 File 中,数据传输自身有事务; Kafka Channel,这里涉及到问题:数据拉倒kafka中数据是否会丢失,怎么解决?kafka中可以设置ack参数,参考第6题(ACK机制)。

11. FileChannel 优化

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

12. HDFS Sink 小文件处理

(1) HDFS 存入大量小文件,有什么影响?
元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在 Namenode
内存中。所以小文件过多,会占用Namenode 服务器大量内存,影响 Namenode 性能和使用寿命 计算层面:默认情况下 MR
会对每个小文件启用一个 Map 任务计算,非常影响计算性能。同时也影响磁盘寻址时间。
(2) HDFS 小文件处理(参数了解下,不用记忆具体命令) 官方默认的这三个参数配置写入HDFS后会产生小文件,hdfs.rollInterval、hdfs.rollSize、hdfs.rollCount 基于以上:
hdfs.rollInterval=3600 , //滚动生成正式文件时间(1小时)
hdfs.rollSize=134217728 //滚动生成正式文件大小(128M)
hdfs.rollCount =0 , // hdfs.roundValue=3600,
hdfs.roundUnit= second 几个参数综合作用,
效果如下:
(1) tmp 文件在达到 128M 时会滚动生成正式文件;
(2) tmp 文件创建超 3600 秒时会滚动生成正式文件; 举例:在 2018-01-01 05:23 的时侯 sink 接收到数据,那会产生如下 tmp 文件: /atguigu/20180101/atguigu.201801010520.tmp即使文件内容没有达到 128M,也会在 06:23 时滚动生成正式文件。

仅代表个人观点,如有错误,请指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值