Flume面试题

本文详细介绍了Flume作为一款用于海量日志采集、聚合和传输的工具,探讨了其架构、监控方法、事务机制以及数据丢失和零点漂移的解决方案。重点讲解了source、channel和sink的角色,以及如何通过参数调优确保系统的性能和可靠性。
摘要由CSDN通过智能技术生成

Flume一个分布式、可靠、高可用的海量日志采集、聚合、传输系统。

Flume面试很少问比较底层的东西,相当于是一个采集工具,会用会解决故障就好。

目录

1.为什么要有flume?

2.Flume架构

3.如何实现flume数据传输的实时监控

4.Channel selectors是什么

5.flume参数调优思路

6.flume的事务机制

7.flume的数据会丢失吗?

8.零点漂移问题,在flume中如何解决?


1.为什么要有flume?

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

2.Flume架构

  • source :专门用于收集数据的,可以处理各种类型、格式的数据。
  • channel:负责聚合数据,对采集到的数据进行缓存的,这是防止数据采集和发送速度不均衡完成拥堵。
  • sink:专门用于发送数据的,可以发送到不同的目的地,去hdfs,kafka,hbase
  • event:flume数据传输的基本单元,对数据进行序列化,包含header(头信息),body(数据本身)
  • 拦截器:可以在拦截器内实时处理数据,对于数据非常有用
  1. 由于source收集和sink发送速度不均衡,容易造成拥堵,所以需要一个中转站暂时存放数据,就是channel 
    1. File Channel:数据存储于磁盘,安全可靠。
    2. Memory Channel:数据存储于内存,速度快。
    3. Kafka Channel:数据存储于 Kafka,传输速度最快,省去sink阶段,如果果下一级是 Kafka,优先选择。
  2. 数据可能有各种来源,收集的方式不同,这是source 的主要工作,可以设置不同的收集方式:
    1. 采集某个文件的数据
    2. 指定接收某个端口的数据
    3. 采集文件的增加数据
  3. 数据可能要发送给不同的对象,发送的方式不同,这是sink的主要工作,可以设置不同的发送方式:
    1. 打印到控制台
    2. 指定服务器:端口进行发送
    3. 发送到hdfs集群
    4. 发送到kafka

3.如何实现flume数据传输的实时监控

使用第三方框架ganglia实时监控flume

4.Channel selectors是什么

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

  • Replicating channel selectors 复制选择器
  • Multiplexing channel selectors 多路选择器

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

5.flume参数调优思路

  1. 首先就是启动多个flume
  2. source :如果采集速度比较慢,可以考虑
    1. 启动多个source 进行采集;
    2. 调整batchSize,决定了source 一次批量运输events到channel 的条数,适当调大可以提高source 搬运events到channel 的性能
  3. channel:
    1. 缓存方式(type)选择内存(memory)时,channel性能最好,但是会有丢失数据的风险;选择磁盘(file)时,可靠性更好,但是性能差一点,可以选择多个不同盘下的目录来提高性能;
    2. 参数Capacity决定了channel 可容纳最大的events条数;参数transactionCapacity决定了每次source往channel写/sink从channel读的最大enents条数。注意:transactionCapacity要大于source和sink的batchsize
  4. sink:增加sink的个数参数batchsize决定了sink一次批量从channel 读取的events条数

6.flume的事务机制

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

7.flume的数据会丢失吗?

  1. 根据flume的事务机制,flume的数据一般不会丢失,除非使用的时候memory channel ,在机器宕机的时候会导致数据丢失,或者channel 满了,sources无法写入导致数据丢失
  2. 此外,也有可能完成数据重复,比如sink接收到一批数据,处理到一半宕机了,处理完的数据没有给channel 发送响应,导致channel 重新发送数据,造成数据重复。

8.零点漂移问题,在flume中如何解决?

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

  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值