apache flume-仅发送新文件内容

up9lanfz  于 2021-06-04  发布在  Flume
关注(0)|答案(1)|浏览(373)

我是一个非常新的用户,请把我作为一个绝对的noob。我在为一个特定的用例配置flume时遇到了一个小问题,希望您能提供帮助。请注意,我没有使用hdfs,这就是为什么这个问题不同于您在论坛上看到的其他问题。
我有两个虚拟机(vm)通过oraclevirtualbox上的内部网络相互连接。我的目标是让一个vm监视一个特定的目录,这个目录中只有一个文件。当文件更改时,我希望flume只发送新行/数据。我希望另一个vm接收这个数据,并将数据更新/连接到其特定目录中的单个文件。
到目前为止,我已经非常接近这个过程的工作。每当在vm1中进行更改时,它们都会在vm2上更新。但是,vm1上的整个文件每次都发送到vm2,而不是新行。例如,如果我写了“test1”,然后不久在vm1上的文件下面写了“test2”,那么在vm2上的输出将是:
测试1
测试1
测试2
我想看到的是:

Test1

            Test2

我不知道如何实现这一点,并发送此电子邮件后,彻底检查了flume用户指南文档和最相关的文章stackoverflow/stackexchange。以下是当前的配置(它们以我上面提到的方式工作),供您参考。
vm1配置
vm2配置
我意识到另一个解决方案是保持vm1上的配置,并在每次检测到新内容时覆盖vm2上的文件。然而,我也不确定如何实现这一点。
非常感谢您的帮助!

jw5wzhpr

jw5wzhpr1#

使用flume中提供的taildir源。它定期写入位置文件中读取的最后一个位置,并且比exec源更可靠,因为即使在代理崩溃或由于某种原因停止时,它也会从位置文件中保存的最后一个位置开始读取。

agent1.sources.src1.type = TAILDIR 
agent1.sources.src1.channels = ch1 
agent1.sources.src1.filegroups =f1
agent1.sources.src1.filegroups.f1= //path to log file 
agent1.sources.src1.maxBackoffSleep = 10000

根据您的需要设置maxbackoffsleep值这意味着代理在轮询日志文件中的更改之前,当它在上次尝试中没有发现任何更改时,应该等待多长时间。

相关问题