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