Flume防止重复消费——断点续传

本文介绍了如何使用Flume的Taildir Source防止重复消费日志。Taildir Source能够可靠地跟踪文件的读取位置,即使文件轮替也不会丢失数据。当Flume进程重启时,它会从position文件中恢复上一次的读取位置,从而实现断点续传。文中还探讨了Taildir Source根据文件名而非inode进行采集,以及在进程重启后如何处理的情况。

Flume防止重复消费

  通常我们使用exec类型的source,通过执行 tail命令来监控采集日志的,但是如果agent进程突然挂了,下次重启采集任务,会导致日志文件内容重复采集。这里可以采用Taildir Source来防止重复消费问题。

基本配置

  监听目标文件,当数据被添加到文件后能实时地tail它们。如果正在写入新行,则此source将重试读取它们以等待写入完成。此source是可靠的,即使tail的文件轮替也不会丢失数据。它定期以JSON格式写入给定位置文件上每个文件的最后读取位置。如果Flume由于某种原因stop或down,它可以从文件position处重新开始tail。在其他用法中,此source也可以通过给定的position文件从每个文件的任意位置开始tail。当指定路径上没有position文件时,默认情况下它将从每个文件的第一行开始tail。文件将按修改时间顺序使用。将首先使用具有最早修改时间的文件。此source不会重命名或删除或对正在tail的文件执行任何修改。目前此source不支持tail二进制文件,它只能逐行读取文本文件。其功能的重点就在于有一个记录采集文件position记录,每次重新采集都可以从该记录中获取上一次的position,接着上次往后采集,因此能够解决断点续传的问题,以避免重复消费问题。
在Flume的conf目录下创建配置文件:kafka-producer-moercredit.conf:

pro.sources = s1
pro.channels = c1
pro.sinks = k1

pro.sources.s1.type = TAILDIR
pro.sources.s1.positionFile = /home/dev/flume/flume-1.8.0/log/taildir_position.json
pro.sources.s1.filegroups = f1//是一组文件,可以以空格分隔,也支持正则表达式
pro.sources.s1.filegroups.f1 = /home/dev/log/moercredit/logstash.log
pro.sources.s1.headers.f1.headerKey1 = aaa
pro.sources.s1.fileHeader = true
pro.sources.s1.channels = c1

pro.channels.c1.type = memory
pro.channels.c1.capacity = 1000
pro.channels.c1.transactionCapacity = 100

pro.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
pro
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值