昨天講到 pure stream computing 不能提供 exactly-once semantics,不過有許多應用都需要 exactly-once semantics。
為了解決這問題,開始有些框架不走 pure stream,而是走 micro batch。
Micro batch 也是集結一段時間的資料再批次處理,只是集結的時間很短,通常是幾秒就集結一次,所以稱為Micro batch。
Micro batch 的好處是可以實現 exactly-once semantics。而 exactly-once semantics 主要牽涉到 state 的更新,我明天會提到這個問題。但micro batch 的壞處在於latency變高了,但如果應用對於latency沒那麼要求 (可容忍秒級的延遲),用Micro batch其實很OK。
Storm有一個延伸框架 Trident,在Storm上多架一層Coordination layer來實現Micro batch。但有點討厭的是,有些 Storm 有的功能 (如: window count),在 Trident 裡還不支援;而且 Trident 和 Storm 的 運算結果是不相通的 (不能混用)。
而 Spark Streaming 本身就是 Micro Batch,因為這是把 Spark 的批次維度縮小後的實作。