【大数据面试题】(六)Flume 相关面试题总结_flume 和 kafka 采集日志的区别,采集日志时中断了,如何记录之前的日志

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
img

正文

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

source :搜集数据
channel :数据缓存
sink :把数据发送到目的地
常用 source 类型 :
1、 监控文件 :exec
2、监控目录 :spooldir

七、为什么使用Flume?

在这里插入图片描述

八、Flume组成架构?

在这里插入图片描述
关于flume事务

flume要尽可能的保证数据的安全性,其在source推送数据到channel以及sink从channel拉取数据时都是以事务方式进行的。因为在agent内的两次数据传递间都会涉及到数据的传送、从数据上游删除数据的问题;就比如sink从channel拉取数据并提交到数据下游之后需要从channel中删除已获取到的批次数据,其中跨越了多个原子事件,故而需要以事务的方式将这些原子事件进一步绑定在一起,以便在其中某个环节出错时进行回滚防止数据丢失。所以在选用file channel时一般来说是不会丢失数据的。

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 队列

九、FlumeAgent内部原理?

在这里插入图片描述

十、Flume Event 是数据流的基本单元。

它由一个装载数据的字节数组(byte payload)和一系列可选的字符串属性来组成(可选头部)。

在这里插入图片描述

十一、Flume agent

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 的组件

在这里插入图片描述

十二、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。

在这里插入图片描述

十三、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、自定义。

在这里插入图片描述

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

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

十五、flume 调优

source :

  1. 增加 source 个数,可以增大 source 读取能力。
  2. 具体做法 : 如果一个目录下生成的文件过多,可以将它拆分成多个目录。每个目录都配置一个 source 。
  3. 增大 batchSize : 可以增大一次性批处理的 event 条数,适当调大这个参数,可以调高
    source 搬运数据到 channel 的性能。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

。**

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-ueKTQdfE-1713357366419)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值