共計 1608 個字符,預計需要花費 5 分鐘才能閱讀完成。
這篇文章主要為大家展示了“Flume 整體架構是怎么樣的”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Flume 整體架構是怎么樣的”這篇文章吧。
1、Flume 介紹
Flume 是 cloudera 公司開源的一款分布式、可靠地進行大量日志數據采集、聚合和并轉移到存儲中;通過事務機制提供了可靠的消息傳輸支持,自帶負載均衡機制來支撐水平擴展;并且提供了一些默認組件供直接使用。
Flume 目前常見的應用場景:日志 — Flume— 實時計算(如 Kafka+Storm)、日志 — Flume— 離線計算(如 HDFS、HBase)、日志 — Flume— ElasticSearch。
2、整體架構
Flume 主要分為三個組件:Source、Channel、Sink;數據流如下圖所示:
1、Source 負責日志流入,比如從文件、網絡、Kafka 等數據源流入數據,數據流入的方式有兩種輪訓拉取和事件驅動;
2、Channel 負責數據聚合 / 暫存,比如暫存到內存、本地文件、數據庫、Kafka 等,日志數據不會在管道停留很長時間,很快會被 Sink 消費掉;
3、Sink 負責數據轉移到存儲,比如從 Channel 拿到日志后直接存儲到 HDFS、HBase、Kafka、ElasticSearch 等,然后再有如 Hadoop、Storm、ElasticSearch 之類的進行數據分析或查詢。
一個 Agent 會同時存在這三個組件,Source 和 Sink 都是異步執行的,相互之間不會影響。
假設我們有采集并索引 Nginx 訪問日志,我們可以按照如下方式部署:
1、Source 采集的日志會傳入 ChannelProcessor 組件,其首先通過 Interceptor 進行日志過濾,如果接觸過 Servlet 的話這個概念是類似的,可以參考《Servlet3.1 規范翻譯——過濾器 》;過濾器可以過濾掉日志,也可以修改日志內容;
2、過濾完成后接下來會交給 ChannelSelector 進行處理,默認提供了兩種選擇器:復制或多路復用選擇器;復制即把一個日志復制到多個 Channel;而多路復用會根據配置的選擇器條件,把符合條件的路由到相應的 Channel;在寫多個 Channel 時可能存在存在失敗的情況,對于失敗的處理有兩種:稍后重試或者忽略。重試一般采用指數級時間進行重試。
我們之前說過 Source 生產日志給 Channel、Sink 從 Channel 消費日志;它倆完全是異步的,因此 Sink 只需要監聽自己關系的 Channel 變化即可。
到此我們可以對 Source 日志進行過濾 / 修改,把一個消息復制 / 路由到多個 Channel,對于 Sink 的話也應該存在寫失敗的情況,Flume 默認提供了如下策略:
Failover 策略是給多個 Sink 定義優先級,假設其中一個失敗了,則路由到下一個優先級的 Sink;Sink 只要拋出一次異常就會被認為是失敗了,則從存活 Sink 中移除,然后指數級時間等待重試,默認是等待 1s 開始重試,最大等待重試時間是 30s。
Flume 也提供了負載均衡策略:
1、首先是日志采集層,該層的 Agent 和應用部署在同一臺機器上,負責采集如 Nginx 訪問日志;然后通過 RPC 將日志流入到收集 / 聚合層;在這一層應該快速的采集到日志然后流入到收集 / 聚合層;
2、收集 / 聚合層進行日志的收集或聚合,并且可以進行容錯處理,如故障轉移或負載均衡,以提升可靠性;另外可以在該層開啟文件 Channel,做數據緩沖區;
3、收集 / 聚合層對數據進行過濾或修改然后進行存儲或處理;比如存儲到 HDFS,或者流入 Kafka 然后通過 Storm 對數據進行實時處理。
以上是“Flume 整體架構是怎么樣的”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!