Flume 問題 org.apache.flume.ChannelFullException: Space for commit to queue couldn't be acquired. Unable to deliver event. Exception follows
問題一:org.apache.flume.ChannelFullException: Space for commit to queue couldn't be acquired
解決方法:
先將flume的JVM記憶體改為512M
capacity = 1000
transactionCapacity = 1000
keep-alive = 30
問題二:Unable to deliver event. Exception follows
請求超時,導致傳送event失敗
解決:
設定request-timeout長一點,預設20秒
問題三:flume常用source問題總結
一、SpoolDirectorySource
作用:
監測配置的目錄下新增的檔案,並將檔案中的資料讀取出來。
問題:
1.spool目錄下的檔案不可以再開啟編輯;spool目錄下不可包含相應的子目錄
2.SpoolSource無法實現實時的收集資料
解決:log4j TimeRolling的外掛,分割機制設為1分鐘一次,需改log4j配置檔案
3.無法使用TimeRolling外掛,手工copy到監控目錄,檔案過大,出現邊讀邊寫錯誤
解決:copy檔案增加tmp字尾,source配置忽略tmp字尾檔案,copy成功後,去掉tmp字尾
4.該源需要一個清理程序來定期移除完成的檔案。
5.通道可選地將一個完成路徑的原始檔案插入到每個事件的hearder域中。在讀取檔案時,source快取檔案資料到記憶體中。同時,需要確定設定了bufferMaxLineLength選項,以確保該資料遠大於輸入資料中資料最長的某一行。
6.channel只接收spooling directory中唯一命名的檔案。如果檔名重複或檔案在讀取過程中被修改,則會有讀取失敗返回異常資訊。這種場景下,同名的檔案複製到這個目錄時建議帶唯一標示,比如時間戳。
二、Exec Source
1.當發生日誌輪轉的時候,因為tail -f命令開啟的還是原來的檔案描述符,所以就無法獲取到當天新日誌檔案的內容
解決:tail命令的–retry選項會定期檢查檔名對應的檔案描述符的變化;使用-F 相當於 -f=filename –retry
解釋:使用–follow (-f)時,tail預設後接檔案描述符, 這意味著即使tail顯示的檔案改名了,tail仍然可以追蹤到其末尾部分. 如果你確實希望查詢檔案的實際名而非檔案描述符 (例如,日誌輪轉時), 這種預設的操作就不是你所期望的了.
2.flume-ng程序停止後,tail程序沒停止
解決:使用tail –pid $PID ,–pid 表示如果PID程序結束則tail也會跟著結束,所以PID可以設定為flume程序
3.沒有辦法做到生產速率控制
解決:用Java程式實現了“模擬tail -F”的功能,主要是使用ExceSource,定時修改Flume的配置檔案
4.Flume不執行或者指令執行出錯時,無法斷點續傳以及恢復(單點故障)
解決:二次開發tailSource或者配置複雜均衡或者使用flume1.7新增加的tailDirSource
5.Flume提供快速恢復的機制,但是預設竟然是關閉的!
解決:設定三個引數:restartThrottle,restart,logStdErr解決
原文連結:https://blog.csdn.net/qq_23146763/article/details/54850881