Flink的特点以及优势

 Flink的优势

、数据量&吞吐量&延迟性

Flink的特点以及优势_第1张图片

Flink 的流处理引擎只需要很少配置就能实现高吞吐率和低延迟。

2、支持 Event Time 和乱序事件

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

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

Flink的特点以及优势_第2张图片

3、状态计算的 exactly-once 语义

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

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

Flink的特点以及优势_第3张图片

4、高度灵活的流式窗口

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

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

Flink的特点以及优势_第4张图片

5、带反压的连续流模型

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

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

Flink的特点以及优势_第5张图片

6、容错性

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

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

Flink的特点以及优势_第6张图片

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

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

Flink的特点以及优势_第7张图片

8、内存管理

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

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

Flink的特点以及优势_第8张图片

9、迭代和增量迭代

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

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

Flink的特点以及优势_第9张图片

10、程序调优

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

 Flink的特点

①同时支持高吞吐、低延迟、高性能

②支持事件时间概念(Event Time)
大多数窗口计算采用的都是系统时间(Process Time),也是事件传输到计算框架时,系统主机的当前时间。Flink能够支持基于时间事件时间(Event Time)语义进行窗口计算,也就是时间产生的时间。这种基于时间驱动的机制使得事件即使是乱序到达,流系统也能够计算出精确的结果,保持了时间原本产生的时序性。尽量避免网络传输或硬件系统影响。

③支持有状态计算
Flink在1.4版本中实现了状态管理,所谓的状态就是流式计算过程中将算子的中间结果数据保存在内存中或者是文件系统中,等下一个时间进入算子后可以从之前的状态中获取中间结果中计算当前的结果,从而无需每次都基于全部的原始数据来统计结果,这种方式极大提升了系统的性能,并降低了计算过程资源的消耗,对于数据量大且运算逻辑非常复杂的流式计算场景,有状态发挥了非常重要的作用。

④支持高度灵活的窗口(Window)操作
在流处理应用中,数据是连续不断的,需要通过窗口的方式对数据进行一定范围的聚合计算,例如统计在过去一分钟内多少用户点击某一网页,在这种情况下,我们必须定义一个窗口,用来收集最近一分钟的数据,并对窗口内的数据进行统计计算。Flink将窗口划分为基于Time,count,Session,以及Data-driven等类型的窗口操作,窗口可以用灵活的触发条件定制化达到对复杂的流传输模式的支持,用户可以定义不同窗口触发机制来满足不同的需求。

⑤基于轻量级分布式快照(CheckPoint)实现的容错
Flink能够分布式运行在上千个节点上,将一个大型计算任务的流程拆解成小的计算过程,然后将tesk分布到并行节点上进行处理,在执行任务过程中,能够自动发现事件处理过程中的错误而导致数据不一致的问题。比如:节点宕机、网路传输问题,或是由于用户因为升级或修复问题导致计算服务重启等。在这些情况下,通过基于分布式快照技术CheckPoints,将执行过程中的状态信息进行持久化存储,一但任务出现异常停止,Flink就能够从Checkpoint中进行任务的自动恢复,以确保数据在处理过程中的一致性(Exactly-ONCE)

⑥基于JVM实现独立的内存管理
内存管理是所有计算框架需要重点考虑的部分,尤其对于计算量比较大的计算场景,数据在内存中该如何进行管理显得至关重要,针对内存管理,Flink实现了自身管理内存机制,尽可能减少JVM GC对系统的影响,另外,Flink通过序列化/反序列化方法将所有的数据对象转化为二进制在内存中存储,降低GC带来的性能下降或任务异常的风险,因此Flink较其他分布式处理的框架显得更加稳定,不会因为JVM GC等问题而影响整个应用的运行

⑦Save Point(保存点)
对于7*24小时运行的流式运用,数据源源不断地接入,在一段时间内应用的终止有可能导致数据丢失或者计算结果不准确,例如进行集群版本的升级、停机运维操作等。值得一提的是,Flink通过Save Points技术将任务执行的快照保存在存储介质上,当任务重启的时候可以直接从事保存的Save Points恢复原有的计算状态,使得任务继续按照停机之前的状态运行,Sava Point技术可以让用户更好的管理和运维

你可能感兴趣的:(Hadoop)