flume

1.作用

日志采集

Flume是流式日志采集工具,FLume提供对数据进行简单处理并且写到各种数据接收方(可定制)的能力,Flume提供从本地文件(spooling directory source)、实时日志(taildir、exec)、REST消息、Thift、Avro、Syslog、Kafka等数据源上收集数据的能力。

2.Flume架构

https://jiandansuifeng.blog.csdn.net/article/details/118926483

https://www.jianshu.com/p/9a5c682b0551

三大核心组件:

  • Source:数据源
  • Channel:临时存储数据的管道
  • Sink: 目的地

3.拦截器(interceptor)

https://blog.51cto.com/u_15241496/2869403

拦截器是简单的插件式组件,设置在source和channel之间。source接收到的事件event,在写入channel之前,拦截器都可以进行转换或者删除这些事件。每个拦截器只处理同一个source接收到的事件。可以自定义拦截器。

1 jar包

2 将打包的jar放到XXX/flume/lib

3 配置文件

/opt/module/flume/conf

vim file-flume-kafka.conf

1
2
3
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type =
com.atguigu.flume.interceptor.ETLInterceptor$Builder

4.为什么要集成Flume和Kafka

https://blog.csdn.net/qq_37466640/article/details/103425555

5.例子

4.1 采集日志

1)Source

(1)Taildir Source相比Exec Source、Spooling Directory Source的优势

TailDir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。不会丢数据,但是有可能会导致数据重复。

Exec Source可以实时搜集数据,但是在Flume不运行或者Shell命令出错的情况下,数据将会丢失。

Spooling Directory Source监控目录,支持断点续传。

(2)batchSize大小如何设置?

答:Event 1K左右时,500-1000合适(默认为100)

2)Channel

采用Kafka Channel,省去了Sink,提高了效率。KafkaChannel数据存储在Kafka里面,所以数据是存储在磁盘中。

注意在Flume1.7以前,Kafka Channel很少有人使用,因为发现parseAsFlumeEvent这个配置起不了作用。也就是无论parseAsFlumeEvent配置为true还是false,都会转为Flume Event。这样的话,造成的结果是,会始终都把Flume的headers中的信息混合着内容一起写入Kafka的消息中,这显然不是我所需要的,我只是需要把内容写入即可。

3)Sink

省去了Sink,提高了效率

4)Interceptor

ETLInterceptor

4.2 消费数据

1)Source

2)Channel

MemoryChannel传输数据速度更快,但因为数据保存在JVM的堆内存中,Agent进程挂掉会导致数据丢失,适用于对数据质量要求不高的需求。FileChannel传输速度相对于Memory慢,但数据安全保障高,Agent进程挂掉也可以从失败中恢复数据。

金融类公司、对钱要求非常准确的公司通常会选择FileChannel

传输的是普通日志信息(京东内部一天丢100万-200万条,这是非常正常的),通常选择MemoryChannel。

3)Sink

HDFS Sink

4)Interceptor

TimeStampInterceptor

flume时间拦截器

获取日志中的实际时间

Author

Lavine Hu

Posted on

2022-01-30

Updated on

2022-04-23

Licensed under

Comments

:D 一言句子获取中...