- Flink 是標準的實時處理引擎,基于事件驅動。
而 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,也就是可以保證數據不丟失,但是不能保證數據不重復。
而Flink提供了兩階段提交協議來解決端到端的Exactly Once語義。
比如Flink 的Kafka Soure和Sink,借助于兩階段提交協議,Checkpoint,Kafka的事物機制,實現了端到端的Exactly Once。
另外需要說明的是在業務中并不是一定要使用Flink,而是根據團隊整體的技術棧和具體的業務場景來定,比如對于機器學習算法,Spark ML就做的非常好。