首页 > 其他分享 >Flume面试

Flume面试

时间:2022-08-31 23:25:01浏览次数:89  
标签:Flume flume 拦截器 source 面试 数据 channel

flume概述

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

使用Taildir Source采集文件夹数据到hdfs

  • Taildir Source 是Apache flume1.7新推出的,但是CDH Flume1.6做了集成
  • Taildir Source是高可靠(reliable)的source,他会实时的将文件偏移量写到json文件中并保存到磁盘。下次重启Flume时会读取Json文件获取文件O偏移量,然后从之前的位置读取数据,保证数据零丢失
  • Taildir Source可同时监控多个文件夹以及文件。即使文件在实时写入数据。
  • Taildir Source也是无法采集递归文件下的数据,这需要改造源码
  • Taildir Source监控一个文件夹下的所有文件一定要用.*正则

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

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

2、flume 有哪些组件,flume 的 source、channel、sink 具体是做什么的?

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

3、你是如何实现Flume数据传输的监控的

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

4、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 能力

5 、事务机制 :

channel : 是位于 source 和 sink 之间的缓冲区。
1 ,flume 自带两种缓冲区,file channel 和 memory channel
2 ,file channel : 硬盘缓冲区,性能低,但是安全。系统宕机也不会丢失数据。
3 ,memory channel :内存缓冲区,性能高,但是有可能丢数据,在不关心数据有可能丢失的情况下使用。
put 事务流程 : 源将数据给管道
1 ,doPut :把数据写入临时缓冲区 putList 。
2 ,doCommit :检查 channel 内存队列是否足够合并。
3 ,doRollBack : 如果 channel 不行,我们就回滚数据。
take 事务流程 :
1 ,先将数据取到临时缓冲区 takeList。
2 ,doCommit :如果数据全部发送成功,就清除临时缓冲区。
3 ,doRollBack :如果数据发送过程中出现异常,doRollBack 将临时缓冲区的数据还给 channel 队列

6、Flume拦截器

Flume拦截器之Event

  • event是flume中处理消息的基本单元,由零个或者多个header和正文body组成。
  • Header 是 key/value
    形式的,可以用来制造路由决策或携带其他结构化信息(如事件的时间戳或事件来源的服务器主机名)。通过key-value的形式展示在表头
  • Body是一个字节数组,包含了实际的内容。
  • flume提供的不同source会给event添加不同的header信息。

内置拦截器(直接通过 .conf文件编写使用)

List item

Timestamp
Interceptor拦截器就是可以往event的header中插入关键词为timestamp的时间戳。

host拦截器
该拦截器可以往event的header中插入关键词默认为host的主机名或者ip地址(注意是agent运行的机器的主机名或者ip地址)

Regex Filtering Interceptor拦截器 (重要)
Regex Filtering Interceptor拦截器用于过滤事件,筛选出与配置的正则表达式相匹配的事件。可以用于包含事件和排除事件。常用于数据清洗,通过正则表达式把数据过滤出来。

自定义拦截器
使用场景:

在实际的开发中,一台服务器产生的日志类型可能有很多种,不同类型的日志可能需要发送到不同的分析系统。此时会用到 Flume 拓扑结构中的 Multiplexing(多路复用) 结构,Multiplexing的原理是,根据 event 中 Header 的某个 key 的值,将不同的 event 发送到不同的 Channel中,所以我们需要自定义一个 Interceptor,为不同类型的 event 的 Header 中的 key 赋予不同的值。

步骤:

1.创建一个项目,并且引入flume对应的依赖依赖
2.自定义拦截器,实现拦截器接口Interceptor
3,打成jar包,上传flume的job目录
4,编写.conf文件,在sources组件中通过拦截器类的全限名路径使用自定义拦截器
5,测试

7、Flume的工作机制是什么?

核心概念是agent,里面包括source,channel和sink三个组件。
Source运行在日志收集节点进行日志采集,之后临时存储在channel中,sink负责将channel中的数据发送到目的地。
只有发送成功channel中的数据才会被删除。
首先书写flume配置文件,定义agent、source、channel和sink然后将其组装,执行flume-ng命令。

8、flume的使用场景

基本数据过滤;多路日志合并;日志多路输出;端口监听;

9、flume中的通道选择器

1.复制Channel选择器 (replicating )

特点:数据同步给多个Channel

参考:企业开发案例 - 单数据源多出口案例(选择器)

2.多路复用Channel选择器 (multiplexing)

特点:数据分流到指定Channel

参考:自定义拦截器

 

标签:Flume,flume,拦截器,source,面试,数据,channel
From: https://www.cnblogs.com/huanghanyu/p/16644895.html

相关文章

  • ClickHouse高频面试题
     1、简单介绍一下ClickHouseClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。主要用于WEB流量分析。ClickHouse的全称是ClickStream,DataWareHouse......
  • Spark面试题
     一、Spark基础篇1、Spark是什么?Spark是一个通用分布式内存计算引擎。2009年在加州大学伯克利分校AMP实验室诞生,2014年2月,Spark成为Apache的顶级项目。......
  • Flink面试题
    1.什么是ApacheFlink(为什么使用Flink替代Spark?)        ApacheFlink是一个开源的基于流的有状态计算框架。它是分布式地执行的,具备低延迟、高吞吐的优秀性......
  • Flink CDC 高频面试题
      1cdc简介CDC(ChangeDataCapture)是一种用于捕捉数据库变更数据的技术,Flink从1.11版本开始原生支持CDC数据(changelog)的处理,目前已经是非常成熟的变更......
  • 面试高频,屡试不爽的mysql索引特性总结
    (1)FROM子句组装来自不同数据源的数据(2)WHERE子句基于指定的条件对记录进行筛选(3)GROUPBY子句将数据划分为多个分组(4)使用聚合函数进行计算(5)......
  • 数据源:flume采集到的端口
    推送式将flume采集的数据主动推送给Spark程序,容易导致Spark程序接受数据出问题,推送式整合是基于avro端口下沉地方式完成引入SparkStreaming和Flume整合的依赖<depende......
  • 面试官:HBase 有哪些优化点?
    作者:大叔据来自:大叔据这是个相对开放的问题,问题没有那么得细,面对这种问题千万不要乱了阵脚,其实这种问题答得好是很加分的,可以从几个不同的方向来回答,这样显得有......
  • 面试题之:SpringMVC框架
    1、谈一下你对SpringMVC框架的理解(了解)SpringMVC是一个基于Java的、实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将we......
  • 前端面试题每日3题——2022/08/30
    1以下代码执行后,控制台中的输出内容为?for(leti=0;i<3;i++){setTimeout(()=>{console.log(i);});}for(varj=0;j<3;j++){setTimeout......
  • JAVA面试题总结归纳
    问题一:JAVA的原始数据类型有哪些,它们的大小以及其对应的封装类是什么?数据类型对应大小对应的封装类boolean1bit,boolean类型单独使用是4个字节,而在数组中又是1个......