-- At most Onece:最多一次,若是算子處理事件失敗,事件將再也不嘗試該事件。
-- At Least Onece:至少一次,若是算子處理事件失敗,算子會再次嘗試該處理事件,直到有一次成功。後端
-- 1.分佈式快照+狀態檢查點,思想就是對比檢查點和分佈式快照中的狀態,如出現狀態不一致就回退到最小狀態處,從新計算。
-- 2.At least Onece + 去重,重播失敗的算子,並刪除重複算子的結果。
-- 雖然從理論上看,分佈式快照,和至少一次事件交付外加去重,這兩種機制之間存在差別,但二者都可理解爲至少一次處理外加冪等保證。分佈式
上文提到的兩種機制均使用持久的後端存儲做爲事實來源(Source of truth),用於保存每一個操做符的狀態,並自動提交狀態更新。對於機制 1(分佈式快照 / 狀態檢查點),這個持久的後端存儲可用於保存流應用程序中全局一致的狀態檢查點(每一個運算符的狀態檢查點);對於機制 2(至少一次事件交付,外加去重),這個持久的後端存儲可用於保存每一個運算符的狀態,以及爲了追蹤哪些事件已經被成功處理過而爲每一個運算符生成的事務日誌。日誌
狀態的提交或對事實來源的持久後端進行的更新可描述爲事件(Occurring)的嚴格一次。然而在計算狀態的更新 / 改動,例如所處理的事件正在針對事件執行各類用戶定義的邏輯時,若是失敗則可能進行屢次,這一點正如上文所述。換句話說,事件的處理可能會進行屢次,但處理的最終結果只會在持久的後端狀態存儲中體現一次。所以 Streamlio 認爲「實際一次(Effectively-once)」能夠更精確地描述這樣地處理語義。事件