描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111687832丛书名: 大数据技术丛书
编辑推荐
(1)作者资深:Apache Flink源码贡献者,多年Flink开发经验,第四范式AI数据平台架构师。(2)深入原理:从源代码角度剖析Flink设计思想、架构原理以及各功能模块的底层实现原理。(3)化繁为简:用大量架构设计图、UML图和代码注释降低读者阅读和理解Flink源代码的门槛。(4)专家好评:前腾讯、360、趣头条、明源云等企业的大数据专家一致好评和推荐。
内容简介
内容简介
这是一本从源代码角度剖析Flink设计思想、架构原理以及各功能模块的底层实现原理的著作。
作者是Flink领域的资深技术专家和架构师,对Flink的源代码进行了深入分析和解读,同时融入了自己丰富的工程实践经验,既能让理解Flink的设计与实现原理,又能为他们解决性能优化等实际应用问题提供源码级别的指导。源码大多艰涩难懂,为了降低读者的学习门槛,本书提供了大量架构设计图、UML图和代码注释。
通过阅读本书,你将:
?彻底掌握Flink源码设计与实现
?深度掌握Flink作业运行流程
?深入了解Flink部署模式实现原理
?深度掌握Flink Runtime设计和实现原理
?庖丁解牛Flink网络通信原理
?探索Flink内存管理实现
?深入了解Flink接口设计
?从Flink源码中学习架构设计经验
这是一本从源代码角度剖析Flink设计思想、架构原理以及各功能模块的底层实现原理的著作。
作者是Flink领域的资深技术专家和架构师,对Flink的源代码进行了深入分析和解读,同时融入了自己丰富的工程实践经验,既能让理解Flink的设计与实现原理,又能为他们解决性能优化等实际应用问题提供源码级别的指导。源码大多艰涩难懂,为了降低读者的学习门槛,本书提供了大量架构设计图、UML图和代码注释。
通过阅读本书,你将:
?彻底掌握Flink源码设计与实现
?深度掌握Flink作业运行流程
?深入了解Flink部署模式实现原理
?深度掌握Flink Runtime设计和实现原理
?庖丁解牛Flink网络通信原理
?探索Flink内存管理实现
?深入了解Flink接口设计
?从Flink源码中学习架构设计经验
目 录
前 言
第1章 Flink设计理念与基本架构 1
1.1 Flink基本设计思想 1
1.1.1 Stratosphere系统架构 1
1.1.2 DataFlow模型的设计思想 3
1.1.3 分布式异步快照算法 6
1.2 Flink整体架构 9
1.2.1 架构介绍 9
1.2.2 Flink集群架构 11
1.2.3 核心概念 12
1.3 Flink源码分析与编译 14
1.3.1 源码编译 14
1.3.2 源码调试环境搭建 15
1.4 本章小结 19
第2章 DataStream的设计与实现 20
2.1 DataStream API的主要组成 20
2.1.1 DataStream API应用实例 20
2.1.2 Transformation详解 23
2.2 StreamOperator的定义与实现 25
2.2.1 StreamOperator接口实现 26
2.2.2 OneInputStreamOperator与TwoInputStreamOperator 31
2.2.3 StreamOperatorFactory详解 33
2.3 Function的定义与实现 35
2.3.1 RichFunction详解 36
2.3.2 SourceFunction与SinkFunction 38
2.3.3 ProcessFunction的定义与实现 44
2.4 TimerService的设计与实现 47
2.4.1 时间概念与Watermark 47
2.4.2 TimerService时间服务 53
2.5 DataStream核心转换 59
2.5.1 KeyedStream与物理分区 59
2.5.2 WindowedStream的设计与实现 62
2.6 本章小结 68
第3章 运行时的核心原理与实现 69
3.1 运行时的整体架构 69
3.1.1 运行时整体架构概览 69
3.1.2 集群的启动与初始化 72
3.2 运行时组件的创建和启动 79
3.2.1 集群组件的创建和启动 79
3.2.2 WebMonitorEndpoint的创建与初始化 85
3.2.3 Dispatcher的创建与初始化 91
3.2.4 ResourceManager的创建与初始化 98
3.2.5 TaskManager的创建与启动 106
3.3 集群资源管理 115
3.3.1 ResourceManager详解 116
3.3.2 ResourceManagerGateway接口实现 118
3.3.3 Slot计算资源管理 119
3.4 系统高可用与容错 130
3.4.1 HighAvailabilityServices的设计与实现 130
3.4.2 基于ZooKeeper实现高可用 135
3.4.3 JobGraphStore的设计与实现 141
3.5 本章小结 144
第4章 任务提交与执行 145
4.1 客户端作业提交 145
4.1.1 命令行提交 145
4.1.2 创建和初始化CLIFrontend 148
4.1.3 PackagedProgram构造 150
4.2 ExecutionEnvironment初始化 152
4.2.1 ExecutionEnvironment类型 152
4.2.2 StreamExecutionEnvironment详解 154
4.3 将Pipeline转换成JobGraph 161
4.3.1 用Transformation生成StreamGraph 162
4.3.2 将StreamGraph转换为JobGraph 169
4.3.3 将JobGraph提交到集群运行时 176
4.4 JobGraph的接收与运行 178
4.4.1 JobGraph提交整体流程 178
4.4.2 Dispatcher任务与分发 180
4.4.3 JobManager启动与初始化 184
4.4.4 JobMaster详解 188
4.5 ExecutionGraph的调度与执行 195
4.5.1 ExecutionGraph生成 198
4.5.2 SchedulerNG调度器 200
4.6 Task的执行与注销 206
4.6.1 Task的启动与注销 208
4.6.2 AbstractInvokable的加载与初始化 211
4.6.3 StreamTask详解 212
4.6.4 StreamTask线程模型 216
4.6.5 Task重启与容错策略 223
4.7 本章小结 234
第5章 集群部署模式 235
5.1 基本概念 235
5.1.1 ClusterClient的创建与获取 235
5.1.2 ClusterEntrypoint集群启动类 241
5.2 Flink On Yarn的设计与实现 245
5.2.1 Yarn架构的设计与实现 245
5.2.2 Session集群的部署与启动 247
5.2.3 YarnResourceManager详解 253
5.3 Flink On Kubernetes的设计与实现 258
5.3.1 Flink On Kubernetes架构 259
5.3.2 Session集群的部署与启动 261
5.3.3 KubernetesResourceManager详解 268
5.4 本章小结 274
第6章 状态管理与容错 275
6.1 状态数据管理 275
6.1.1 状态数据类型 275
6.1.2 状态初始化流程 279
6.2 KeyedState的创建与管理 285
6.2.1 KeyedStateBackend的整体设计 285
6.2.2 HeapKeyedStateBackend的实现 286
6.3 OperatorState的创建与管理 295
6.3.1 OperatorStateBackend的整体设计 295
6.3.2 基于DefaultOperatorState-Backend创建OperatorState 296
6.4 StateBackend详解 299
6.4.1 StateBackend的整体设计 299
6.4.2 MemoryStateBackend的实现 303
6.5 Checkpoint的设计与实现 308
6.5.1 Checkpoint的实现原理 308
6.5.2 Checkpoint的触发过程 315
6.6 本章小结 341
第7章 网络通信 342
7.1 集群RPC通信机制 342
7.1.1 Flink RPC框架的整体设计 342
7.1.2 AkkaRpcService详解 347
7.1.3 Rp
第1章 Flink设计理念与基本架构 1
1.1 Flink基本设计思想 1
1.1.1 Stratosphere系统架构 1
1.1.2 DataFlow模型的设计思想 3
1.1.3 分布式异步快照算法 6
1.2 Flink整体架构 9
1.2.1 架构介绍 9
1.2.2 Flink集群架构 11
1.2.3 核心概念 12
1.3 Flink源码分析与编译 14
1.3.1 源码编译 14
1.3.2 源码调试环境搭建 15
1.4 本章小结 19
第2章 DataStream的设计与实现 20
2.1 DataStream API的主要组成 20
2.1.1 DataStream API应用实例 20
2.1.2 Transformation详解 23
2.2 StreamOperator的定义与实现 25
2.2.1 StreamOperator接口实现 26
2.2.2 OneInputStreamOperator与TwoInputStreamOperator 31
2.2.3 StreamOperatorFactory详解 33
2.3 Function的定义与实现 35
2.3.1 RichFunction详解 36
2.3.2 SourceFunction与SinkFunction 38
2.3.3 ProcessFunction的定义与实现 44
2.4 TimerService的设计与实现 47
2.4.1 时间概念与Watermark 47
2.4.2 TimerService时间服务 53
2.5 DataStream核心转换 59
2.5.1 KeyedStream与物理分区 59
2.5.2 WindowedStream的设计与实现 62
2.6 本章小结 68
第3章 运行时的核心原理与实现 69
3.1 运行时的整体架构 69
3.1.1 运行时整体架构概览 69
3.1.2 集群的启动与初始化 72
3.2 运行时组件的创建和启动 79
3.2.1 集群组件的创建和启动 79
3.2.2 WebMonitorEndpoint的创建与初始化 85
3.2.3 Dispatcher的创建与初始化 91
3.2.4 ResourceManager的创建与初始化 98
3.2.5 TaskManager的创建与启动 106
3.3 集群资源管理 115
3.3.1 ResourceManager详解 116
3.3.2 ResourceManagerGateway接口实现 118
3.3.3 Slot计算资源管理 119
3.4 系统高可用与容错 130
3.4.1 HighAvailabilityServices的设计与实现 130
3.4.2 基于ZooKeeper实现高可用 135
3.4.3 JobGraphStore的设计与实现 141
3.5 本章小结 144
第4章 任务提交与执行 145
4.1 客户端作业提交 145
4.1.1 命令行提交 145
4.1.2 创建和初始化CLIFrontend 148
4.1.3 PackagedProgram构造 150
4.2 ExecutionEnvironment初始化 152
4.2.1 ExecutionEnvironment类型 152
4.2.2 StreamExecutionEnvironment详解 154
4.3 将Pipeline转换成JobGraph 161
4.3.1 用Transformation生成StreamGraph 162
4.3.2 将StreamGraph转换为JobGraph 169
4.3.3 将JobGraph提交到集群运行时 176
4.4 JobGraph的接收与运行 178
4.4.1 JobGraph提交整体流程 178
4.4.2 Dispatcher任务与分发 180
4.4.3 JobManager启动与初始化 184
4.4.4 JobMaster详解 188
4.5 ExecutionGraph的调度与执行 195
4.5.1 ExecutionGraph生成 198
4.5.2 SchedulerNG调度器 200
4.6 Task的执行与注销 206
4.6.1 Task的启动与注销 208
4.6.2 AbstractInvokable的加载与初始化 211
4.6.3 StreamTask详解 212
4.6.4 StreamTask线程模型 216
4.6.5 Task重启与容错策略 223
4.7 本章小结 234
第5章 集群部署模式 235
5.1 基本概念 235
5.1.1 ClusterClient的创建与获取 235
5.1.2 ClusterEntrypoint集群启动类 241
5.2 Flink On Yarn的设计与实现 245
5.2.1 Yarn架构的设计与实现 245
5.2.2 Session集群的部署与启动 247
5.2.3 YarnResourceManager详解 253
5.3 Flink On Kubernetes的设计与实现 258
5.3.1 Flink On Kubernetes架构 259
5.3.2 Session集群的部署与启动 261
5.3.3 KubernetesResourceManager详解 268
5.4 本章小结 274
第6章 状态管理与容错 275
6.1 状态数据管理 275
6.1.1 状态数据类型 275
6.1.2 状态初始化流程 279
6.2 KeyedState的创建与管理 285
6.2.1 KeyedStateBackend的整体设计 285
6.2.2 HeapKeyedStateBackend的实现 286
6.3 OperatorState的创建与管理 295
6.3.1 OperatorStateBackend的整体设计 295
6.3.2 基于DefaultOperatorState-Backend创建OperatorState 296
6.4 StateBackend详解 299
6.4.1 StateBackend的整体设计 299
6.4.2 MemoryStateBackend的实现 303
6.5 Checkpoint的设计与实现 308
6.5.1 Checkpoint的实现原理 308
6.5.2 Checkpoint的触发过程 315
6.6 本章小结 341
第7章 网络通信 342
7.1 集群RPC通信机制 342
7.1.1 Flink RPC框架的整体设计 342
7.1.2 AkkaRpcService详解 347
7.1.3 Rp
前 言
为什么要写本书
流计算从出现到普及,经历了非常多的变化——从早期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技术本身比较新,且处于快速发展阶段,很多新的概念我难免会有疏漏。如果你有任何意见,可以通过电子邮箱[email protected]联系我。期待你的反馈。
致谢
在写作本书的过程中,我得到很多朋友及同事的帮助和支持,尤其是李蒲生的大力支持,在此表示衷心感谢!
非常感谢我的妻子,因为有她的支持,我才能坚持将这本书写完。在创作期间,我们还有了孩子,这让我更加有动力完成自己的创作,也将这本书献给我们刚出生的小禾元。
感谢机械工业出版社华章公司的编辑杨福川老师和韩蕊老师在这一年多的时间中始终支持我的写作,他们的鼓励和帮助引导我顺利完成全部书稿。
谨以此书献给我亲爱的家人以及众多热爱Flink的朋友们!
流计算从出现到普及,经历了非常多的变化——从早期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技术本身比较新,且处于快速发展阶段,很多新的概念我难免会有疏漏。如果你有任何意见,可以通过电子邮箱[email protected]联系我。期待你的反馈。
致谢
在写作本书的过程中,我得到很多朋友及同事的帮助和支持,尤其是李蒲生的大力支持,在此表示衷心感谢!
非常感谢我的妻子,因为有她的支持,我才能坚持将这本书写完。在创作期间,我们还有了孩子,这让我更加有动力完成自己的创作,也将这本书献给我们刚出生的小禾元。
感谢机械工业出版社华章公司的编辑杨福川老师和韩蕊老师在这一年多的时间中始终支持我的写作,他们的鼓励和帮助引导我顺利完成全部书稿。
谨以此书献给我亲爱的家人以及众多热爱Flink的朋友们!
评论
还没有评论。