1.Flume支持许多从外部源获取数据的机制。
2.RPC模式
Flume发行版本包含的Avro客户端可以使用Avro RPC 机制将给定文件发送到Flume Avro源。
$ bin/flume-ng avro-client -H localhost -p 41414 -F /usr/logs/log.10
上面的命令会将/usr/logs/log.10的内容发送到监听该端口的Flume源。
3.执行命令
有一个exec源执行给定的命令并消费输出数据。输出的单条数据即文本后面跟着 \r 或者 \n。
4.网络流
Flume支持以下机制从常用日志流类型中读取数据
- Avro
- Thrift
- Syslog
- Netcat
5.设置多个agent流
为了跨多个agent或者source,先前agent的sink和source需要是avro类型,sink指向source的主机名(ip)和端口。
6.合并
日志收集中非常常见的是大量日志生成客户端将数据发送到连接存储子系统的少数消费者agent.
从数百个web服务器收集的日志发送给写入HDFS集群的十几个agent。
这可以通过使用avro的sink配置多个第一层agent在Flume中实现,所有这些agent都指向单个agent的avro source(同样,这里也可以使用thrift source/sink/client)。第二层agent 的source将接收的时间合并到单个channel中。该channel由sink消费到存储目的。
7.多路复用流程
Flume支持将event流多路复用到一个或多个目的地。这是通过定义可以复制或选择性的将event路由到一个或者多个channel的流复用来实现的。
上图的例子显示来自Agent foo的流程扩展到三个不同的通道。对于多路复用的情况,当事件的属性与预配置的值匹配时,事件将被传递到可用的通道子集。例如:
如果一个txnType event设置为消费者consumer,那么他应该转到channel1和channel3, 如果她是vendors生产者,那么他应该转到channel2,否则到channel3.
8.定义流程
要在单个agent中定义流,需要通过通道连接source 和 sink,你需要列出给定的agent的source,sink 和 channel,然后将source和sink指向channel。source可以指向多个channel,但sink实例只能指定一个channel。格式如下:
# list the sources, sinks and channels for the agent <Agent>.sources = <Source> <Agent>.sinks = <Sink> <Agent>.channels = <Channel1> <Channel2> # set channel for source <Agent>.sources.<Source>.channels = <Channel1> <Channel2> ... # set channel for sink <Agent>.sinks.<Sink>.channel = <Channel1> |
例如,名为foo的Agent正在从外部avro client读取数据并通过内存channel将其发送到HDFS。配置文件weblog.config如下所示:
# list the sources, sinks and channels for the agent agent_foo.sources = avro-appserver-src-1 agent_foo.sinks = hdfs-sink-1 agent_foo.channels = mem-channel-1 # set channel for source agent_foo.sources.avro-appserver-src-1.channels = mem-channel-1 # set channel for sink agent_foo.sinks.hdfs-sink-1.channel = mem-channel-1 |
该event从avro-AppSrv-source流向hdfs-Cluster1-sink,通过内存mem-channel-1。当使用webblog。config作为其配置文件启动代理时,它将实例化该流程。