15_Flume之TailSource源码修改(修复Flume任务故障文件重命名数据丢失)

17 篇文章 0 订阅
17 篇文章 0 订阅
当Flume的TailSource在监听日志文件时,遇到文件按时间滚动重命名的情况,可能会因任务故障导致数据丢失。问题在于TailSource依赖iNode+文件名作为唯一键记录偏移量。如果任务在日志文件重命名后重启,会从新文件开始采集,丢失旧文件中的数据。修复方案是修改唯一键只使用iNode,避免文件名影响,防止数据丢失。这种方法可能导致监听整个文件夹时的数据重复。
摘要由CSDN通过智能技术生成
1. 问题-Flume任务故障,文件重命名数据丢失

我们常用TailSource来监听日志文件,被监听的日志文件是常配置了按时间滚动生成方式的,也就是一天一个文件,到零点时会将gather.log更名为gather-20230415.log。

由于 tailSource 是根据 iNode + 文件名称组成唯一键进行监听,并记录偏移量的;

假设,设置Flume任务只监听 gather.log(也可以监听整个日志文件夹,但有问题,看完下面就明白) ,

Flume采集任务在 2023-04-15的22点出现故障,任务挂掉了,运维人员在第二天上午10点才发现并重启服务;

重启服务后,任务从偏移量记录表中找到iNode + gather.log 对应的偏移量,但是日志文件中新生成了 gather.log,原来的已经更名为gather-20230415.log,

任务就重新生成一组唯一键,进行记录偏移量,从头开始采集新的 gather.log 。

这样新数据是可以正常采集的,但是 gather-20230415.log 里的在 22点到 00点 产生的数据我们就没有采集到,这样就产生数据丢失。

如果设置监听文件夹下全部文件,上面情况是不是就导致数据重复。

修复后就直接设置为采集文件夹下的内容(使用正则)

2. 修复

修改 唯一键 只使用iNode,剔除文件名称。

项目结构:

image-20230415151445251

org.apache.flume.source.taildir.TailFile

image-20230415154116727

org.apache.flume.source.taildir.ReliableTaildirEventReader

image-20230415154124527

打包

替换 ${FLUME_HOME}/lib/flume-taildir-source-1.9.0.jar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值