任務17 17 Flume高階 事務性

2021-10-14 03:25:00 字數 1959 閱讀 5704

flume高階:

講解flume的事務,因為flume是乙個傳輸的工具,所以,它希望資料不要丟,這就需要加事務,三個元件有三個事務。channel都是被動的,從source到channel是source推資料,從channel到sink,是sink主動拉取資料。

flume有兩個事務

除了埠可以做資料來源,本地檔案也可以是,可以按資料夾,單個檔案和多個檔案均可,有批量上傳的,也有斷點徐傳的,都有。

source負責和外面的資料來源打交道

讀取過來的資料,都封裝在enent事件中,event是乙個介面,不是直接把這個event給到channel,而是放到批量提交的地方

這裡有個put事務,channel怎麼都是被動的。

source主動推資料,sink主動拉取資料,

put事務:

source要傳輸資料,也要放在記憶體中,如果用

filechannel也是要用到記憶體的,只不過之後是要將資料放到磁碟中。

如果hdfs的機器比較慢,讀取很慢,導致sink 寫出的速度很慢,那sink拉取的資料就很慢,就會導致channel出現滿了的情況,這時候docommit的話,會出現異常的情況,這時候就需要回滾。已經做了提交,但是出現了異常,因為channel已經滿了,這時候資料只能乖乖的繼續放在putlist裡面等著。

長期channel處於滿的狀態,

之後putlist集合(也在記憶體中)就會記憶體溢位,直接崩了。

這就是put事務

如果已經成功的將putlist的資料寫到了channel中去,就輪到了take事務。

sink自己去拉取資料。

資料從channel到集合takelist,然後sink就從集合中take資料。

總結:記住:兩個事務的名字:put事務,take事務

記住兩個集合:putlist,takelist

source—>channel

先將資料通過doput()寫到到putlist集合裡面,再通過docommit()將putlist集合中的資料推送到channel中,如果在這裡提交失敗,異常了,就需要回滾。將資料在回滾到putlist集合。

先做doput(),然後提交做docommit()

channel—>sink

先將資料放到takelist,sink從takelist裡面拉取資料,如果拉取失敗,這個資料就需要回滾到channel裡面。

後面自定義元件裡面,寫**的時候就需要寫到事務這個東西。但是這個事務已經幫我們封裝好了,我們只需要呼叫api就行。和mysql的事務差不多。

SSIS高階轉換任務 OLE DB命令

ole db commond任務接受輸入流中的行資料並執行一段sql語句或自定義儲存過程。這個轉換和execute sql任務容易混淆,但是它非常類似於在ado連線中迴圈接收乙個結果集中的資料,建立,執行乙個ado命令。輸入流中的引數資料可以提供給乙個sql命令或者儲存過程。這裡我們看到 迴圈 可能...

SSIS高階轉換任務 OLE DB命令

ole db commond任務接受輸入流中的行資料並執行一段sql語句或自定義儲存過程。這個轉換和execute sql任務容易混淆,但是它非常類似於在ado連線中迴圈接收乙個結果集中的資料,建立,執行乙個ado命令。輸入流中的引數資料可以提供給乙個sql命令或者儲存過程。這裡我們看到 迴圈 可能...

非同步任務 AsyncTack高階 結合動態介面

github csdn 2,需要我們寫乙個註解,用於標示介面需要傳入的資料 target elementtype.method retention retentionpolicy.runtime public inte ce urlstring3,寫乙個工具類tools,生成介面的例項 create...