我是Flume的新用户,请将我视为绝对的菜鸟。我在针对特定用例配置Flume时遇到了一个小问题,并希望您能提供帮助。请注意,我没有使用HDFS,这就是为什么这个问题与您在论坛上看到的其他问题不同的原因。
我有两个虚拟机(VM)通过Oracle Virtual Box上的内部网络相互连接。我的目标是让一个VM观察一个只有一个文件的特定目录。当文件改变时,我希望Flume只发送新的行/数据。我希望其他VM接收此数据并将数据更新/连接到其上特定目录中的单个文件。
到目前为止,我的这个过程非常接近于工作。每当在VM1中进行更改时,它们都会在VM2上更新。但是,VM1上的整个文件每次都发送到VM2,而不是新行。例如,如果我写了“Test1”,然后一段时间后写了“Test2”到VM1上的文件,在VM2上输出将是:
测试1
测试1
的Test2
我想看到的是:
Test1
Test2
我不确定如何实现这一点,并在彻底检查了Flume用户指南文档和stackoverflow / stackexchange上的大多数相关文章后发送此电子邮件。供您参考,以下是当前配置(它们按照我上面提到的方式工作)。
我意识到另一种解决方案是在VM1上保持配置并在每次检测到新内容时覆盖VM2上的文件。但是,我也不确定如何实现这一点。
非常感谢您提供的任何帮助!
答案 0 :(得分:1)
使用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值意味着代理在轮询日志文件中的更改之前应该等待多长时间,当它在上次尝试中没有找到任何更改时。