flume常用source问题总结

来源:互联网 发布:mysql数据类型 编辑:程序博客网 时间:2024/06/05 05:57

一、SpoolDirectorySource 
作用: 
监测配置的目录下新增的文件,并将文件中的数据读取出来。 
问题: 
1.spool目录下的文件不可以再打开编辑;spool目录下不可包含相应的子目录

2.SpoolSource无法实现实时的收集数据 
解决:log4j TimeRolling的插件,分割机制设为1分钟一次,需改log4j配置文件

3.无法使用TimeRolling插件,手工copy到监控目录,文件过大,出现边读边写错误 
解决:copy文件增加tmp后缀,source配置忽略tmp后缀文件,copy成功后,去掉tmp后缀

4.该源需要一个清理进程来定期移除完成的文件。

5.通道可选地将一个完成路径的原始文件插入到每个事件的hearder域中。在读取文件时,source缓存文件数据到内存中。同时,需要确定设置了bufferMaxLineLength选项,以确保该数据远大于输入数据中数据最长的某一行。

6.channel只接收spooling directory中唯一命名的文件。如果文件名重复或文件在读取过程中被修改,则会有读取失败返回异常信息。这种场景下,同名的文件复制到这个目录时建议带唯一标示,比如时间戳

二、Exec Source 
1.当发生日志轮转的时候,因为tail -f命令打开的还是原来的文件描述符,所以就无法获取到当天新日志文件的内容 
解决:tail命令的–retry选项会定期检查文件名对应的文件描述符的变化;使用-F 相当于 -f=filename –retry
解释:使用–follow (-f)时,tail默认后接文件描述符, 这意味着即使tail显示的文件改名了,tail仍然可以追踪到其末尾部分. 如果你确实希望查询文件的实际名而非文件描述符 (例如,日志轮转时), 这种默认的操作就不是你所期望的了.

2.flume-ng进程停止后,tail进程没停止 
解决:使用tail –pid $PID ,–pid 表示如果PID进程结束则tail也会跟着结束,所以PID可以设置为flume进程

3.没有办法做到生产速率控制 
解决:用Java程序实现了“模拟tail -F”的功能,主要是使用ExceSource,定时修改Flume的配置文件

4.Flume不运行或者指令执行出错时,无法断点续传以及恢复(单点故障) 
解决:二次开发tailSource或者配置复杂均衡或者使用flume1.7新增加的tailDirSource

5.Flume提供快速恢复的机制,但是默认竟然是关闭的! 
解决:设置三个参数:restartThrottle,restart,logStdErr解决