Flume 自定義source -- SQLSource (轉爲 json 格式)

 

個人使用flume  相對較多 ,對他的採集任務比較喜歡 ,自己做了一些數據庫方向的的拓展。

雖然 github  上 有很多 自定義的 flume  sql-source  比如 大名鼎鼎 的  https://github.com/keedio/flume-ng-sql-source

但是 我個人在使用的過程中遇到了一些問題   也一直沒有得到解決 ,https://github.com/keedio/flume-ng-sql-source/issues/59 

並且 格式 是csv  格式  。

所以我自己寫了一套 sqlsource  基於原生的jdbc  連接 ,沒有使用 其他的框架  ,讀取數據庫 轉爲 json  格式  。也便於解析 個人 項目 地址 ,歡迎提出不足 ,有問題 直接 提 issues。我會盡快幫大家解決 。

一、
在使用flume採集日誌時,可以通過flume進行監控某一個文件把生產的數據傳輸給指定的sink,但是如果某段時間flume所在機器宕機了,那麼當重新啓動後,在去監控時,會導致有數據丟失,不是接着上一次的數據繼續進行讀取,因此針對這種情況時可能需要我們自定義一個source,記錄偏移量,每次都是接着上次繼續讀,記錄 數據已經發送的位置  。
二、
下面就是具體實現的代碼
再寫代碼時可以參照官方給的source的源碼進行編寫.
flume的生命週期: 先執行構造器,再執行 config方法 --> start方法 --> processor.process–> stop

讀取配置文件 ->  初始化 數據庫連接及 相關參數   ->  解析 sql  ->  獲取 resultsSet  ->  轉爲 Json ->  發送個channel  -> stop -> 記錄當前位置 

具體 詳見 https://github.com/HbnKing/Flume-ng-Database/blob/master/RDB/src/main/java/com/hbn/rdb/source/SQLSource.java

三 、

配置文件 

這裏採用 loggersink    主要看一下Source  的 一些相關 配置 

支持 自定義 sql   

f2.sources = r1
f2.channels = c1
f2.sinks = k1

# 這裏用 自己定義的 SQLSource
f2.sources.r1.type = com.hbn.rdb.source.SQLSource
f2.sources.r1.connectionurl = jdbc:oracle:thin:@//ip:1521/orcl
f2.sources.r1.user = yyj
f2.sources.r1.password = yyj
f2.sources.r1.driverclass= oracle.jdbc.driver.OracleDriver
f2.sources.r1.filepath = /var/log/sqllog
f2.sources.r1.filename = sqlSource.status
#f2.sources.r1.customquery = select a.id,a.COUPON_id,b.id from USER_COUPON_CODE_1 a ,COUPON_CODE b  where a.COUPON_id = b.id
#f2.sources.r1.customquery = select a.id,a.COUPON_id,b.id from USER_COUPON_CODE_1 a ,COUPON_CODE b  where a.COUPON_id = b.id  and  a.id > $@$
f2.sources.r1.customquery = select * from USER_COUPON_CODE_1
f2.sources.r1.begin = 0
f2.sources.r1.autoincrementfield = a.id
f2.sources.r1.batchsize = 1000
#具體定義channel
f2.channels.c1.type = memory
f2.channels.c1.capacity = 1000
f2.channels.c1.transactionCapacity = 100
#具體定義sink
f2.sinks.k1.type = logger
#組裝source、channel、sink
f2.sources.r1.channels = c1
f2.sinks.k1.channel = c1

四  、  

啓動命令 

bin/flume-ng agent --conf conf/ --conf-file conf/flume-conf1.properties  --name f2 -Dflume.root.logger=INFO,console

 

五  、  

查看結果 


{  "ID" : NumberLong("10000900000"), "COUPON_ID" : 900000, "ID_3" : NumberLong("10000900000") }
{ "ID" : NumberLong("10000700000"), "COUPON_ID" : 700000, "ID_3" : NumberLong("10000700000") }
{  "ID" : NumberLong("10000300000"), "COUPON_ID" : 300000, "ID_3" : NumberLong("10000300000") }
{ "ID" : NumberLong("10000800000"), "COUPON_ID" : 800000, "ID_3" : NumberLong("10000800000") }
{ "ID" : NumberLong("10000500001"), "COUPON_ID" : 500001, "ID_3" : NumberLong("10000500001") }
{  "ID" : NumberLong("10000500002"), "COUPON_ID" : 500002, "ID_3" : NumberLong("10000500002") }
{  "ID" : NumberLong("10000500003"), "COUPON_ID" : 500003, "ID_3" : NumberLong("10000500003") }

六 、

其他   

如有問題 ,請留言 ,歡迎提出不足 和 建議 。

感謝貢獻 。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章