背景 : 如果監(jiān)控的目錄會不定時自動增刪(特別是超多目錄,又做了前面的目錄遞歸定制), 我們會糾結(jié)于是否使用cachePatternMatching=false參數(shù)
- cachePatternMatching=true 表示使用緩存, 監(jiān)控的目錄變化后不能及時更新,刪掉的文件會報file not exists, 新增的文件不能監(jiān)控到;
- cachePatternMatching=false 表示每次都更新目錄緩存, 如果目錄很多, 會占用較多cpu便利目錄.
經(jīng)測試: 不使用緩存cpu占用20%, 改為cachePatternMatching=true 之后cpu占用減少到8%
優(yōu)化 : 折中一下, 改為按周期更新緩存,最終在cpu消耗和實時性之間取得平衡.
方法 :
- 定制新配置參數(shù): cachePatternMatchingDuration , int型, 單位毫秒, 表示間隔多久更新一次緩存.
- 關(guān)鍵代碼:
2.1 全局搜"cachePatternMatching", 在旁邊添加"cachePatternMatchingDuration"即可.
2.2 改下 TaildirMatcher.java -> getMatchingFiles方法:
-- 增加一個判斷條件: 當(dāng)前時間 - 上次檢查時間 > 周期時間 時,重新去查目錄
使用:
在xx.properties中增加:
a1.sources.r1.cachePatternMatchingDuration=60000 //每分鐘更新一次緩存
源碼實現(xiàn) : https://github.com/huzhiyuan/bigdata-demo/tree/master/flume-custom/flume-taildir-source
參考配置文件 : https://github.com/huzhiyuan/bigdata-demo/tree/master/flume-custom/flume-config-custom