定义流

要在单个Agent中定义流,你需要通过channel连接source和sink。需要在配置文件中列出所有的source、sink和channel,然后将source和sink指向channel。一个source可以连接多个channel,但是sink只能连接一个channel。格式如下:

  1. # 列出Agent的所有Source、Channel、Sink
  2. <Agent>.sources = <Source>
  3. <Agent>.sinks = <Sink>
  4. <Agent>.channels = <Channel1> <Channel2>
  5.  
  6. # 设置Channel和Source的关联
  7. <Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...
  8.  
  9. # 设置Channel和Sink的关联
  10. <Agent>.sinks.<Sink>.channel = <Channel1>

例如,一个叫做agent_foo的Agent从外部avro客户端读取数据并通过内存channel将其发送到HDFS(准确说并不是通过内存channel发送的数据,而是使用内存channel缓存,然后通过HDFS Sink从channel读取后发送的),它的配置文件应该这样配:

  1. # 列出Agent的所有source、sink和channel
  2. agent_foo.sources = avro-appserver-src-1
  3. agent_foo.sinks = hdfs-sink-1
  4. agent_foo.channels = mem-channel-1
  5.  
  6. agent_foo.sources.avro-appserver-src-1.channels = mem-channel-1 # 指定与source avro-appserver-src-1 相连接的channel是mem-channel-1
  7. agent_foo.sinks.hdfs-sink-1.channel = mem-channel-1 # 指定与sink hdfs-sink-1 相连接的channel是mem-channel-1

通过上面的配置,就形成了[avro-appserver-src-1]->[mem-channel-1]->[hdfs-sink-1]的数据流,这将使Event通过内存channel(mem-channel-1)从avro-appserver-src-1流向hdfs-sink-1,当Agent启动时,读取配置文件实例化该流。