一、Kafka與Flume比較
1、Flume主要是爲了發送數據給HDFS和HBase用的工具。 Flume集成了Hadoop的安全體系。
如果數據將被多個系統所消費,那麼採用Kafka。
Kafka是一個更加通用的系統。 可以有很多數據的Producer和Consumer。 這些Consumer之間共享多個主題。
2、Flume具有多個內置的源和sink,
如果Flume的源和sink正好滿足你的要求,而且你希望使用一個不需要開發的採集系統(只需要配置),那麼你就使用Flume。
相對而言,Kafka只有一個較少的Producer和COnsumer生態圈。
如果你想開發一個採集系統,那就基於Kafka開發。
3、Flume可以使用interceptors來即時處理數據,這對對數據過濾由幫助;
Kafka需要外部的流處理系統來完成這個功能。
4、都是可靠的系統,都可以保證數據不會丟失。
5、Flume和Kafka可以一起工作。
如果你需要從Kafka流數據到Hadoop,那麼就可以將Flume代理和Kafka源一起使用來讀取數據。
二、Kafka 消息訂閱分發系統
是一個分佈式的消息隊列,可用在不同的系統之間傳遞數據。 實際上是一個消息發佈訂閱系統。
開源
Scala編寫
多個交換部門之間進行交換,每兩個之間都建立交換通道的話,最後形成一張維護難度極大的數據交換網絡,不好。
Kafka可以解決這個問題,它可以擔當中間橋樑。
它使用了多種優化機制,整體架構比較新穎(push/pull),更適合異構集羣。
它實現了高吞吐率,在普通的服務器上每秒也能處理幾十萬條信息。
Kafka架構:
Kafka集羣由多個Kafka實例(server)組成,每個實例成爲Broker
無論是Kafka集羣還是Producer、Consumer都依賴於ZooKeeper來保證分佈式協作、負載均衡。
Kafka中主要由三種角色:Producer、Broker、Consumer。
1 Producer(生產者) 用於將流數據發送到Kafka消息隊列上,它的任務時向Broker發送數據。
2 Broker Kafka包含一個或多個服務器,這種服務器成爲Broker。
3 Consumer(消費者) 作用是處理數據, 比如將消息加載到持久化存儲系統上。
Kafka是基於文件系統存儲。 通過分區(partiton)將文件內容分散到多個server上來避免文件大小達到單機磁盤的上限,沒分分區都會被當前server(Kafka實例)保存。
更多kafka介紹,請見本人另一篇博文: https://blog.csdn.net/kzadmxz/article/details/80487313
三、Flume【海量數據(日誌)採集系統
用於從不同的數據源可靠有效地加載數據流到HDFS中。
具有一定的容錯性,並支持failover和系統恢復。
Flume是一個分佈式、高容錯、高可靠、高可用、易於定製和擴展的輕量級工具,
非常簡單,容易適應各種方式的數據收集。
Java編寫,需要運行在Java1.6之上。
Flume將數據從產生、傳輸、處理並寫入目標的路徑的過程抽象爲數據流。
總之,Flume是一個可擴展、適合複雜環境的海量數據採集系統。
Flume架構:
核心概念:
事件 (Event):Flume傳遞的一個數據單元,除了採集到的數據(如單個日誌)之外,它還帶有可選的消息頭。
源 (Source):
接收器 (Sink):
通道 (Channel):
數據流 (Flow):
Flume代理 (Agent):
Flume在源Source和接收段Sink 使用了transaction(事務)機制保證在數據傳輸中沒有數據丟失。如圖