Flume

Flume

1. Flume

日志采集

  1. 读数据 组件是 resource
  2. 缓存数据 channel 原因是读写速度的不一致,可以缓存在内存或本地文件,临时储存。看做一个数据的缓冲区(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件
  3. 写数据 组件是 sink
  • source
    • Exec Source:实时搜集一个文件中新增的数据,不支持断点续传
    • Spooling Directory Source:监控目录,新的文件,不支持断点续传
    • TailDir Source:flume1.7 新加入的组件,支持断点续传
  • channel
    • memory channel:保存在内存,速度快,可能丢数据
    • file channel:保存在磁盘的文件中,不会丢数据,速度慢
    • kafka channel:省去sink,下一级必须是kafka,即直接传给kafka
  • sink

拦截器

  • ETL拦截器:清洗
  • 类型拦截器:分类

flume 把内部的格式统一封装为 event,保存一些描述信息和具体数据

拦截器的位置在Source和Channel之间,当我们为Source指定拦截器后,我们在拦截器中会得到event,根据需求我们可以对event进行保留还是抛弃,抛弃的数据不会进入Channel中。

Flume可靠性在于Sink 必须在Event 被存入 Channel 后,或者,已经被传达到下一站agent里,又或者已经被存入外部数据目的地之后,才能把 Event 从 Channel 中 remove 掉。而Flume支持在本地保存一份文件 channel 作为备份,而memory channel 将event存在内存 queue 里,速度快,但丢失的话无法恢复。

1
2
3
4
5
6
配置写到HDFS
hdfs.rollCount = 10 // 相当于event采集到10条数据就写一次
hdfs.batchSize = 100 // 相当于event在写数据的时候一批的数量
hdfs.fileType = SequenceFile // 默认是SequenceFile,还有 DataStream(原始数据是什么,写完也是什么)

tier1.sinks.hdfsSink_26.hdfs.path = hdfs://nameservice/user/flume/kafka/hehe/%{topic}/%Y%m%d