核心概念
web
Event算法
Clientapache
Agentapi
Sources、Channels、Sinks緩存
其餘組件:Interceptors、Channel Selectors、Sink Processor負載均衡
核心概念:Event
spa
Event是Flume數據傳輸的基本單元。flume以事件的形式將數據從源頭傳送到最終的目的。Event由可選的hearders和載有數據的一個byte array構成。.net
載有的數據對flume是不透明的代理
Headers是容納了key-value字符串對的無序集合,key在集合內是惟一的。日誌
Headers能夠在上下文路由中使用擴展
public interface Event {
public Map<String, String> getHeaders();
public void setHeaders(Map<String, String> headers);
public byte[] getBody();
public void setBody(byte[] body);
}
核心概念:Client
Clinet是一個將原始log包裝成events而且發送它們到一個或多個agent的實體。
例如
Flume log4j Appender
可使用Client SDK (org.apache.flume.api)定製特定的Client
目的是從數據源系統中解耦Flume
在flume的拓撲結構中不是必須的
核心概念:Agent
一個Agent包含Sources, Channels, Sinks和其餘組件,它利用這些組件將events從一個節點傳輸到另外一個節點或最終目的。
agent是flume流的基礎部分。
flume爲這些組件提供了配置、生命週期管理、監控支持。
核心概念:Source
Source負責接收events或經過特殊機制產生events,並將events批量的放到一個或多個Channels。有event驅動和輪詢2種類型的Source
不一樣類型的Source:
和衆所周知的系統集成的Sources: Syslog, Netcat
自動生成事件的Sources: Exec, SEQ
用於Agent和Agent之間通訊的IPC Sources: Avro
Source必須至少和一個channel關聯
核心概念:Channel
Channel位於Source和Sink之間,用於緩存進來的events,當Sink成功的將events發送到下一跳的channel或最終目的,events從Channel移除。
不一樣的Channels提供的持久化水平也是不同的:
Memory Channel: volatile
File Channel: 基於WAL(預寫式日誌Write-Ahead Logging)實現
JDBC Channel: 基於嵌入Database實現
Channels支持事務
提供較弱的順序保證
能夠和任何數量的Source和Sink工做
核心概念:Sink
Sink負責將events傳輸到下一跳或最終目的,成功完成後將events從channel移除。
不一樣類型的Sinks:
存儲events到最終目的的終端Sink. 好比: HDFS, HBase
自動消耗的Sinks. 好比: Null Sink
用於Agent間通訊的IPC sink: Avro
必須做用與一個確切的channel
核心概念:Interceptor
用於Source的一組Interceptor,按照預設的順序在必要地方裝飾和過濾events。
內建的Interceptors容許增長event的headers好比:時間戳、主機名、靜態標記等等
定製的interceptors能夠經過內省event payload(讀取原始日誌),在必要的地方建立一個特定的headers。
核心概念:Channel Selector
Channel Selector容許Source基於預設的標準,從全部Channel中,選擇一個或多個Channel
內建的Channel Selectors:
複製Replicating: event被複制到相關的channel
複用Multiplexing: 基於hearder,event被路由到特定的channel
核心概念:Sink Processor
多個Sink能夠構成一個Sink Group。一個Sink Processor負責從一個指定的Sink Group中激活一個Sink。Sink Processor能夠經過組中全部Sink實現負載均衡;也能夠在一個Sink失敗時轉移到另外一個。