Java 多个Flume ng hdfs接收器写入同一路径

Java 多个Flume ng hdfs接收器写入同一路径,java,logging,hdfs,flume,Java,Logging,Hdfs,Flume,我想了解flume ng将如何处理文件名冲突方面的这种情况。 Asume I有几个相同配置的flume代理实例,客户端将它们用作负载平衡组 a1.sinks.k1.hdfs.path=/flume/events/path flume代理如何生成文件名以使其在代理之间唯一?它是否以某种方式附加了代理名称(名称看起来像数字,所以很难理解) 水槽不会自动解决此问题。默认情况下,HDFS接收器会创建名称等于当前时间戳(以毫秒为单位)的新文件,因此如果同时创建两个文件,则可能会发生冲突 解决此问题的一种方

我想了解flume ng将如何处理文件名冲突方面的这种情况。 Asume I有几个相同配置的flume代理实例,客户端将它们用作负载平衡组

a1.sinks.k1.hdfs.path=/flume/events/path


flume代理如何生成文件名以使其在代理之间唯一?它是否以某种方式附加了代理名称(名称看起来像数字,所以很难理解)

水槽不会自动解决此问题。默认情况下,HDFS接收器会创建名称等于当前时间戳(以毫秒为单位)的新文件,因此如果同时创建两个文件,则可能会发生冲突

解决此问题的一种方法是在不同的接收器中手动设置不同的文件前缀:

a1.sinks.k1.hdfs.filePrefix = agentX
也可以在前缀定义中使用事件头。例如,如果使用,它会将代理主机名的值添加到事件“主机”头中,则可以执行以下操作:

a1.sinks.k1.hdfs.filePrefix = ${host}

如果您需要完全自动生成唯一的文件名,您可以开发自己的拦截器,该拦截器将向事件添加UUID头。请参阅示例。

事实上,如果文件大小足够大(由sink的“rollSize”参数控制),则不会发生sink冲突。