首页 > 其他分享 >FLume相关面试题

FLume相关面试题

时间:2024-12-04 18:54:38浏览次数:5  
标签:FLume Flume 面试题 source Channel 相关 数据 channel sink

1.为什么要有Flume?

客户端服务器,与集群服务器是分开的,而日志文件业务数据都是在客户端服务器产生的,所以需要在客户端服务器安装一个工具,将数据发送到集群服务器或者其他地方,这个工具就是Flume。

 

2.Flume架构

source :专门用于收集数据的,可以处理各种类型、格式的数据。

channel:负责聚合数据,对采集到的数据进行缓存的,这是防止数据采集和发送速度不均衡完成拥堵。

sink:专门用于发送数据的,可以发送到不同的目的地,去hdfs,kafka,hbase。

 

event:Flume数据传输的基本单元,对数据进行序列化,包含header(头信息),body(数据本身)

拦截器:可以在拦截器内实时处理数据,对于数据非常有用

由于source收集和sink发送速度不均衡,容易造成拥堵,所以需要一个中转站暂时存放数据,就是channel

File Channel:数据存储于磁盘,安全可靠。

Memory Channel:数据存储于内存,速度快。

Kafka Channel:数据存储于 Kafka,传输速度最快,省去sink阶段,如果果下一级是 Kafka,优先选择。

 

数据可能有各种来源,收集的方式不同,这是source 的主要工作,可以设置不同的收集方式:

采集某个文件的数据

指定接收某个端口的数据

采集文件的增加数据

 

数据可能要发送给不同的对象,发送的方式不同,这是sink的主要工作,可以设置不同的发送方式:

打印到控制台

指定服务器:端口进行发送

发送到hdfs集群

发送到kafka

 

3.Flume 有哪些组件,Flume 的 source、channel、sink 具体是做什么的?

(1).source:用于采集数据,Source 是产生数据流的地方,同时 Source 会将产生的数据流传输到 Channel,这个有点类似于 Java IO 部分的 Channel。

(2).channel:用于桥接 Sources 和 Sinks,类似于一个队列。

(3).sink:从 Channel 收集数据,将数据写到目标源(可以是下一个 Source,也可以是 HDFS或者 HBase)。

 

4.如何实现Flume数据传输的实时监控

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

1)采用Ganglia监控器,监控到Flume尝试提交的次数远远大于最终成功的次数,说明Flume运行比较差。主要是内存不够导致的。

2)解决办法?

(1)自身:Flume默认内存2000m。考虑增加Flume内存,在flume-env.sh配置文件中修改Flume内存为4-6g

-Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc。

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

搞活动 618  —> 增加服务器 —> 用完在退出

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

 

5.Channel selectors是什么

events或者说数据要可以通过不同的channel 发送到不同的sink中去,那么events要发送到哪个channel 就是由于channel selectors决定的。

channel selectors包括了

 

Replicating channel selectors 复制选择器

Multiplexing channel selectors 多路选择器

默认的是复制选择器,即每个channel的数据都是一样的,多路选择权就需要按照制定的规则去判断了。

 

6.Flume参数调优思路

首先就是启动多个Flume

source :如果采集速度比较慢,可以考虑

启动多个source 进行采集;

调整batchSize,决定了source 一次批量运输events到channel 的条数,适当调大可以提高source 搬运events到channel 的性能

channel:

缓存方式(type)选择内存(memory)时,channel性能最好,但是会有丢失数据的风险;选择磁盘(file)时,可靠性更好,但是性能差一点,可以选择多个不同盘下的目录来提高性能;

参数Capacity决定了channel 可容纳最大的events条数;参数transactionCapacity决定了每次source往channel写/sink从channel读的最大enents条数。注意:transactionCapacity要大于source和sink的batchsize

sink:增加sink的个数;参数batchsize决定了sink一次批量从channel 读取的events条数

 

7.Flume的事务机制

Flume使用两个独立事务put和take,分别负责从source 到channel 、channel 到sink,记录事件状态,保证两个过程的数据不会丢失

 

8.Flume的数据会丢失吗?

根据Flume的事务机制,Flume的数据一般不会丢失,除非使用的时候memory channel ,在机器宕机的时候会导致数据丢失,或者channel 满了,sources无法写入导致数据丢失

此外,也有可能完成数据重复,比如sink接收到一批数据,处理到一半宕机了,处理完的数据没有给channel 发送响应,导致channel 重新发送数据,造成数据重复。

 

9.零点漂移问题,在Flume中如何解决?

零点漂移问题:举个例子,我有一些日志文件,需要通过Flume按照日期存放到hdfs中,那么就需要用到日期了,而HdfsSink是默认继续event的heard生成的时间戳进行分区存放的,这个时间是生成event的时间,而不是数据的生成时间,所以存在一个时间差。如果刚好这个时间跨过了一天,那么就会导致日期增加了一天,这个就是零点漂移。

解决:在source组件内增加拦截器,从event的body中拿出数据生成时间,替换掉header的时间

 

10.Flume组成,Put事物,Task事务?

答:Flume组成,Put事物,Task事务

a. Taildir Source:断点续传、多目录

b. File Channel:数据存储在磁盘中,宕机数据可以保存。传输速率慢,适合对数据传输可靠性要求高的场景,例如:金融行业

c. Memory Channel:数据存储在内存中,宕机数据容易丢失。传输效率快,适合对数据传输可靠性要求不高的场景,例如:日志数据

d. Kafka Channel:减少Flume的Sink阶段,提高了传输效率

 

Source到Channel是Put事务

