流式系统
上QQ阅读APP看书,第一时间看更新

第2章 数据处理的来龙去脉

本章我们讨论一些具体的问题。

第1章关注了3个主要领域:术语,当我使用如“流式”这样的重载词语时,术语能够准确地表达我的意思;批处理和流式,比较这两类系统在理论上的功能,并假设只需要正确性和有关时间推断的工具这两样东西就可以使流式系统超越它们的批处理对手;数据处理模式,关注在处理有界数据和无界数据时,批处理系统和流式系统所采用的概念性方法。

在本章中,我们将进一步关注第 1 章中提及的数据处理模式,但是会结合具体示例的上下文更详细地介绍这部分内容。到完成本章学习时,大家将会掌握我认为的针对健壮乱序数据处理所需的一套核心原则和概念。这些关于时间推断的工具,会真正地帮助你超越传统的批处理。

为了让你了解实际的情况,我会使用Apache Beam的片段代码,结合延时图[1]来直观地表示所涉及的概念。Apache Beam 是用于批处理和流式处理的统一编程模型和可移植层,具有支持多语言(如Java、Python等)的一套具体的SDK。因此,使用Apache Beam编写的流水线可以移植到任何支持的执行引擎(如Apache Apex、Apache Flink、Apache Spark和Cloud Dataflow等)上执行。


[1] 在异步社区本书对应的网页中提供了本书的所有图,包含一些自带动画效果的延时图。对于纸质书版本,我们提供通过关键帧序列展示的静态图。

这里的例子使用Apache Beam不是因为这是一本关于Beam的书(确实不是),而是因为Apache Beam最完整地体现了本书中描述的概念。在最初编写“Streaming 102”时(在那个时候,文章中采用的仍然是来自谷歌的Cloud Dataflow的Dataflow模型,而不是来自Apache Beam的Beam模型),Dataflow模型确实是当时唯一能够为我们列举的所有这些示例提供所需表达力的系统。一年半之后,我可以很高兴地说,业界已经发生了很大变化,并且现存的大部分主要系统已经完成或正在朝着支持类似本书所描述的模型的方向发展。因此,请放心,虽然本书中涉及的概念是通过Beam进行介绍的,但可以说,它将同样适用于未来你将遇到的大多数其他系统。