对比Flink、Storm、Spark Streaming 的反压机制

分析&回答

Flink 如何处理反压?

Storm 反压机制

Storm反压机制

Storm 在每一个 Bolt 都会有一个监测反压的线程(Backpressure Thread),这个线程一但检测到 Bolt 里的接收队列(recv queue)出现了严重阻塞就会把这个情况写到 ZooKeeper 里,ZooKeeper 会一直被 Spout 监听,监听到有反压的情况就会停止发送。因此,通过这样的方式匹配上下游的发送接收速率。

Storm 提供的最基本的处理 stream 的原语是 spout 和 bolt。

spout 是流的源头。 通常 spout 从外部数据源(队列、数据库等)读取数据,然后封装成Tuple形式,之后发送到Stream中。

bolt 处理输入的Stream,并产生新的输出Stream。bolt 可以执行Filter、Map、Join等操作。bolt 是一个被动的 角色,其接口中有一个execute(Tuple input)方法,在接收到消息之后会调用此函数,用户可以在此方法中执行自己的处理逻辑。

Spark Streaming 反压机制

Spark streaming反压机制

组件 RateController 监听负责监听"OnBatchCompleted"事件,然后从中抽取processingDelay 及schedulingDelay信息。RateEstimator 依据这些信息估算出最大处理速度(rate),最后由基于Receiver的Input Stream 将 rate 转发给 Executor 的 BlockGenerator,并更新RateLimiter

对比Flink、Storm、Spark Streaming 的反压机制

Flink、Storm、Spark Streaming 的反压机制都采用动态反馈/自动反压原理,可以动态反映节点限流情况,进而实现自动的动态反压。

Flink、Storm、Spark Streaming 反压机制的区别

Flink 是天然的流处理引擎,数据传输的过程相当于提供了反压,类似管道里的水(下游流动慢自然导致下游也慢),所以不需要一种特殊的机制来处理反压。

Storm 利用 Zookeeper 组件和流量监控的线程实现反压机制 ,其中存在的问题有实现复杂、bolt 接收队列暴涨导致OOM、反压慢

Spark Streaming 是微批处理,可以根据前一批次数据的处理情况,动态、自动的调整后续数据的摄入量 ,其中存在的问题有实现复杂、时效性较差。

喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

相关推荐
梦里不知身是客1119 分钟前
sparkSQL读取数据的方式
spark
少废话h7 小时前
Spark 中数据读取方式详解:SparkSQL(DataFrame)与 SparkCore(RDD)方法对比及实践
大数据·sql·spark
大千AI助手8 小时前
分布式奇异值分解(SVD)详解
人工智能·分布式·spark·奇异值分解·svd·矩阵分解·分布式svd
代码匠心8 小时前
从零开始学Flink:事件驱动
java·大数据·flink·大数据处理
easy_coder11 小时前
从HDFS NN报错看Flink+K8s+HDFS:基础、架构与问题关联
hdfs·flink·kubernetes
Hello.Reader11 小时前
用 Spark Shell 做交互式数据分析从入门到自包含应用
大数据·数据分析·spark
临风赏月14 小时前
Hadoop、Kafka、Flink、Spark、Hive五大组件运维常用操作命令
hadoop·flink·kafka
梦里不知身是客1115 小时前
Spark介绍
大数据·分布式·spark
猫猫姐姐1 天前
Flink基于Paimon的实时湖仓解决方案的演进
大数据·flink·湖仓一体