Apache 流框架 Flink,Spark Streaming,Storm对比分析(一) (3)

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

如果我们初始化的FlinkPlan是StreamingPlan,则首先构造Streaming的StreamingJobGraphGenerator去将optPlan转为 JobGraph,Batch则直接采用另一种的转化方式。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

简而言之,Batch和streaming会有两个不同的ExecutionEnvironment,不同的ExecutionEnvironment会将不同的API翻译成不同 的JobGgrah,JobGraph 之上除了 StreamGraph 还有 OptimizedPlan。OptimizedPlan 是由 Batch API 转换而来的。 StreamGraph 是由 Stream API 转换而来的,JobGraph 的责任就是统一 Batch 和 Stream 的图。

 

1.5 特性分析

高吞吐 & 低延迟

Flink 的流处理引擎只需要很少配置就能实现高吞吐率和低延迟。下图展示了一个分布式计数的任务的性能,包括了流数据 shuffle 过程。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

 

支持 Event Time 和乱序事件

 

Flink 支持了流处理和 Event Time 语义的窗口机制。

Event time 使得计算乱序到达的事件或可能延迟到达的事件更加简单。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

状态计算的 exactly-once 语义

 

流程序可以在计算过程中维护自定义状态。

Flink 的 checkpointing 机制保证了即时在故障发生下也能保障状态的 exactly once 语义。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

高度灵活的流式窗口

 

Flink 支持在时间窗口,统计窗口,session 窗口,以及数据驱动的窗口

窗口可以通过灵活的触发条件来定制,以支持复杂的流计算模式。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

带反压的连续流模型

 

数据流应用执行的是不间断的(常驻)operators。

Flink streaming 在运行时有着天然的流控:慢的数据 sink 节点会反压(backpressure)快的数据源(sources)。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

 

容错性

 

Flink 的容错机制是基于 Chandy-Lamport distributed snapshots 来实现的。

这种机制是非常轻量级的,允许系统拥有高吞吐率的同时还能提供强一致性的保障。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

Batch 和 Streaming 一个系统流处理和批处理共用一个引擎

 

Flink 为流处理和批处理应用公用一个通用的引擎。批处理应用可以以一种特殊的流处理应用高效地运行。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

内存管理

Flink 在 JVM 中实现了自己的内存管理。

应用可以超出主内存的大小限制,并且承受更少的垃圾收集的开销。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

迭代和增量迭代

 

Flink 具有迭代计算的专门支持(比如在机器学习和图计算中)。

增量迭代可以利用依赖计算来更快地收敛。

Apache 流框架 Flink,Spark Streaming,Storm对比分析(一)

程序调优

 

批处理程序会自动地优化一些场景,比如避免一些昂贵的操作(如 shuffles 和 sorts),还有缓存一些中间数据。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfxpj.html