对比实时计算框架:Flink、Spark Streaming和Storm
最编程
2024-01-03 15:40:57
...
Spark Streaming
Spark Streaming 只支持处理时间,Structured streaming 支持处理时间和事件时间,同时支持 watermark 机制来处理滞后数据。
Flink
Fink 支持三种时间机制:事件时间,注入时间,处理时间,同时支持 watermark 机制处理滞后数据。
Storm
新版本的Storm也支持事件时间,处理时间,同时支持watermark 机制。
反压机制(Back pressure)
在实时应用中,当实时处理的中间计算节点或者数据输出节点处理数据的速度变慢,需要通过反压机制将阻塞反馈给数据输入节点,降低数据输入速率,避免数据持续堆积。
Spark Streaming
Spark Streaming 是增加了基于PID算法的 RateController,通过batch计算完成后反馈回来的任务处理的结束时间、调度时间、处理时间、消息条数来计算当前速率,进而可以计算得到一个 offset,然后跟限速设置最大消费条数比较得到一个最终要消费的消息最大 offset。
spark.streaming.backpressure.enabled 设置为 true 开启反压
spark.streaming.kafka.maxRatePerPartition 每个partition每秒最多消费条数
spark.streaming.backpressure.rateEstimator 速率估算器类,目前只支持 pid 。
Flink
与 Spark Streaming 的反压不同的是,Flink 是 Jobmanager 针对每一个 task 每 50ms 触发 100 次 Thread.getStackTrace() 调用,求出阻塞的占比。