- Flink 是標準的實時處理引擎,基于事件驅(qū)動。
而 Spark Streaming 是微批(Micro-Batch)的模型
- 時間機制,Spark Streaming 只支持Processing Time(處理時間), 而Flink支持更為豐富的時間語義 Processing Time(處理時間),Ingestion Time(攝入時間),Event Time(事件時間),同時支持基于Watermark的亂序事件處理。
另外Spark Sturctured Streaming也支持了Event Time和Watermark亂序事件處理
- 容錯機制,對于Spark Streaming而言當前能保證的端到端的語義是At Least Once,也就是可以保證數(shù)據(jù)不丟失,但是不能保證數(shù)據(jù)不重復。
而Flink提供了兩階段提交協(xié)議來解決端到端的Exactly Once語義。
比如Flink 的Kafka Soure和Sink,借助于兩階段提交協(xié)議,Checkpoint,Kafka的事物機制,實現(xiàn)了端到端的Exactly Once。
另外需要說明的是在業(yè)務(wù)中并不是一定要使用Flink,而是根據(jù)團隊整體的技術(shù)棧和具體的業(yè)務(wù)場景來定,比如對于機器學習算法,Spark ML就做的非常好。