一.流处理语义

  1. At most once(最多一次):每条数据记录最多被处理一次,潜台词也表明数据会有丢失(没被处理掉)的可能。
  2. At least once(最少一次):每条数据记录至少被处理一次。这个比上一点强的地方在于这里至少保证数据不会丢,至少被处理过,唯一不足之处在于数据可能会被重复处理。
  3. Exactly once(恰好一次):每条数据记录正好被处理一次。没有数据丢失,也没有重复的数据处理。这一点是3个语义里要求最高的。

二.Flink和Storm框架对比

Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架。其中 Storm在美团点评实时计算业务中已有较为成熟的运用,有管理平台、常用 API 和相应的文档,大量实时作业基于 Storm 构建。Flink在近期倍受关注,具有高吞吐、低延迟、高可靠和精确计算等特性,对事件窗口有很好的支持,目前在美团点评实时计算业务中也已有一定应用。

                Storm 与Flink 两个框架对比:

状态管理

无状态,需用户自行进行状态管理

有状态

窗口支持

对事件窗口支持较弱,缓存整个窗口的所有数据,窗口结束时一起计算

窗口支持较为完善,自带一些窗口聚合方法,并且会自动管理窗口状态。

消息投递

At Most Once

At Least Once

At Most Once

At Least Once

Exactly Once

容错方式

ACK机制:对每个消息进行全链路跟踪,失败或超时进行重发。

检查点机制:通过分布式一致性快照机制,对数据流和算子状态进行保存。在发生错误时,使系统能够进行回滚。

应用现状

在美团点评实时计算业务中已有较为成熟的运用,有管理平台、常用 API 和相应的文档,大量实时作业基于 Storm 构建。

在美团点评实时计算业务中已有一定应用,但是管理平台、API 及文档等仍需进一步完善。

 

 

于是,Flink出现了,这一技术框架可以避免上述弊端,并且拥有所需的诸多功能,还能按照连续事件高效地处理数据,Flink的部分特性如下图所示:图 Flink的部分特性

 

 

flink和storm比 flink与storm_实时计算

 

 

三.差异性分析

1.2.1 Flink

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

 

flink和storm比 flink与storm_实时计算_02

 

 

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

 

2、支持 Event Time 和乱序事件

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

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

flink和storm比 flink与storm_实时计算_03

 

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

flink和storm比 flink与storm_数据_04

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

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

 

 

4、高度灵活的流式窗口

flink和storm比 flink与storm_数据_05

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

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

 

5、带反压的连续流模型

flink和storm比 flink与storm_flink和storm比_06

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

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

 

6、容错性

flink和storm比 flink与storm_实时计算_07

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

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

 

 

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

flink和storm比 flink与storm_流处理_08

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

 

 

8、内存管理

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

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

 

flink和storm比 flink与storm_流处理_09

9、迭代和增量迭代

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

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

 

flink和storm比 flink与storm_数据_10

10、程序调优

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

flink和storm比 flink与storm_数据_11

 

 

                                                                                                                                             ————保持饥饿,保持学习

                                                                                                                                                                  Jackson_MVP