flume使用兩個獨立的事務分別負責從soucrce到channel,以及從channel到sink的事件傳遞。
在source到channel之間的叫put事務,在channel到sink之間的叫take事務。
事務兩個特性就是:成功了提交,失敗了回滾。
從source到channel過程中,資料在flume中會被封裝成event物件,多個event被放到乙個事務中,
然後把這個包含events的事務放到channel中。
然後在processevent和processeventbatch(listevents)
public void processevent(event event)
list requiredchannels = this.selector.getrequiredchannels(event); // 提交到channel 選擇器
for (iterator localiterator = requiredchannels.iterator(); localiterator.hasnext(); ) catch (throwable t) if ((t instanceof channelexception))
throw new channelexception("unable to put event on required channel: " + reqchannel, t);
}finally
}channel reqchannel;
list optionalchannels = this.selector.getoptionalchannels(event);
for (channel optchannel : optionalchannels) catch (throwable t)
finally }}}
Flume Agent 內部原理和事務
1 channelselector channelselector 的作用就是選出 event 將要被發往哪個 channel。其共有兩種型別,分別是replicating 複製 和multiplexing 多路復用 replicatingselector 會將同乙個 event 發往所有的 cha...
flume筆記(二)之Agent內部原理
首先channelselector的作用是將event 資料傳給哪乙個channel。其中它有兩種選擇策略,分別是 replicating 複製 和 multiplexing 多路復用 replicating 複製 會將同乙個 event 資料發往所有的 channel,每乙個channel都發一遍...
Flume事務機制
docommit檢查channel中是否還有足夠的空間來容納putlist中的所有資料,如果有docommit就成功了,putlist中的所有資料就會進入到channel中並清空putlist中的資料。如果檢測的時候發現channel中的空間不足以容納putlist中的資料的時候,事務就會進行回滾 ...