Flume 大厂面试宝典

6,020 阅读3分钟

这是我参与更文挑战的第9天,活动详情查看:更文挑战

一、FLume组成部分

1. taildir source

  • 断点续传、多目录
  • Flume Apache1.7 CDH1.6 版本产生的
  • 没有断点续传功能时怎么做的? 自定义
  • taildir挂了怎么办?
    • 不会丢数:断点续传
    • 重复数据:怎么处理重复数据?
      • 不处理:生产环境通常不处理,出现重复的概率比较低。处理会影响传输效率。
      • 处理
        • 自身:在taildirsource里面增加自定义事务,影响效率
        • 下一级借助其他框架处理:(hive dwd sparkstreaming flink布隆),(groupby、开窗取窗口第一条、redis)
  • 是否支持递归遍历文件夹读取文件?
    • 不支持. 可自定义 递归遍历文件夹 + 读取文件

2. file channel memory channel kafka channel

  • File Channel
    • 数据存储于磁盘,优势:可靠性高;劣势:传输速度低
    • 默认容量:100万event
    • 注意:FileChannel可以通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量。
  • Memory Channel
    • 数据存储于内存,优势:传输速度快;劣势:可靠性差
    • 默认容量:100个event
  • Kafka Channel
    • 数据存储于Kafka,基于磁盘;
    • 优势:可靠性高;
    • 传输速度快 Kafka Channel 大于Memory Channel + Kafka Sink 原因省去了Sink阶段
  • Kafka Channel 哪个版本产生的
    • Flume1.6 版本产生, 因为有bug并没有火;
    • topic-start 数据内容
    • topic-event 数据内容 ture 和false 很遗憾,都不起作用。
    • 增加了额外清洗的工作量。
    • Flume1.7 解决了这个问题,开始火了
  • 生产环境选择
    • 如果下一级是Kafka,优先选择Kafka Channel
    • 如果是金融、对钱要求准确的公司,选择File Channel
    • 如果就是普通的日志,通常可以选择Memory Channel
    • pb级每天丢几百万数据 -> 类如:首付,会在乎那几块钱?

3. HDFS sink

  • 如何配置生成文件策略:时间(1小时-2小时) 或者 文件大小128mevent个数要禁止(0禁止)
    • 具体参数:
      • hdfs.rollInterval=3600
      • hdfs.rollSize=134217728
      • hdfs.rollCount=0

4. 事务

  • Source到Channel是Put事务
  • Channel到Sink是Take事务

二、Flume拦截器

1. 拦截器注意事项

  • 多个拦截器的优缺点:
    • 优点,模块化开发和可移植性
    • 缺点,性能会低一些

2. 自定义拦截器步骤

  • 实现 Interceptor
  • 重写四个方法
    1. initialize 初始化
    2. public Event intercept(Event event) 处理单个Event
    3. public List intercept(List events) 处理多个Event,在这个方法中调用Event intercept(Event event)
    4. close方法
  • 静态内部类,实现Interceptor.Builder

3. 拦截器可以不用吗?

  • 可以不用;需要在下一级hive的dwd层和sparksteaming里面处理
  • 优势:只处理一次,轻度处理
  • 劣势:影响性能,不适合做实时推荐这种对实时要求比较高的场景

三、Flume Channel选择器

1. Replicating

  • 默认选择器, 功能:将数据发往下一级所有通道

2. Multiplexing

  • 选择性发往指定通道

四、Flume监控器

  • 采用Ganglia监控器
    • 监控到Flume尝试提交的次数远远大于最终成功的次数,说明Flume运行比较差,解决办法?
      • 增加内存flume-env.sh 4-6g -Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc
      • 增加服务器数量

五、Flume数据会丢失吗

  • FileChannel : 不会, 存储在File中,数据传输自身有事务
  • MemoryChannel : 有可能丢