工作中推荐
Spooling Directory Source
配置:
vi /home/hadoop/app/apache-flume-1.6.0-cdh5.16.2-bin/config/flume-spooling.conf
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = TAILDIR
a1.sources.r1.channels = c1
a1.sources.r1.positionFile = /home/hadoop/tmp/position/taildir_position.json
a1.sources.r1.filegroups = f1 f2
a1.sources.r1.filegroups.f1 = /home/hadoop/tmp/flume/test1/example.log
a1.sources.r1.headers.f1.headerKey1 = value1
a1.sources.r1.filegroups.f2 = /home/hadoop/tmp/flume/test2/.*log.*
a1.sources.r1.headers.f2.headerKey1 = value2
a1.sources.r1.headers.f2.headerKey2 = value2-2
a1.sources.r1.fileHeader = true
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
注意:这个并没有进入文件系统,注意看配置logger
配置好可以启动了
flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/config/taildir-memory-logger.conf --name a1 -Dflume.root.logger=INFO,console
启动完成后,在切换一个连接窗口,创建相应文件夹及文件/home/hadoop/tmp/flume/test1/example.log和/home/hadoop/tmp/flume/test2/
以下操作主要针对数据不丢失做的案例:
第一步:进入到你刚创建的文件夹
[hadoop@hadoop000 ~]$cd /home/hadoop/tmp/flume/test1/
[hadoop@hadoop000 test1]$ echo 111 >> example.log
[hadoop@hadoop000 test1]$ echo 222 >> example.log
[hadoop@hadoop000 test1]$cd /home/hadoop/tmp/flume/test2/
[hadoop@hadoop000 test2]$ echo aaa >> 1.log
之后去刚刚启动flume的那个窗口,看下输出日志,可以显示出你刚刚输入的内容。
第二步:关掉flume,ctrl+z,并没彻底关闭,jps找到相对于进程kill -9掉。
[hadoop@hadoop000 test1]$ echo 333>> example.log
[hadoop@hadoop000 test1]$ echo 444>> example.log
[hadoop@hadoop000 test1]$cd /home/hadoop/tmp/flume/test2/
[hadoop@hadoop000 test2]$ echo bbb>> 1.log
第三步:启动fume
flume-ng agent --conf $FLUME_HOME/conf --conf-file $FLUME_HOME/config/taildir-memory-logger.conf --name a1 -Dflume.root.logger=INFO,console
根据启动日志可以发现,刚关闭flume后输入的信息,现在又同步进来了,说明就算flume挂掉,数据也不存在丢失问题。
总结:为什么会这样呢?
我们通过配置可以发现,他有一个a1.sources.r1.positionFile参数,相当于flume是通过偏移量进行数据消费的,所以就算flume挂掉,之后一直往flume监控的文件夹下写数据,也没事,
当flume重新启动的时候,会读取配置文件中存放偏移量那个json文件,会按照挂掉当时的偏移量进行往下读取数据。