1、需求決定引擎選型
根據馬斯洛需求層次理論,可以將流處理引擎的需求分爲以下幾種層次:
1、持續性的流處理
2、低延遲的計算結果,亞秒級別的延遲
3、高效可擴展性,每秒百萬級的吞吐量
4、容錯性,即失敗時的可恢復性
5、精確的可重複性
6、可查詢性
流處理就是在延遲、吞吐量和正確性之間做一個平衡。
2、當前的流處理引擎包含哪些
1、Spark Streaming
2、Storm
3、Flink
4、samza
。。。。
3、根據Maslow模型,在不同流處理系統之間做個簡單的橫向對比
1、連續不斷的處理
都具有處理“流”的能力。
2、低延遲
Spark Streaming本質是個“micro-batch”,延遲達到秒級。
如果對“延遲性”要求很高,Spark Streaming不適合。
3、高吞吐高擴展
storm在大規模集羣下的吞吐量不行?直接看一組來自Yahoo的benchmark:
4、容錯和excactly_once
Flink支持excactly_once,通過檢查點產生的分佈式快照(有狀態的operator)+kafka可重發的數據源完成。
5、準確性與可重發
準確性依賴於對Event Time的支持以及kafka的可部分重發的數據源。
6、查詢性
將計算結果不斷的sink到database或者key/value數據庫,雖然這會成爲潛在的瓶頸。
4、Flink實時查詢服務架構
不斷的sink到nosql數據庫,提供了一個實時查詢的可能性!!!
5、根據需求,確定適合自己的流處理框架
6、參考
Counting in streams: A hierarchy of needs
Stateful Stream Processing at In-Memory Speed
Yahoo Streaming Benchmarks
Apache Flink Presentation