Flume - [02] Spooling Directory Source

HOUHUILIN發表於2024-03-20

一、概述

  可以透過將檔案放入磁碟上的 "Spooldir" 目錄中來獲取資料。此源會監視指定目錄中的新檔案,並在新檔案出現時解析新檔案中的事件。事件解析邏輯是可插入的。在將指定檔案完全讀取到通道後,預設情況下透過重新命名檔案來指示檔案來指示完成,或者可以刪除它,或者使用 trackerDir 跟蹤處理過的檔案。

二、和Exec Source的區別

  這個Source 相對 Exec Source 來說,是可靠的,並且不會丟失資料,即使 Flume 重新啟動或關閉,作為這種可靠性的交換,只有不可變的、唯一命名的檔案必須被放到 Sqooldir 目錄中。
  為了避免檔案在放入被監視的目錄被寫入,Flume會將其日誌檔案列印錯誤並停止處理以及重用檔名,Flume將其在日誌檔案上列印錯誤並停止處理的問題,在檔名被移動到被監視的目錄中時,新增唯一識別符號來記錄檔名可能是有用的。

a1.channels = c1
a1.sources = r1

a1.sources.r1.type = spooldir   #source的型別
a1.sources.r1.channels = c1
a1.sources.r1.spoolDir = /dir   #被監視的目錄
a1.sources.r1.fileHeader = true #顯示檔案頭

三、示例

# flume配置的例子
# Name the components on this agent
# source:起一個別名
# properties檔案它是java的配置檔案,=左邊就是鍵,=右邊是值;鍵的開頭都是以a1(就是flume的名字--agent的名字就是a1);a1隨便起
a1.sources = r1
# sink:起一個別名
a1.sinks = k1
# channels;:起一個別名
a1.channels = c1
 
# Describe/configure the source
# spooldir:監控硬碟上指定的某個目錄,如果檔案發生變化,會被flume捕獲;
a1.sources.r1.type = spooldir
# 要監控的目錄,此目錄必須存在
a1.sources.r1.spoolDir =/root/flume/
# 已經完成的檔案,會加上一個字尾
a1.sources.r1.fileSuffix =.ok
# 已經完成的檔案,會立即刪除,預設值是never;(永不刪除)
# a1.sources.r1.deletePolicy =immediate
# 是否新增儲存絕對路徑檔名的標題
a1.sources.r1.fileHeader = true
# 增加檔名到header中
a1.sources.r1.basenameHeader = true
# 只處理此目錄下面的txt檔案;
a1.sources.r1.includePattern =^[\\w]+\\.txt$
 
# Describe the sink
# 描述一個sink: logger日誌(列印到控制檯上)
a1.sinks.k1.type = logger
 
# Use a channel which buffers events in memory
# 描述一下channel:記憶體
a1.channels.c1.type = memory
# capacity:容量
a1.channels.c1.capacity = 1000000
# transactionCapacity:事務的容量
a1.channels.c1.transactionCapacity = 1000000
 
# Bind the source and sink to the channel
# 繫結;source和channel繫結
a1.sources.r1.channels = c1
# sink和channel繫結
a1.sinks.k1.channel = c1

驗證方法

1、在本地啟動flume

2、然後在被監視的目錄中建立檔案或者將檔案移動到該目錄下

3、flume即可將監視到的目錄中檔案的資料收集到

— 要養成終生學習的習慣 —

相關文章