- 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就做的非常好。