- Flink技术内幕:架构设计与实现原理
- 罗江宇 赵士杰等
- 1810字
- 2025-02-20 11:49:26
前言
为什么要写本书
近些年来,流计算技术发展迅速,被广泛应用于数据ETL、数据BI、实时数据仓库建设和AI等方面。Flink作为流计算领域的一颗璀璨的明星,自问世以来发展迅猛,其技术生态圈也日益壮大,现已成为Apache顶级开源项目中最活跃的项目之一。很多企业选择用Flink来构建其流计算体系或流批一体体系,使用on YARN或on Kubernetes部署模式来进行大规模生产。
转眼间,我从事Flink研发工作已经4年,其间我对Flink的1.2、1.3、1.5、1.8、1.9、1.11和1.13版本源代码进行维护和改造,提供Flink大规模集群生产支持,并在公司内提供业务解决方案。在为业务方提供支持的过程中,我逐渐萌生写一本剖析Flink内部机制的书的想法,原因有二。
其一,随着流计算的流行和应用于大规模生产,公司对Flink的性能、可用性和效能等方面的要求更加迫切,因而更加需要流计算方面的人才,尤其是拥有Flink性能调优、可用性和效能等方面经验的人才。而单纯查看官方文档,对Flink机制的认识只能流于黑盒形式。只有深入源代码才能深刻理解Flink的内部机制,才能更好地进行性能调优,做好可用性保障和优化,以及做好效能方面的优化。
其二,市场上缺少深入剖析Flink源代码和设计的图书。我希望借助自己多年从事大规模生产以及进行多个Flink版本维护与改造的经验,对Flink的设计与实现进行深入剖析,帮助读者更好地了解Flink源代码与机制。
通过了解源代码,读者能有以下收获:
- 编写出更健壮的流计算代码;
- 更好地对流计算作业进行调优,使得作业性能更高;
- 更好地维护Flink引擎,并对Flink引擎进行二次开发。
读者对象
本书适合以下几类人员阅读:
- 流计算开发人员、大数据开发人员;
- 大数据架构人员;
- 对Flink计算引擎底层感兴趣的相关人员。
本书特色
- 基于使用方式及其背后的原理、原理背后的设计及源代码实现来剖析Flink内部机制,由浅入深。
- 尽量用图来展示原理和机制,以便于读者理解。
- 尽可能结合实际生产分析Flink内部机制,对读者的实际生产具有指导意义。
- 讲解的设计和实现原理有助于读者提升架构设计与实现能力。
本书结构与内容
本书基于Flink 1.9版本的源代码来解析Flink。全书共11章,主要内容如下。
- 第1章 阅读Flink源代码前的准备
主要介绍Flink源代码阅读环境准备以及Flink的设计理念和基本架构,包括Flink源代码的导入流程和调试方式,Flink与Hadoop MapReduce、Spark的设计差异,以及Flink的分层架构和运行时架构。
- 第2章 编程模型与API
主要介绍Flink DataStream的算子的使用和实现原理。首先讲解DataStream底层的转换,接着介绍常用算子(如FlatMap、Join、Aggregation、Union),最后解析窗口的设计与实现。
- 第3章 运行时组件与通信
深入剖析运行时组件、组件间通信及运行时组件的高可用。首先介绍运行时组件REST、Dispatcher、ResourceManager、JobMaster和TaskExecutor,接着介绍运行时组件间通信的框架Akka,并以Slot申请为例讲解运行时组件之间的通信,最后介绍运行时组件高可用的功能、存在的问题及其解决方案。
- 第4章 状态管理与容错
从状态、检查点、状态后端三个概念入手,对Flink状态管理和容错的设计与实现进行深度剖析。
- 第5章 任务提交与执行
主要介绍Flink任务提交的整个流程,从客户端、JobManager和TaskManager端对应任务各个阶段的转换入手进行深入的梳理与分析。
- 第6章 Flink网络栈
首先介绍Flink的内存管理机制,然后讲解什么是Flink网络栈以及网络传输流程,其中涵盖Flink的两种背压实现方式,最后介绍流批一体的shuffle架构的设计和实现。
- 第7章 Flink Connector的设计与实现
首先以Kafka Connector为切入点介绍Connector模块设计时需要考虑的消费、分区管理、一致性语义保障等关键问题,然后以HBase为例介绍SQL/Table Connector的使用和实现原理。
- 第8章 部署模式
主要介绍Flink中常用的三种部署模式:Local模式、Standalone模式和第三方部署模式。首先介绍用于本地调试的Local模式、Standalone模式中Session模式的构建与实现,然后介绍Flink on YARN的Session模式和Per-Job模式的设计与实现,最后介绍Flink on Kubernetes基于YAML的实现。
- 第9章 Flink Table与SQL
主要介绍Flink Table与SQL中StreamTableEnvironment的实现过程、SQL的解析过程、Table Connector以及UDF和内置算子的实现。
- 第10章 Flink CEP原理解析
主要介绍Flink CEP的基本概念和语法,如何使用Flink CEP编写作业,以及Flink CEP内部基于NFA的实现原理。
- 第11章 Flink监控
主要介绍Flink监控指标、常用系统指标和监控体系的建设,以及常用的定位手段。
勘误与支持
由于作者的水平有限,加之写作时间仓促,书中难免存在不妥之处。为此,我们在GitHub上创建了本书专属工程(https://github.com/streaming-olap/deep-in-flink-book)来支持在线反馈。大家如有任何意见或建议,欢迎在该工程下创建issue,我们会尽快处理。
致谢
感谢Flink社区提供了如此优秀的流处理框架。
感谢我们的家人和朋友,没有他们的支持和鼓励,我们不可能完成本书。
感谢机械工业出版社华章公司的编辑杨福川和罗词亮,他们的细致工作让本书得以顺利出版。
谨以此书献给大数据行业的关注者和建设者!
罗江宇
2021年12月