flume,kafka區別、協同與詳解

 

  簡介 socket模式 簡單數據處理 開發公司
Flume

日誌採集系統html

(管道流方式,提供了不少的默認實現,讓用戶經過參數部署,及擴展API.)node

  1. 能夠單獨執行linux命令,做爲client將輸出寫入hdfs (例如tail命令)來監聽日誌
  2. 可做爲server監聽端口,同時做爲client將收到信息寫入hdfs
可編寫Interceptor,對數據進行攔截,對密碼進行MD5加密再寫入hdfs

Clouderalinux

Kafka 消息中間件(一個可持久化的分佈式的消息隊列)
  1. 做爲雙server系統,1個server用於獲取數據、另外一個用於監聽接入的client的消費數據請求
  2. kafka和JMS(Java Message Service)實現(activeMQ)不一樣的是:即便消息被消費,消息仍然不會被當即刪除
流處理系統,也就是做爲一個緩存(數據量大的時候會保存到本地硬盤,不僅僅是內存),生產消息太多了,消費不過來,就先存着。 Linkedin

Flume最先是Cloudera提供的日誌收集系統,目前是Apache下的一個孵化項目bootstrap

Kafka是知名社交網絡公司LinkedIn於2010年12月份開源的分佈式消息系統,主要由Scala語言開發,於2012年成爲Apache頂級項目,目前被普遍應用在包括Twitter,Netffix和Tumblr等在內的大型互聯網站點上。緩存

 

使用命令:安全

  建立接收server  
Flume
flume-ng agent -c conf -f flume-demo-hdfs.conf --name agent1 -Dflume.root.logger=INFO,Console

根據conf文件配置來配置:bash

agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
 
agent1.sources.source1.type = exec
agent1.sources.source1.command = tail -f /var/log/1.log
 
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path = hdfs://<namenode_server_ip>:8020/flume/test/data
agent1.sinks.sink1.hdfs.filePrefix = events-
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat = Text
agent1.sinks.sink1.hdfs.roundUnit = minute
 
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 100
agent1.channels.channel1.transactionCapacity = 100
 
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

 

 
Kafka
建立topic:
kafka-topics --create --zookeeper zookp-server-2:2181 --replication-factor 1 --partitions 1 --topic test2
建立消息生產者並逐行輸入消息(打開後能夠用鍵盤輸入,按回車即發送消息。注意somehost不能爲localhost):
kafka-console-producer --broker-list somehost:9092 --topic test2
建立消費者並持續接收消息:
kafka-console-consumer --bootstrap-server somehost:9092 --topic test2 --from-beginning  --zookeeper zookp-server-2:2181

其餘命令詳解:Kafka 學習筆記之 Kafka0.11之console-producer/console-consumer: — kafka命令大全網絡

 

 

Flume也能夠打開端口來監聽,其配置文件爲:socket

agent1.sources = source1
agent1.sinks = sink1
agent1.channels = channel1
 
agent1.sources.source1.type = netcat
agent1.sources.source1.bind = 0.0.0.0
agent1.sources.source1.port = 9999
 
agent1.sinks.sink1.type = logger
 
agent1.channels.channel1.type = memory
agent1.channels.channel1.capacity = 1000
agent1.channels.channel1.transactionCapacity = 100
 
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

啓動命令爲:分佈式

flume-ng agent -c conf -f conf/flume-demo-logger.conf --name agent1 -Dflume.root.logger=INFO,Console

 

  1. Kafka 是一個很是通用的系統。你能夠有許多生產者和不少的消費者共享多個主題Topics。相比之下,Flume是一個專用工具被設計爲旨在往HDFS,HBase發送數據。它對HDFS有特殊的優化,而且集成了Hadoop的安全特性。若是數據被多個系統消費的話,使用kafka;若是數據被設計給Hadoop使用,使用Flume。
  2. Flume可使用攔截器實時處理數據。這些對數據屏蔽或者過量是頗有用的。Kafka須要外部的流處理系統才能作到。
  3. Kafka和Flume都是可靠的系統,經過適當的配置能保證零數據丟失。然而,Flume不支持副本事件。因而,若是Flume代理的一個節點奔潰了,即便使用了可靠的文件管道方式,你也將丟失這些事件直到你恢復這些磁盤。若是你須要一個高可靠行的管道,那麼使用Kafka是個更好的選擇。
  4. 相對於日誌採集:日誌採集。線上數據通常主要是落地文件或者經過socket傳輸給另一個系統。這種狀況下,你很難推進線上應用或服務去修改接口,直接向kafka裏寫數據。這時候你可能就須要flume這樣的系統幫你去作傳輸。

多系統聯動詳解:Flume+Kafka+Storm+Redis構建大數據實時處理系統

相關文章
相關標籤/搜索