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

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

相关推荐
Lansonli17 小时前
大数据Spark(八十七):Spark-Submit 参数详解
大数据·分布式·spark
且从容.5 天前
ubuntu安装flink
linux·ubuntu·flink
阿里云大数据AI技术6 天前
EMR Serverless Ray:让 AI 推理融入数据处理
人工智能·spark
用户3610588626128 天前
Flink 内存分配源码深度剖析:从启动计算到运行时动态分配的完整链路
大数据·flink
Thomas21439 天前
flink paimon 参数 ignore_progress=true
大数据·flink
源图客10 天前
Apache Flink 2.3.0(最新版本)
大数据·flink·apache
freejackman11 天前
【架构篇】双遍历 + 多栈协同:手撸 SQL 血缘引擎的架构思考
java·大数据·数据库·hive·sql·架构·spark
abigalexy11 天前
Flink核心疑难问题、踩坑盲点-汇总
大数据·flink·big data·bigdata
Sayai11 天前
Kafka 跨数据中心日志同步实战:MirrorMaker 2 选型对比 + Flink 中继任务落地(双中心互备与消费者组隔离避坑)
大数据·运维·分布式·flink·kafka·消息队列·高可用