Flume 面試

1、Flume 採集數據會丟失嗎?

Flume不會丟失數據,根據Flume的架構原理,其內部有完善的事務機制,Source到Channel是事務性的,Channel到Sink也是事務性的,所以這兩個環節不會出現數據的丟失;
惟一可能丟失數據的狀況是Channel採用memoryChannel,agent宕機致使數據丟失,或者Channel存儲數據已滿,致使Source再也不寫入,未寫入的數據丟失。web

可是有可能形成數據的重複,例如數據已經成功由Sink發出,可是沒有接收到響應,Sink會再次發送數據,此時可能會致使數據的重複。數據庫

2、Flume 與 Kafka 的選取?

採集層主要可使用 Flume、Kafka 兩種技術。數組

Flume:Flume 是管道流方式,提供了不少的默認實現,讓用戶經過參數部署,及擴展 API。緩存

Kafka:Kafka 是一個可持久化的分佈式的消息隊列。安全

Kafka 是一個很是通用的系統。你能夠有許多生產者和不少的消費者共享多個主題Topics。相比之下,Flume 是一個專用工具被設計爲旨在往 HDFS,HBase 發送數據。它對HDFS 有特殊的優化,而且集成了 Hadoop 的安全特性。因此,Cloudera 建議若是數據被多個系統消費的話,使用 kafka;
若是數據被設計給 Hadoop 使用,使用 Flume。正如大家所知 Flume 內置不少的 source 和 sink 組件。然而,Kafka 明顯有一個更小的生產消費者生態系統,而且 Kafka 的社區支持很差。但願未來這種狀況會獲得改善,可是目前:使用 Kafka 意味着你準備好了編寫你本身的生產者和消費者代碼。若是已經存在的 Flume Sources 和 Sinks 知足你的需求,而且你更喜歡不須要任何開發的系統,請使用 Flume。Flume 可使用攔截器實時處理數據。這些對數據屏蔽或者過量是頗有用的。Kafka 須要外部的流處理系統才能作到。服務器

Kafka 和 Flume 都是可靠的系統,經過適當的配置能保證零數據丟失。然而,Flume 不支持副本事件。因而,若是 Flume 代理的一個節點奔潰了,即便使用了可靠的文件管道方式,你也將丟失這些事件直到你恢復這些磁盤。若是你須要一個高可靠行的管道,那麼使用Kafka 是個更好的選擇。架構

Flume 和 Kafka 能夠很好地結合起來使用。若是你的設計須要從 Kafka 到 Hadoop 的流數據,使用 Flume 代理並配置 Kafka 的 Source 讀取數據也是可行的:你沒有必要實現本身的消費者。你能夠直接利用Flume 與HDFS 及HBase 的結合的全部好處。你可使用ClouderaManager 對消費者的監控,而且你甚至能夠添加攔截器進行一些流處理。分佈式

3、數據怎麼採集到 Kafka,實現方式?

使用官方提供的 flumeKafka 插件,插件的實現方式是自定義了 flume 的 sink,將數據從channle 中取出,經過 kafka 的producer 寫入到 kafka 中,能夠自定義分區等。工具

4、flume 管道內存,flume 宕機了數據丟失怎麼解決?

1)Flume 的 channel 分爲不少種,能夠將數據寫入到文件。oop

2)防止非首個 agent 宕機的方法數能夠作集羣或者主備

5、flume 和 kafka 採集日誌區別,採集日誌時中間停了,怎麼記錄以前的日誌?

Flume 採集日誌是經過流的方式直接將日誌收集到存儲層,而 kafka 是將緩存在 kafka集羣,待後期能夠採集到存儲層。

Flume 採集中間停了,能夠採用文件的方式記錄以前的日誌,而 kafka 是採用 offset 的方式記錄以前的日誌。

6、flume 有哪些組件,flume 的 source、channel、sink 具體是作什麼的?

1)source:用於採集數據,Source 是產生數據流的地方,同時 Source 會將產生的數據

流傳輸到 Channel,這個有點相似於 Java IO 部分的 Channel。

2)channel:用於橋接 Sources 和 Sinks,相似於一個隊列。

3)sink:從 Channel 收集數據,將數據寫到目標源(能夠是下一個 Source,也能夠是 HDFS

或者 HBase)。

7、爲何使用Flume?

8、Flume組成架構?

9、FlumeAgent內部原理?

十.Flume Event

它是數據流的基本單元,由一個裝載數據的字節數組(byte payload)和一系列可選的字符串屬性來組成(可選頭部).

11、Flume agent

Flume source 消耗從相似於 web 服務器這樣的外部源傳來的 events.

Flume source 組件能夠處理各類類型、各類格式的日誌數據,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy.

Flume channel

Channel 是鏈接Source和Sink的組件, 是位於 Source 和 Sink 之間的數據緩衝區。

Flume channel 使用被動存儲機制. 它存儲的數據的寫入是靠 Flume source 來完成的, 數據的讀取是靠後面的組件 Flume sink 來完成的.

Channel 是線程安全的,能夠同時處理幾個 Source 的寫入操做和幾個 Sink 的讀取操做。

Flume 自帶兩種 Channel:

Memory Channel是內存中的隊列。

Memory Channel在不須要關心數據丟失的情景下適用。

若是須要關心數據丟失,那麼Memory Channel就不該該使用,由於程序死亡、機器宕機或者重啓都會致使數據丟失。

File Channel。

File Channel將全部事件寫到磁盤。所以在程序關閉或機器宕機的狀況下不會丟失數據。

還能夠有其餘的 channel: 好比 JDBC channel.

  1. Flume sink

Sink 不斷地輪詢 Channel 中的事件且批量地移除它們,並將這些事件批量寫入到存儲或索引系統、或者發送到另外一個Flume Agent。

Sink 是徹底事務性的。

在從 Channel 批量刪除數據以前,每一個 Sink 用 Channel 啓動一個事務。批量事件一旦成功寫出到存儲系統或下一個Flume Agent,Sink 就利用 Channel 提交事務。事務一旦被提交,該 Channel 從本身的內部緩衝區刪除事件。若是寫入失敗,將緩衝區takeList中的數據歸還給Channel。

Sink組件目的地包括hdfs、logger、avro、thrift、ipc、file、null、HBase、solr、自定義。

12、Flume的事務機制

Flume的事務機制(相似數據庫的事務機制):Flume使用兩個獨立的事務分別負責從Soucrce到Channel,以及從Channel到Sink的事件傳遞。好比spooling directory source 爲文件的每一行建立一個事件,一旦事務中全部的事件所有傳遞到Channel且提交成功,那麼Soucrce就將該文件標記爲完成。同理,事務以相似的方式處理從Channel到Sink的傳遞過程,若是由於某種緣由使得事件沒法記錄,那麼事務將會回滾。且全部的事件都會保持到Channel中,等待從新傳遞。

相關文章
相關標籤/搜索