对比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 是微批处理,可以根据前一批次数据的处理情况,动态、自动的调整后续数据的摄入量 ,其中存在的问题有实现复杂、时效性较差。

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

相关推荐
Jackyzhe19 小时前
Flink源码阅读:Mailbox线程模型
大数据·flink
Hello.Reader21 小时前
Flink 读文本文件TextLineInputFormat + FileSource(批/流一体)+ 目录持续监控
大数据·flink
yumgpkpm21 小时前
基于GPU的Spark应用加速 Cloudera CDP/华为CMP鲲鹏版+Nvidia英伟达联合解决方案
大数据·数据库·人工智能·hadoop·elasticsearch·spark·cloudera
鸿乃江边鸟21 小时前
Spark Datafusion Comet 向量化--ApplyColumnarRulesAndInsertTransitions规则
大数据·spark·native
Analyze_ing21 小时前
DolphinScheduler启动flink任务, 用Flink消费Kafka数据(linux)
大数据·flink·kafka
面向Google编程1 天前
Flink源码阅读:Mailbox线程模型
大数据·flink
飞Link1 天前
【大数据】SparkSQL常用操作
大数据·数据挖掘·spark
浊酒南街2 天前
SUBSTRING_INDEX 函数介绍
sql·spark
鸿乃江边鸟2 天前
Spark datafusion comet向量化插件CometPlugin
大数据·spark·native
oMcLin2 天前
如何在 Debian 11 上通过构建大数据湖,使用 Apache Spark 加速电商平台的数据分析与实时推荐引擎
spark·debian·apache