我想了解 flume-ng 将如何处理文件名冲突方面的这种情况。假设我有几个配置相同的水槽代理实例,客户端将它们用作负载平衡组。
a1.sinks.k1.hdfs.path = /flume/events/path
Flume 代理如何生成文件名以使它们在代理之间具有唯一性?它是否以某种方式将代理名称附加到它(名称看起来像数字,所以很难弄清楚)?
Flume 不会自动解决这个问题。默认情况下,HDFS sink 创建名称等于当前时间戳(以毫秒为单位)的新文件,因此如果同时创建两个文件,可能会发生冲突。
修复它的一种方法是在不同的接收器中手动设置不同的文件前缀:
a1.sinks.k1.hdfs.filePrefix = agentX
您也可以在前缀定义中使用事件标头。例如,如果您使用主机拦截器,它将代理主机名的值添加到事件“主机”标头中,您可以执行以下操作:
a1.sinks.k1.hdfs.filePrefix = ${host}
如果您需要完全自动生成唯一的文件名,您可以开发自己的拦截器,它将 UUID 标头添加到事件中。请参阅此处的示例。