日誌採集系統flume和kafka區別及聯繫:數據庫
https://blog.csdn.net/helloxiaozhe/article/details/79481319架構
觀點一:app
簡言之:這兩個差異很大,使用場景區別也很大。socket
flume:oop
日誌採集。線上數據通常主要是落地文件或者經過socket傳輸給另一個系統。這種狀況下,你很難推進線上應用或服務去修改接口,直接向kafka裏寫數據。這時候你可能就須要flume這樣的系統幫你去作傳輸。spa
對於數量級別,作過單機upd的flume source的配置,100+M/s數據量,10w qps flume就開始大量丟包。所以咱們在搭建系統時,拋棄了flume,本身研發了一套傳輸系統。但flume設計的source-channel-sink模式仍是比較好的,咱們在開發系統時無恥的也抄襲了這種方式。.net
Kafka:設計
我我的以爲kafka更應該定位爲中間件系統。開發這個東西目的也是這個初衷。能夠理解爲一個cache系統。你甚至能夠把它理解爲一個廣義意義的數據庫,裏面能夠存放必定時間的數據。kafka設計使用了硬盤append方式,得到了很是好的效果。我以爲這是kafka最大的亮點。不一樣系統之間融合每每數據生產/消費速率不一樣,這時候你能夠在這些系統之間加上kafka。例如線上數據須要入HDFS,線上數據生產快且具備突發性,若是直接上HDFS(kafka-consumer)可能會使得高峯時間hdfs數據寫失敗,這種狀況你能夠把數據先寫到kafka,而後從kafka導入到hdfs上。印象中LinkedIn公司有這麼用。日誌
業界比較典型的一中用法是:orm
線上數據 -> flume -> kafka -> hdfs -> MR離線計算 或者:
線上數據 -> flume -> kafka -> storm
觀點二:
Flume和Kafka自己是很類似的系統,都能無壓力傳輸很大的數據量。
細節上他們固然有不少不一樣,可是總結下來,若是你糾結究竟是用Kafka仍是Flume:
1. Kafka是pull based, 若是你有不少下游的Data Consumer,用Kafka;
2. Kafka有Replication,Flume沒有,若是要求很高的容錯性(Data High Availability),選kafka;
3. 須要更好的Hadoop類產品接口,例如HDFS,HBase等,用Flume。
固然,這兩個區別就讓人天然而然的想到整合二者,這樣既可擁有Kafka的容錯能力,和Flume的多種接口,例如:
Events --->Flume ---> Kafka ---> Flume ---> Storage System (Hadoop Cluster)
固然,壞處就是你須要開發維護多個系統...
前一段彷佛看到Cloudera提出過一款Flafka的app,說的就是這兩款產品的整合,有興趣能夠去搜搜。
觀點三:
我偏心Flume,由於架構簡單,依賴少。
可是一樣的,功能也簡單,可是夠靈活。
它的定位是數據通道,不是消息隊列。
Flume和Kafka應該結合來使用,Flume做爲日誌收集端,Kafka做爲日誌消費端。
flume:日誌採集系統
kafka:消息中間件
也用過樓上說的組合:
log->flume->kafka->hdfs(solr)
Flume的Source-Channel-Sink模型,很是適合做爲日誌收集的模型。你能夠想一下,若是你來作一個日誌收集的Agent,若是作能儘可能保證日誌數據的傳輸成功率,應對服務端的各類異常狀況,以及如何靈活的接入各類不一樣的日誌類型。
Kafka就沒必要多說了,生產者消費者模型,看你怎麼去構建日誌消費的下游了。有了消息隊列做爲中間件,消費的下游和上游能夠完美的解耦。