1. 程式人生 > >flume,kafka區別、協同與詳解

flume,kafka區別、協同與詳解

 

  簡介 socket模式 簡單資料處理 開發公司
Flume

日誌採集系統

(管道流方式,提供了很多的預設實現,讓使用者通過引數部署,及擴充套件API.)

  1. 可以單獨執行linux命令,作為client將輸出寫入hdfs (例如tail命令)來監聽日誌
  2. 可作為server監聽埠,同時作為client將收到資訊寫入hdfs
可編寫Interceptor,對資料進行攔截,對密碼進行MD5加密再寫入hdfs

Cloudera

Kafka 訊息中介軟體(一個可持久化的分散式的訊息佇列)
  1. 作為雙server系統,1個server用於獲取資料、另一個用於監聽接入的client的消費資料請求
  2. kafka和JMS(Java Message Service)實現(activeMQ)不同的是:即使訊息被消費,訊息仍然不會被立即刪除
流處理系統,也就是作為一個快取(資料量大的時候會儲存到本地硬碟,不單單是記憶體),生產訊息太多了,消費不過來,就先存著。 Linkedin

Flume最早是Cloudera提供的日誌收集系統,目前是Apache下的一個孵化專案

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檔案配置來配置:

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也可以開啟埠來監聽,其配置檔案為:

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構建大資料實時處理系