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