面试之FLUME经典问题:Flume的Source阶段会丢数据吗?

会,但分情况

当source使用的Execsource异步source,当channel 容量设置满了,是无法通知客户端暂停数据生成,会造成数据丢失。

如何解决?

可以考虑使用SpoolingDirSource或TailDirSource 或者自己写source

SpoolingDirSource

SpoolingDirSource指定本地磁盘的一个目录为"Spooling(自动收集)"的目录!这个source可以读取目录中
        新增的文件,将文件的内容封装为event!
        
        SpoolingDirSource在读取一整个文件到channel之后,它会采取策略,要么删除文件(是否可以删除取决于配置),要么对文件
        进程一个完成状态的重命名,这样可以保证source持续监控新的文件!
        
        SpoolingDirSource和execsource不同,SpoolingDirSource是可靠的!即使flume被杀死或重启,依然不丢数据!但是为了保证
        这个特性,付出的代价是,一旦flume发现以下情况,flume就会报错,停止!
                ①一个文件已经被放入目录,在采集文件时,不能被修改
                ②文件的名在放入目录后又被重新使用(出现了重名的文件)
                
        要求: 必须已经封闭的文件才能放入到SpoolingDirSource,在同一个SpoolingDirSource中都不能出现重名的文件!
    使用:
        必需配置:
        type    –    The component type name, needs to be spooldir.
        spoolDir    –    The directory from which to read files from.

TailDirSource

flume ng 1.7版本后提供
        
        常见问题: TailDirSource采集的文件,不能随意重命名!如果日志在正在写入时,名称为 xxxx.tmp,写入完成后,滚动,
                    改名为xxx.log,此时一旦匹配规则可以匹配上述名称,就会发生数据的重复采集!
    简介:
        Taildir Source 可以读取多个文件最新追加写入的内容!
        Taildir Source是可靠的,即使flume出现了故障或挂掉。Taildir Source在工作时,会将读取文件的最后的位置记录在一个
        json文件中,一旦agent重启,会从之前已经记录的位置,继续执行tail操作!
        
        Json文件中,位置是可以修改,修改后,Taildir Source会从修改的位置进行tail操作!如果JSON文件丢失了,此时会重新从
        每个文件的第一行,重新读取,这会造成数据的重复!
        
        Taildir Source目前只能读文本文件
        
    必需配置:
        channels    –     
        type    –    The component type name, needs to be TAILDIR.
        filegroups    –    Space-separated list of file groups. Each file group indicates a set of files to be tailed.
        filegroups.<filegroupName>    –    Absolute path of the file group. Regular expression (and not 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值