作者:周凱波
本文翻譯自 streaml.io 網站上的一篇博文:「Exactly once is NOT exactly the same」 ,
分析了流計算系統中常說的『Exactly Once』特性,主要觀點是:『精確一次』並不保證是完全一樣。主要內容如下:
- 背景
- 1.1. 最多一次(At-most-once)
- 1.2. 至少一次(At-least-once)
- 1.3. 精確一次(Exactly-once)
- 『精確一次』是真正的『精確一次』嗎?
- 分散式快照與至少一次事件傳遞和重複數據刪除的比較
- 結論
- 參考
目前市面上使用較多的流計算系統有 Apache Storm,Apache Flink, Heron, Apache Kafka (Kafka Streams) 和 Apache Spark (Spark Streaming)。關於流計算系統有個被廣泛討論的特性是『exactly-once』語義,很多系統宣稱已經支持了這一特性。但是,到底什麼是『exactly-once』,怎麼樣才算是實現了『exactly-once』,人們存在很多誤解和歧義。接下來我們做下分析。
一、背景
流處理(有時稱為事件處理)可以簡單地描述為是對無界數據或事件的連續處理。流或事件處理應用程序可以或多或少地被描述為有向圖,並且通常被描述為有向無環圖(DAG)。在這樣的圖中,每個邊表示數據或事件流,每個頂點表示運算符,會使用程序中定義的邏輯處理來自相鄰邊的數據或事件。有兩種特殊類型的頂點,通常稱為 sources 和 sinks。sources讀取外部數據/事件到應用程序中,而 sinks 通常會收集應用程序生成的結果。下圖是流式應用程序的示例。