1.數據流模型:
Flume event 被定義爲具有字節有效負載和可選字符串屬性集的數據流單元。Flume代理是一個(JVM)進程,它繼承 event 從外部數據源流向下一個目標(跳躍hop)的組件。
Flume source 消耗由外部源(如web服務器)傳遞給它的event。外部source以目標Flume source識別的格式向Flume發送事件。
例如:Avro Flume源可以用於從Avro客戶端或從Avro接收器發送事件的流中的其他Flume agent接收Avro event。可以使用Thrift Flume Source定義類似的流程,以接受來自Thrift Sink 或者Flume Thrift Rpc client。
當Flume源接收事件時,它將其存儲到一個或多個channel。該channel是一個被動存儲器,可以保存event直道它被Flume接收器消費。
文件通道就是一個例子。它由本地文件系統支持,接收器從通道中移除事件並將其放入外部存儲庫(如HDFS(通過Flume HDFS接收器))或將其轉發到流中下一個Flume agent。
給定Agent中的source和sink與channel中的所有事件異步運行。
2.複雜的流:
Flume允許用戶構建多跳multi-hop流,其中事件在到達最終目的地之前經過多個agent。 它還允許fan-in和fan-out,上下文路由和故障跳躍的備份路由(故障轉移)。
3.可靠性:
Event 在每個agent中channel中,然後將evnet傳遞到流中的下一個agent或者終端存儲庫(HDFS)。只有將event存儲在下一個agent的channel或者終端存儲庫後(被消費後),纔會從channel中刪除。這個就是Flume中的單跳消息傳遞語義如何提供流的end-to-end端到端的可靠性。
Flume使用事物(transactional)方法來保證event的可靠傳遞。source與sink分別在事務中封裝了由信道提供的事務中放置或提供的事件的storafe/retrieval。
這可以確保event set 在流中從一個point-to-point的可靠傳遞。在多跳流的情況下,來自前一跳的sink和來自下一跳source都運行其事務以確保數據安全地存儲在下一跳的信道中。
4.可恢復性:
當該channel管理從故障中恢復時,events留存channel中。Flume支持由本地文件系統支持的持久化的channel。還有一個內在通道,它只是將事件存儲在內存中的隊列中,
這更快,但是當agent進程死亡時仍留在內存通道中的任何事件都無恢復。