Skip to content

Preface

kimi edited this page Feb 6, 2022 · 3 revisions

前言或:你在这里得到了什么?

你好,富有冒险精神的读者,欢迎来到我们的书! 在这一点上,我假设你要么有兴趣了解更多关于流处理,要么希望花几个小时阅读关于雄伟的褐鳟鱼的荣耀。无论是哪种方式,我都向你们致敬!也就是说,那些处于后一种情况的人,如果没有对计算机科学的高级理解,那么在前进之前,应该考虑你有多大的准备来应对失望;注意事项,以及所有这些。

为了从一开始就给这本书定下基调,有几件事我想给大家提个醒。首先,这本书有点奇怪,因为我们有多个作者,但我们不是假装我们都以同样的声音说话和写作,就像我们是奇怪的同卵三胞胎,碰巧出生在不同的父母身边。因为虽然这听起来很有趣,但最终的结果实际上是不那么令人愉快的阅读。相反,我们选择了用我们自己的声音来写,而且我们赋予这本书足够的自我意识,以便能够在适当的地方提到我们每个人,但又不至于让它因为我们把它变成一本书而不是像带有苏格兰口音的机器人恐龙那样的更酷的东西而反感。

就声音而言,你会遇到三种声音。

Tyler

那就是我。如果你没有被明确告知有其他人在发言,你可以认为是我,因为我们在游戏的后期加入了其他作者,当我想到要回去更新我已经写好的东西时,我基本上是 "见鬼 "了。我是谷歌数据处理语言和系统组的技术负责人,负责谷歌云数据流、谷歌的Apache Beam工作,以及谷歌内部的数据处理系统,如Flume、MillWheel和MapReduce。我也是Apache Beam PMC的创始成员之一。

fig-p-1

Slava

Slava 是谷歌 MillWheel 团队的长期成员,后来又是构建 MillWheel 后继者的 Windmill 团队的原始成员,这个尚未命名的系统为谷歌云数据流的流引擎提供动力。Slava 是世界上流处理系统中水印和时间语义方面最重要的专家。你可能会发现,他是第三章 "Watermark" 的作者,这并不奇怪。

Reuven

Reuven 在这个名单的底部,因为他在流处理方面的经验比我和 Slava 的总和还要多,因此如果他的位置再高一点,就会压倒我们。Reuven 创造或领导了谷歌通用流处理引擎中几乎所有有趣的系统级魔法,包括在提供高吞吐量、低延迟、完全一次性语义的系统中,运用了难以计数的细节关注,但还是利用了细粒度的检查点。你可能会发现,他是第5章 "Exactly-Once and Side Effects” 的作者,这并不奇怪。他也恰好是 Apache Beam 的 PMC 成员。

本书导航

现在你知道你将听到谁的声音,下一个合乎逻辑的步骤是找出你将听到的内容,这带来了我想提到的第二件事。从概念上讲,这本书有两个主要部分,每个部分有四章,每章后面都有一个相对独立的章节。

乐趣从第一部分 “Beam 模型"(第1-4章)开始,重点介绍了最初为谷歌云数据流开发的高级批处理和流数据处理模型,后来作为 Apache Beam 捐赠给了 Apache 软件基金会,现在在业界的大多数其他系统中也可以看到全部或部分内容。它由四章组成。

  • 第 1 章,流处理 101,涵盖了流处理的基础知识,建立了一些术语,讨论了流系统的能力,区分了两个重要的时间域(处理时间和事件时间),最后还看了一些常见的数据处理模式。
  • 第 2 章,数据处理的内容、地点、时间和方法,详细介绍了对失序数据进行稳健流处理的核心概念,每个概念都在具体的运行实例中进行分析,并以动画图的形式突出了时间维度。
  • 第 3 章,水印(由Slava撰写),对时间进度指标进行了深入的调查,它们是如何被创建的,以及它们如何在管道中传播。最后,它研究了两个真实世界的水印实现的细节。
  • 第 4 章,高级窗口,这是对第 2 章的继承,深入探讨一些高级窗口和触发概念,如处理时间窗口、会话和延续触发。

