我想了解flume-ng如何处理文件名冲突的这种情况。 假设我有几个配置相同的 Flume 代理实例,并且客户端将它们用作负载均衡组。
a1.sinks.k1.hdfs.path = /flume/events/path
flume 代理如何生成文件名以使其在代理之间唯一?它是否以某种方式附加代理名称(名称看起来像数字,因此很难弄清楚)?
最佳答案
Flume 不会自动解决这个问题。默认情况下,HDFS接收器会创建名称等于当前时间戳(以毫秒为单位)的新文件,因此如果同时创建两个文件,可能会发生冲突。
解决此问题的一种方法是在不同的接收器中手动设置不同的文件前缀:
a1.sinks.k1.hdfs.filePrefix = agentX
您还可以在前缀定义中使用事件 header 。例如,如果您使用 host interceptor ,它会向事件“host” header 添加代理主机名的值,您可以执行以下操作:
a1.sinks.k1.hdfs.filePrefix = ${host}
如果您需要完全自动生成唯一的文件名,您可以开发自己的拦截器,它将向事件添加 UUID header 。查看示例here .
关于java - 多个 Flume-ng hdfs 接收器写入同一路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16023887/