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作爲其配置文件啓動代理時,它將實例化該流程。