前言

为什么要写本书

流计算从出现到普及,经历了非常多的变化——从早期Apache Storm等技术的落地和使用,到现在越来越多的公司选择使用Apache Flink作为流处理核心技术。Flink以其强大的批流一体处理能力以及低延迟、高吞吐等特性,正在吸引着越来越多的公司和用户加入Flink社区。和大多数爱好Flink技术的人一样,我也被Flink深深吸引,想要更加深入地了解Flink底层的技术组成。

我用了一年多的时间静心研究Flink技术的底层实现原理,前前后后遇到过很多困难。单纯地阅读源码是一件比较乏味且需要毅力的事,需要花费非常多的时间和精力,一点点地研究框架中每个模块的源码实现以及每个方法的意义、它们之间的调用关系等。虽然过程很枯燥,但是在我将整个Flink框架梳理清楚之后,不禁为Flink框架的内部实现所折服——每个代码细节都体现了开发人员的专业的实现思想,整个框架背后包含了非常多的思想结晶。学习源码不仅提升了我的技术功底,还加深了我对技术的理解。要想深度掌握一项技术,可以说没有什么方法比阅读源码更加有效了。通常情况下,阅读源码有较高的技术门槛,不易下手,我们需要对技术有一定的理解和认识,至少能够非常熟练地将其应用在实际工作之中,才能更好地了解其底层运行原理。否则在不了解框架使用的情况下贸然学习源码实现,非常容易陷入混乱和迷惑的状态,从而极大地影响学习体验。

结合以上学习经验,我希望能够写一本将Flink源码讲透的书,帮助那些想深入理解源码、深度掌握Flink底层核心技术实现但没有太多时间进行研究的读者。本书可以帮助读者更加游刃有余地将Flink这项技术应用到实际工作中。我相信,面对再难的事情,只要我们脚踏实地,循序渐进,最终一定会有所领悟,即便达不到非常专业和精进,也至少比初学有更多的收获。

读者对象

本书将从多个方面介绍Flink原理实现与源码,包括Flink各类编程接口的设计和实现以及集群运行时等内部原理。本书适合以下读者阅读。

·大数据架构师、大数据开发工程师

·Flink流计算开发工程师

·数据挖掘工程师

如何阅读本书

全书共8章:第1章介绍Flink设计理念与基本架构;第2章介绍DataStream的设计与实现;第3章介绍运行时的核心原理与实现,包括Dispatcher、ResourceManager以及JobManager等核心组件的源码级解析和介绍;第4章介绍Flink任务提交与执行的整体流程,包括客户端实现、运行时作业执行过程、JobGraph及ExecutionGraph图转换等;第5章介绍不同的集群部署模式,包括On Yarn、On Kubernetes等;第6章介绍状态管理与容错,包括不同类型状态后端的设计与实现;第7章介绍Flink网络通信,包括RPC通信以及基于Netty实现的网络栈;第8章介绍Flink内存管理,包括MemorySegment的设计与实现等。

勘误和支持

由于作者的水平有限,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。Flink技术本身比较新,且处于快速发展阶段,很多新的概念我难免会有疏漏。如果你有任何意见,可以通过电子邮箱zlb1028@126.com联系我。期待你的反馈。

致谢

在写作本书的过程中,我得到很多朋友及同事的帮助和支持,尤其是李蒲生的大力支持,在此表示衷心感谢!

非常感谢我的妻子,因为有她的支持,我才能坚持将这本书写完。在创作期间,我们还有了孩子,这让我更加有动力完成自己的创作,也将这本书献给我们刚出生的小禾元。

感谢机械工业出版社华章公司的编辑杨福川老师和韩蕊老师在这一年多的时间中始终支持我的写作,他们的鼓励和帮助引导我顺利完成全部书稿。

谨以此书献给我最亲爱的家人以及众多热爱Flink的朋友们!