大数据常见面试题之flume

一.flume组成和事务

flume组成为source channel sink 事务包含put事务 take事务
常用的source channel

  • taildir source: 断点续传,多目录. flume1.6以前需要自己自定义source记录每次读取文件位置,实现断点续传
  • file channel: 数据存储在磁盘,宕机数据可以保存.但是传输速率慢.适合对数据传输可靠性要求高的场景,比如金融行业
  • memory channel: 数据存储在内存中,宕机数据丢失.传输速率快.适合对数据传输可靠性要求不高的场景,比如普通的日志数据
  • kafka channel: 减少了 flume的sink阶段,提高了传输效率
    source 到 channel是put事务 channel 到 sink 是take事务

二.kafka channel

  • memory channel有很大的丢数据风险,而且容量一般,file channel 虽然能缓存更多的消息,但如果缓存下来的消息还没写入sink,此时agent出现故障则file channel中的消息一样不能被继续使用,知道该agent恢复.而kafka channel容量大,容错能力强
  • 有了kafka channel 可以在日志收集层只配置source组件和kafka组件,不需要再配sink组件,减少了日志收集层启动的进程数,有效降低服务器内存,磁盘等资源的使用率
  • 而日志汇聚层,可以只配置kafka channel和sink,不需要再配置source

三.flume常用sink

  • **1.hdfs sink:**将event写入hdfs文件存储,能够有效长期存储大量数据
  • 2.kafka sink: flume通过kafka sink将event写入到kafka中的主题,其他应用通过订阅主题消费数据.kafak.producer.acks 可以设置producer端发送消息到broker之后不需要等待broker返回成功送达的信号
  • 0 表示producer发送消息到broker之后不需要等待broker返回成功送达的信号,这种方式吞吐高,但存在丢失数据的风险
  • 1表示broker接受到消息成功写入本地log文件后向producer返回成功接收的信号,不需要等待所有的follower全部同步完消息后再回应.这种方式在数据丢失风险和吞吐量之间做了平衡
  • -1表示broker接收到producer的消息成功写入本地log并且等待所有的follower成功写入本地log后向producer返回成功接收的信号,这种方式能够保证消息不丢失,但是性能最差

四.flume拦截器

  • source将event写入到channel之前可以使用拦截器对event进行各种形式的处理,source和channel之间可以有多个拦截器,不同拦截器使用不同的规则处理event,包括时间,主机,UUID,正则表达式等多种形式的拦截器
  • 一般在开发中使用自定义拦截器

五.flume选择器

  • source发送到event通过channel选择器来选择以哪种方式写入到channel中,flume提供三种类型channel选择器,分别是复制,复用和自定义选择器
  • 复制选择器:一个source以复制的方式将一个event同时写入到多个channel中,不同的sink可以从不同的channel中获取相同的event,比如一份日志数据同时写kafka和hdfs,一个event同时写入两个channel,然后不同类型的sink发送到不同的外部存储
  • 复用选择器:需要和拦截器配合使用,根据event的头信息中不同键值数据来判断event应该写入到哪个channel中

六.flume负载均衡和故障转移

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

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

  • 使用第三方框架Ganglia实时监控flume
  • 这种监控方式需要先安装ganglia然后启动ganglia,然后再启动flume的时候加上监控配置,如下:
    flume-ng agent -c conf -f conf/producer.properties -n agent -Dflume.monitoring.type=ganglia -Dflume.monitoring.hosts=localhost:88888
  • flume监控还可以使用Zabbix,但是这种方式需要在flume源码中添加监控模块,相对比较麻烦,由于不少flume自带的监控方式,这里不讨论这种方式
  • 因此,flume自带的监控方式其实是http,ganglia两种,http监控只能通过一个http地址访问得到一个json格式的监控数据,而ganglia监控是拿到这个数据后用界面的方式展示出来,相对比较直观

猜你喜欢

转载自blog.csdn.net/sun_0128/article/details/108063042