第 1 章 为何选择 Flink
1.3 流处理技术的演变
分开处理连续的实时数据和有限批次的数据,可以使系统构建工作变得更 加简单,但是这种做法将管理两套系统的复杂性留给了系统用户:应用程 序的开发团队和DevOps 团队需要自己使用并管理这两套系统。
为了处理这种情况,有些用户开发出了自己的流处理系统。在开源世界里,
Apache Storm 项目(以下简称 Storm)是流处理先锋。Storm 最早由 Nathan Marz 和创业公司 BackType(后来被 Twitter 收购)的一个团队开发,后来 才被Apache 软件基金会接纳。Storm 提供了低延迟的流处理,但是它为实 时性付出了一些代价:很难实现高吞吐,并且其正确性没能达到通常所需 的水平。换句话说,它并不能保证exactly-once;即便是它能够保证的正确 性级别,其开销也相当大。
注2: 对 exactly-once 的解释,详见 5.1 节。——编者注
为何选择Flink | 7
Lambda 架构概述:优势和局限性
对低成本规模化的需求促使人们开始使用分布式文件系统,例如HDFS 和基于批量数据的计算系统(MapReduce 作业)。但是这种系统很难做 到低延迟。用Storm 开发的实时流处理技术可以帮助解决延迟性的问 题,但并不完美。其中的一个原因是,Storm 不支持 exactly-once 语义,
因此不能保证状态数据的正确性,另外它也不支持基于事件时间的处 理。有以上需求的用户不得不在自己的应用程序代码中加入这些功能。
后来出现了一种混合分析的方法,它将上述两个方案结合起来,既保 证低延迟,又保障正确性。这个方法被称作Lambda 架构,它通过批 量MapReduce 作业提供了虽有些延迟但是结果准确的计算,同时通过 Storm 将最新数据的计算结果初步展示出来。
Lambda 架构是构建大数据应用程序的一种很有效的框架,但它还不够 好。举例来说,基于MapReduce 和 HDFS 的 Lambda 系统有一个长达 数小时的时间窗口,在这个窗口内,由于实时任务失败而产生的不准 确的结果会一直存在。Lambda 架构需要在两个不同的 API(application programming interface,应用程序编程接口)中对同样的业务逻辑进行 两次编程:一次为批量计算的系统,一次为流式计算的系统。针对同 亚秒的延迟。这就是在Spark 批处理引擎上运行的 Apache Spark Streaming
8 | 第 1 章
(以下简称Spark Streaming)所使用的方法。
更重要的是,使用微批处理方法,可以实现exactly-once 语义,从而保障状 态的一致性。如果一个微批处理作业失败了,它可以重新运行。这比连续 的流处理方法更容易。Storm Trident 是对 Storm 的延伸,它的底层流处理引 擎就是基于微批处理方法来进行计算的,从而实现了exactly-once 语义,但 是在延迟性方面付出了很大的代价。
然而,通过间歇性的批处理作业来模拟流处理,会导致开发和运维相互交 错。完成间歇性的批处理作业所需的时间和数据到达的时间紧密耦合,任 何延迟都可能导致不一致(或者说错误)的结果。这种技术的潜在问题是,
时间由系统中生成小批量作业的那一部分全权控制。Spark Streaming 等一 些流处理框架在一定程度上弱化了这一弊端,但还是不能完全避免。另外,
使用这种方法的计算有着糟糕的用户体验,尤其是那些对延迟比较敏感的 作业,而且人们需要在写业务代码时花费大量精力来提升性能。
为了实现理想的功能,人们继续改进已有的处理器(比如Storm Trident 的 开发初衷就是试图克服Storm 的局限性)。当已有的处理器不能满足需求 Samza(以下简称 Samza)是早期的一个开源流处理器,它不仅没能实现 exactly-once 语义,而且只能提供底层的 API;同样,Apache Apex 提供了 与Flink 相同的一些功能,但不全面(比如只提供底层的 API,不支持事件 时间,也不支持批量计算)。这些项目没有一个能和Flink 在开源社区的规 模上相提并论。
图灵社区会员 ArthurWYS([email protected]) 专享 尊重版权
为何选择Flink | 9
高吞吐 低延迟
操作简单/
表现力好
时间正确/
语义化窗口
在压力下 保持正确
图1-2:Flink 的一个优势是,它拥有诸多重要的流式计算功能。其他项目为了实现 这些功能,都不得不付出代价。比如,Storm 实现了低延迟,但是在作者撰写本书 时还做不到高吞吐,也不能在故障发生时准确地处理计算状态;Spark Streaming 通过采用微批处理方法实现了高吞吐和容错性,但是牺牲了低延迟和实时处理能力,
也不能使窗口与自然时间相匹配,并且表现力欠佳 下面来了解Flink 是什么,以及它是如何诞生的。