在第一部分和第二部分之间,第五章 "Exactly-Once和副作用"(由Reuven撰写)提供了一个及时的插曲,因为其中包含的细节很重要。在这一章中,他列举了提供端到端 Exactly-Once(或有效一次性)处理语义的挑战,并阐述了三种不同的完全一次性处理方法的实施细节。Apache Flink、Apache Spark 和 Google Cloud Dataflow。

接下来是第二部分 "流和表"(第6-9章),它深入到概念中,研究了较低层次的 "流和表” 的流处理思维方式,最近由 Apache Kafka 社区的一些正直的公民推广,当然,几十年前由数据库社区的人们发明的,因为一切不都是这样吗?本书也由四章组成。

  • 第 6 章,流和表,介绍了流和表的基本概念,通过流和表的视角分析了经典的 MapReduce 方法,然后构建了一个流和表的理论,其通用性足以涵盖 Beam 模型的全部范围(甚至更多)。
  • 第 7 章,持久化状态的实用性,考虑了流媒体管道中持久化状态的动机,研究了两种常见的隐性状态,然后分析了一个实际的用例(广告归因),以告知一般状态管理机制的必要特征。
  • 第 8 章,流式SQL,在关系代数和 SQL 的背景下研究了流的意义,对比了 Beam 模型和经典 SQL 中固有的流和表的偏见,并提出了一套可能的路径,以将强大的流式语义纳入 SQL。
  • 第 9 章,流式 Join,它调查了各种不同的 join 类型,分析了它们在流式背景下的行为,最后详细研究了一个有用但不支持的流式 join 用例:时间有效性窗口。

最后,本书的结尾是第 10 章 "大规模数据处理的演变",该章重点介绍了数据处理系统的 MapReduce 血统的历史,研究了将流式系统演变为今天的一些重要贡献。

Takeways

作为最后一点指导,如果你要我描述我最希望读者从本书中得到的东西,我会这样说。

  • 你能从这本书中学到的最重要的东西是流和表的理论以及它们之间的关系。其他一切都建立在这个基础之上。不,我们在第 6 章才会讨论这个话题。这没关系;它值得等待,到那时你会更好地欣赏它的美妙之处。
  • 时间变化的关系是一个启示。它们是流处理的化身:是流式系统所要实现的一切的体现,也是与我们在批处理世界中所熟悉和喜爱的工具的强大联系。我们要到第 8 章才会了解它们,但同样,这段旅程会让你更加欣赏它们。
  • 一个写得很好的分布式流式引擎是一个神奇的东西。这可以说适用于一般的分布式系统,但当你进一步了解这些系统是如何构建以提供它们所做的语义(特别是第 3 章和第 5 章的案例研究)时,你就会发现它们为你做了多少重任。
  • LaTeX/Tikz 是制作图表的一个了不起的工具,无论是动画还是其他方面。一个可怕的、结痂的、有尖锐边缘和破伤风的工具,但还是一个令人难以置信的工具。我希望本书中的动画图给我们讨论的复杂主题带来的清晰性,能激励更多的人去尝试LaTeX/Tikz(在 “图" 中,我们提供了本书中动画的完整来源链接)。

在线资源

有一些相关的在线资源可以帮助你享受这本书。

图片

本书中的所有图片都可以在本书的网站上以数字形式获得。这对动画图片特别有用,在本书的非 Safari 格式中,只有几帧出现(漫画风格)。

动画图片本身是 LaTeX/Tikz 的图画,先渲染成PDF,然后通过 ImageMagick 转换为 GIF 动画。对于你们中更无畏的人来说,完整的源代码和渲染动画的说明(来自本书、"流式 101"和 "流式 102" 博文以及原始数据流模型论文)可以在 GitHub上 找到,网址是 https://github.com/takidau/animations。请注意,这大约是 14000 行的 LaTeX/Tikz 代码,它是非常有机地发展起来的,并不打算让其他人阅读和使用。换句话说,这是一个混乱的、交织着古老咒语的网络;现在回头,或者放弃所有希望,因为这里有龙。