一、flume簡介
1.1.1 概述
- Flume是一個分佈式、可靠、和高可用的海量日誌採集、聚合和傳輸的系統。
- Flume可以採集文件,socket數據包、文件、文件夾、kafka等各種形式源數據,又可以將採集到的數據(下沉sink)輸出到HDFS、hbase、hive、kafka等衆多外部存儲系統中
- 一般的採集需求,通過對flume的簡單配置即可實現
- Flume針對特殊場景也具備良好的自定義擴展能力,
因此,flume可以適用於大部分的日常數據採集場景
1.1.2 運行機制
- Flume分佈式系統中最核心的角色是agent,flume採集系統就是由一個個agent所連接起來形成
- 每一個agent相當於一個數據傳遞員,內部有三個組件:
-
- Source:採集組件,用於跟數據源對接,以獲取數據
- Sink:下沉組件,用於往下一級agent傳遞數據或者往最終存儲系統傳遞數據
- Channel:傳輸通道組件,用於從source將數據傳遞到sink
-
1.1.3 Flume採集系統結構圖
1. 簡單結構
單個agent採集數據
2. 複雜結構
多級agent之間串聯
二、kafka簡介
2.1、簡介
kafka是最初由linkedin公司開發的,使用scala語言編寫,kafka是一個分佈式,分區的,多副本的,多訂閱者的日志系統(分佈式MQ系統),可以用於搜索日誌,監控日誌,訪問日誌等。
2.2、支持的語言
kafka目前支持多種客戶端的語言:java、python、c++、php等
2.3、apache kafka是一個分佈式發佈-訂閱消息系統
apache kafka是一個分佈式發佈-訂閱消息系統和一個強大的隊列,可以處理大量的數據,並使能夠將消息從一個端點傳遞到另一個端點,kafka適合離線和在線消息消費。kafka消息保留在磁盤上,並在集羣內複製以防止數據丟失。kafka構建在zookeeper同步服務之上。它與apache和spark非常好的集成,應用於實時流式數據分析。
2.4、其他的消息隊列
RabbitMQ
Redis
ZeroMQ
ActiveMQ
2.5、kafka的好處
可靠性:分佈式的,分區,複製和容錯的。
可擴展性:kafka消息傳遞系統輕鬆縮放,無需停機。
耐用性:kafka使用分佈式提交日誌,這意味着消息會盡可能快速的保存在磁盤上,因此它是持久的。
性能:kafka對於發佈和定於消息都具有高吞吐量。即使存儲了許多TB的消息,他也爆出穩定的性能。
kafka非常快:保證零停機和零數據丟失。
三、數據採集案例
3.1 整體數據流程
使用flume監控源頭文件夾下的文件,當有新的文件時,自動採集文件數據到kafka。
3.2 flume的採集配置文件
#爲我們的source channel sink起名 a1.sources = r1 a1.channels = c1 a1.sinks = k1 #指定我們的source收集到的數據發送到哪個管道 a1.sources.r1.channels = c1 #指定我們的source數據收集策略 a1.sources.r1.type = spooldir a1.sources.r1.spoolDir = /export/servers/flumedata a1.sources.r1.deletePolicy = never a1.sources.r1.fileSuffix = .COMPLETED a1.sources.r1.ignorePattern = ^(.)*\\.tmp$ a1.sources.r1.inputCharset = GBK #指定我們的channel爲memory,即表示所有的數據都裝進memory當中 a1.channels.c1.type = memory #指定我們的sink爲kafka sink,並指定我們的sink從哪個channel當中讀取數據 a1.sinks.k1.channel = c1 a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink a1.sinks.k1.kafka.topic = test a1.sinks.k1.kafka.bootstrap.servers = node01:9092,node02:9092,node03:9092 a1.sinks.k1.kafka.flumeBatchSize = 20 a1.sinks.k1.kafka.producer.acks = 1 |
3,4 採集結果圖
採集完成後,源頭文件會自動加上completed後綴
flume日誌圖
kafka消費端接收到的數據
四、總結
主要核心就是flume採集配置文件的開發,配置好source.channel.sink三個組件。