Channel到Sink是Task事务

 

 

11.Flume Event?

Event是数据流的基本单元,由一个装载数据的字节数组(byte payload)和一系列可选的字符串属性来组成(可选头部)。

 

12.Flume的事务机制

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

 

13.Flume 和 Kafka 采集日志区别,采集日志时中间停了,怎么记录之前的日志?

答:(1)Flume 采集日志是通过流的方式直接将日志收集到存储层,而 kafka 是将缓存在 kafka集群,待后期可以采集到存储层。

(2)Flume 采集中间停了,可以采用文件的方式记录之前的日志,而 kafka 是采用 offset 的方式记录之前的日志。

 

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

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

 

15.Flume拦截器

1)拦截器注意事项

(1)ETL拦截器:主要是用来判断json是否完整。没有做复杂的清洗操作主要是防止过多的降低传输速率。

(2)时间戳拦截器:主要是解决零点漂移问题

2)自定义拦截器步骤

(1)实现 Interceptor

(2)重写四个方法

  • initialize 初始化
  • public Event intercept(Event event) 处理单个Event
  • public List<Event> intercept(List<Event> events) 处理多个Event,在这个方法中调用Event intercept(Event event)
  • close方法

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

3)拦截器可以不用吗?

     ETL拦截器可以不用;需要在下一级Hive的dwd层和SparkSteaming里面处理

    时间戳拦截器建议使用。  如果不用需要采用延迟15-20分钟处理数据的方式,比较麻烦。

标签:FLume,Flume,面试题,source,Channel,相关,数据,channel,sink
From: https://www.cnblogs.com/yeyuzhuanjia/p/18586955

相关文章

  • 嵌入式Linux,文件I/O深入探究,函数相关详解。
    1. 返回错误处理在Linux系统下对常见的错误做了一个编号,每一个编号都代表着每一种不同的错误类型,当函数执行发生错误的时候,操作系统会将这个错误所对应的编号赋值给errno变量,每一个进程都维护了自己的errno变量,它是程序中的全局变量,该变量用于存储就近发生的函......
  • StarRocks 相关面试题
    1、StarRocks的MV(物化视图)机制是如何工作的?StarRocks的物化视图(MV)机制通过预先计算和存储数据的聚合结果或者转换结果来提高查询性能。其工作原理如下:(1)、数据预处理:在创建物化视图时,StarRocks会对指定的表进行数据聚合或转换操作,然后将结果存储在物化视图中。这个过程类......
  • 如何寻找Oracle相关的资源?
    我经常在面对一个问题的时候,到处查询,很多片段的内容,整合才能得到袭击想要的答案。在一个月前我写了一个流水账的文章,记录自己工作的一部分内容:《Oracle数据库从11g升级到19c》(https://www.cnblogs.com/lndt/articles/18501706)。这边文章中,有两个资源:autoupgrade.jar和jdk-11......
  • vue3开发中常见的代码错误或者其他相关问题小文章1.0
    1. 模块解析失败错误示例:Failedtoresolveimport"some-module"from"src/main.js".Doesthefileexist?解决方案:确认模块名称拼写正确。确认模块已经安装(通过 npminstall 或 yarnadd)。检查路径是否正确,确保相对路径或绝对路径指向正确的文件。2. Composi......
  • 嵌入式硬件工程师面试题
    1、请解释WatchDog(看门狗)的工作原理。看门狗有两个重要信号:时钟输入和复位输出。电路工作时,CPU送出时钟信号给看门狗,即喂狗。如果系统出现故障,CPU无法送出连续的时钟信号,看门狗即输出复位信号给CPU,复位系统。2、晶体管基本放大电路有共射、共集、共基三种接法,请简述这......
  • 前端热门面试题目(四)——计算机网路篇
    计算机网络常见面试题:计算机网络面试(一)计算机网络面试(二)计算机网络速成:计算机网络速成一计算机网络速成二计算机网络速成三2.HTTP1.0和2.0的区别连接复用:HTTP/1.0使用短连接(默认每个请求创建一个TCP连接)。HTTP/2.0支持多路复用,一个TCP连接可以并发处......
  • 前端热门面试题目——React、Node
    img标签的srcset属性的作用srcset属性允许开发者为不同设备或分辨率提供多个图像选项,优化加载的图片以适应设备的屏幕大小和分辨率。这提高了性能和用户体验。示例:<imgsrc="default.jpg"srcset="small.jpg480w,medium.jpg1024w,large.jpg1600w"s......
  • 运维工程师.云计算工程师面试题.考试题
    《(全国)运维自动化阶段第1套卷》卷面总分题号单选题90题分得分一、单选题(每题2分,共计70分;得分____)1.下面哪个选项可以做变量名称?()A、ifB、123abcC、forD、User_Name2.哪种数据类型可以做增,删,改相关操作?()A、字符串B、列表C、元组D、数字3.哪种数据类型......
  • Mysql高频面试题汇总
    Mysql高频面试题一.sql如何定位查询慢定义sql查询慢可以哈斯用相关的运维工具或者mysql自身提供的慢日志查询功能来实现,在我的项目当中也是采用了Skywalking链路追踪的中间件用来监控接口执行情况,在Skywalking中可以我们可以针对运行速度慢的接口进行查询,在其提......
  • 前端面试题(20241204)
    1.v-if和v-show的区别?v-if是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建,操作的实际上是dom元素的创建或销毁。v-show不管初始条件是什么,元素总是会被渲染,并且只是简单地基于CSS进行切换它操作的是display:none/bloc......