source到channel是put事務(wù),channel到sink是take事務(wù) flume基于事務(wù)傳輸event(批量傳輸),使用兩個獨(dú)立的事務(wù)分別處理source到channel和channel到sink,失敗時會將所有數(shù)據(jù)都回滾到source或channel進(jìn)行重試。
該事務(wù)機(jī)制遵循'最少一次'語義,因此數(shù)據(jù)絕不會丟失,但有可能重復(fù)。
source-channel之間的重復(fù)可以靠TailDirSource自帶的斷點(diǎn)續(xù)傳功能解決; channel-sink之間的重復(fù),可以延長等待時間,或者設(shè)置UUID攔截器,然后在redis里維護(hù)一個布隆表來使下游實(shí)時應(yīng)用去重。